@omnitron-dev/prism 0.2.0 → 0.3.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 (839) hide show
  1. package/dist/accessibility/index.d.ts +7 -151
  2. package/dist/accessibility/index.d.ts.map +1 -0
  3. package/dist/accessibility/index.js +0 -1
  4. package/dist/accessibility/index.js.map +1 -1
  5. package/dist/accessibility/vision-mode.d.ts +154 -0
  6. package/dist/accessibility/vision-mode.d.ts.map +1 -0
  7. package/dist/blocks/auth-block/auth-block.d.ts +107 -0
  8. package/dist/blocks/auth-block/auth-block.d.ts.map +1 -0
  9. package/dist/blocks/auth-block/guards.d.ts +262 -0
  10. package/dist/blocks/auth-block/guards.d.ts.map +1 -0
  11. package/dist/blocks/auth-block/index.d.ts +13 -0
  12. package/dist/blocks/auth-block/index.d.ts.map +1 -0
  13. package/dist/blocks/auth-block/types.d.ts +232 -0
  14. package/dist/blocks/auth-block/types.d.ts.map +1 -0
  15. package/dist/blocks/dashboard-block/dashboard-block.d.ts +53 -0
  16. package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -0
  17. package/dist/blocks/dashboard-block/index.d.ts +12 -0
  18. package/dist/blocks/dashboard-block/index.d.ts.map +1 -0
  19. package/dist/blocks/dashboard-block/types.d.ts +182 -0
  20. package/dist/blocks/dashboard-block/types.d.ts.map +1 -0
  21. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +95 -0
  22. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -0
  23. package/dist/blocks/data-grid-block/data-grid-block.d.ts +81 -0
  24. package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -0
  25. package/dist/blocks/data-grid-block/index.d.ts +11 -0
  26. package/dist/blocks/data-grid-block/index.d.ts.map +1 -0
  27. package/dist/blocks/data-grid-block/types.d.ts +304 -0
  28. package/dist/blocks/data-grid-block/types.d.ts.map +1 -0
  29. package/dist/blocks/index.d.ts +10 -1235
  30. package/dist/blocks/index.d.ts.map +1 -0
  31. package/dist/blocks/index.js +139 -42
  32. package/dist/blocks/index.js.map +1 -1
  33. package/dist/{chunk-VAAIHNWQ.js → chunk-6AHI4GSV.js} +3 -3
  34. package/dist/chunk-6AHI4GSV.js.map +1 -0
  35. package/dist/{chunk-JDTC2SBY.js → chunk-AD4W7HYC.js} +2 -2
  36. package/dist/chunk-AD4W7HYC.js.map +1 -0
  37. package/dist/{chunk-SNKGGHBT.js → chunk-ADG4HZEP.js} +3 -3
  38. package/dist/chunk-ADG4HZEP.js.map +1 -0
  39. package/dist/{chunk-JNU4QHJK.js → chunk-AYYFMTMI.js} +5 -4
  40. package/dist/{chunk-JNU4QHJK.js.map → chunk-AYYFMTMI.js.map} +1 -1
  41. package/dist/{chunk-HO2GKTWJ.js → chunk-BRDWQVRT.js} +2 -2
  42. package/dist/chunk-BRDWQVRT.js.map +1 -0
  43. package/dist/{chunk-XXP3ZGU6.js → chunk-BZOL7GMU.js} +21 -13
  44. package/dist/chunk-BZOL7GMU.js.map +1 -0
  45. package/dist/{chunk-2FYNRDXR.js → chunk-DRFNMZLG.js} +2 -2
  46. package/dist/chunk-DRFNMZLG.js.map +1 -0
  47. package/dist/{chunk-BV32OJ2A.js → chunk-GUFHFEPZ.js} +2 -2
  48. package/dist/chunk-GUFHFEPZ.js.map +1 -0
  49. package/dist/{chunk-KTCWPGON.js → chunk-OBJ244BO.js} +558 -75
  50. package/dist/chunk-OBJ244BO.js.map +1 -0
  51. package/dist/{chunk-IZOIO7PA.js → chunk-S6SEGBX6.js} +31 -22
  52. package/dist/chunk-S6SEGBX6.js.map +1 -0
  53. package/dist/chunk-SNZK5X6F.js +594 -0
  54. package/dist/chunk-SNZK5X6F.js.map +1 -0
  55. package/dist/{chunk-YJMAQL3S.js → chunk-WFD54GQQ.js} +122 -69
  56. package/dist/chunk-WFD54GQQ.js.map +1 -0
  57. package/dist/{chunk-DDY7TLUI.js → chunk-XIXSSI3B.js} +28 -2
  58. package/dist/chunk-XIXSSI3B.js.map +1 -0
  59. package/dist/{chunk-A2Z7NVGL.js → chunk-YQW43BDH.js} +1274 -792
  60. package/dist/chunk-YQW43BDH.js.map +1 -0
  61. package/dist/{chunk-XWL6J6IO.js → chunk-YSIG2XYH.js} +2 -2
  62. package/dist/chunk-YSIG2XYH.js.map +1 -0
  63. package/dist/chunk-Z5OSPAOC.js +1576 -0
  64. package/dist/chunk-Z5OSPAOC.js.map +1 -0
  65. package/dist/{chunk-MEFT6XPH.js → chunk-ZTATTUH7.js} +170 -85
  66. package/dist/chunk-ZTATTUH7.js.map +1 -0
  67. package/dist/cli/commands/add.d.ts +22 -0
  68. package/dist/cli/commands/add.d.ts.map +1 -0
  69. package/dist/cli/commands/diff.d.ts +13 -0
  70. package/dist/cli/commands/diff.d.ts.map +1 -0
  71. package/dist/cli/commands/doctor.d.ts +13 -0
  72. package/dist/cli/commands/doctor.d.ts.map +1 -0
  73. package/dist/cli/commands/init.d.ts +13 -0
  74. package/dist/cli/commands/init.d.ts.map +1 -0
  75. package/dist/cli/commands/list.d.ts +13 -0
  76. package/dist/cli/commands/list.d.ts.map +1 -0
  77. package/dist/cli/commands/remove.d.ts +13 -0
  78. package/dist/cli/commands/remove.d.ts.map +1 -0
  79. package/dist/cli/commands/update.d.ts +13 -0
  80. package/dist/cli/commands/update.d.ts.map +1 -0
  81. package/dist/cli/config.d.ts +73 -0
  82. package/dist/cli/config.d.ts.map +1 -0
  83. package/dist/cli/constants.d.ts +60 -0
  84. package/dist/cli/constants.d.ts.map +1 -0
  85. package/dist/cli/index.d.ts +27 -0
  86. package/dist/cli/index.d.ts.map +1 -0
  87. package/dist/cli/index.js +31 -37
  88. package/dist/cli/index.js.map +1 -1
  89. package/dist/components/accordion/accordion.d.ts +149 -0
  90. package/dist/components/accordion/accordion.d.ts.map +1 -0
  91. package/dist/components/accordion/index.d.ts +7 -0
  92. package/dist/components/accordion/index.d.ts.map +1 -0
  93. package/dist/components/admin-filters/admin-data-table.d.ts +185 -0
  94. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -0
  95. package/dist/components/admin-filters/amount-cell.d.ts +39 -0
  96. package/dist/components/admin-filters/amount-cell.d.ts.map +1 -0
  97. package/dist/components/admin-filters/filter-toolbar.d.ts +99 -0
  98. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -0
  99. package/dist/components/admin-filters/index.d.ts +13 -0
  100. package/dist/components/admin-filters/index.d.ts.map +1 -0
  101. package/dist/components/admin-filters/status-chip.d.ts +55 -0
  102. package/dist/components/admin-filters/status-chip.d.ts.map +1 -0
  103. package/dist/components/alert/alert.d.ts +159 -0
  104. package/dist/components/alert/alert.d.ts.map +1 -0
  105. package/dist/components/alert/index.d.ts +7 -0
  106. package/dist/components/alert/index.d.ts.map +1 -0
  107. package/dist/components/animate/animate-border.d.ts +33 -0
  108. package/dist/components/animate/animate-border.d.ts.map +1 -0
  109. package/dist/components/animate/index.d.ts +3 -0
  110. package/dist/components/animate/index.d.ts.map +1 -0
  111. package/dist/components/animate/motion-lazy.d.ts +5 -0
  112. package/dist/components/animate/motion-lazy.d.ts.map +1 -0
  113. package/dist/components/avatar/avatar.d.ts +78 -0
  114. package/dist/components/avatar/avatar.d.ts.map +1 -0
  115. package/dist/components/avatar/index.d.ts +7 -0
  116. package/dist/components/avatar/index.d.ts.map +1 -0
  117. package/dist/components/badge/badge.d.ts +102 -0
  118. package/dist/components/badge/badge.d.ts.map +1 -0
  119. package/dist/components/badge/index.d.ts +7 -0
  120. package/dist/components/badge/index.d.ts.map +1 -0
  121. package/dist/components/breadcrumbs/breadcrumbs.d.ts +100 -0
  122. package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  123. package/dist/components/breadcrumbs/index.d.ts +7 -0
  124. package/dist/components/breadcrumbs/index.d.ts.map +1 -0
  125. package/dist/components/card/card.d.ts +127 -0
  126. package/dist/components/card/card.d.ts.map +1 -0
  127. package/dist/components/card/index.d.ts +7 -0
  128. package/dist/components/card/index.d.ts.map +1 -0
  129. package/dist/components/carousel/carousel.d.ts +35 -0
  130. package/dist/components/carousel/carousel.d.ts.map +1 -0
  131. package/dist/components/carousel/classes.d.ts +35 -0
  132. package/dist/components/carousel/classes.d.ts.map +1 -0
  133. package/dist/components/carousel/index.d.ts +10 -0
  134. package/dist/components/carousel/index.d.ts.map +1 -0
  135. package/dist/components/carousel/types.d.ts +167 -0
  136. package/dist/components/carousel/types.d.ts.map +1 -0
  137. package/dist/components/carousel/use-carousel.d.ts +51 -0
  138. package/dist/components/carousel/use-carousel.d.ts.map +1 -0
  139. package/dist/components/changelog/changelog-entry.d.ts +10 -0
  140. package/dist/components/changelog/changelog-entry.d.ts.map +1 -0
  141. package/dist/components/changelog/changelog-timeline.d.ts +9 -0
  142. package/dist/components/changelog/changelog-timeline.d.ts.map +1 -0
  143. package/dist/components/changelog/index.d.ts +3 -0
  144. package/dist/components/changelog/index.d.ts.map +1 -0
  145. package/dist/components/chart/chart.d.ts +39 -0
  146. package/dist/components/chart/chart.d.ts.map +1 -0
  147. package/dist/components/chart/classes.d.ts +24 -0
  148. package/dist/components/chart/classes.d.ts.map +1 -0
  149. package/dist/components/chart/components/chart-legends.d.ts +24 -0
  150. package/dist/components/chart/components/chart-legends.d.ts.map +1 -0
  151. package/dist/components/chart/components/chart-loading.d.ts +21 -0
  152. package/dist/components/chart/components/chart-loading.d.ts.map +1 -0
  153. package/dist/components/chart/components/index.d.ts +8 -0
  154. package/dist/components/chart/components/index.d.ts.map +1 -0
  155. package/dist/components/chart/index.d.ts +14 -0
  156. package/dist/components/chart/index.d.ts.map +1 -0
  157. package/dist/components/chart/types.d.ts +264 -0
  158. package/dist/components/chart/types.d.ts.map +1 -0
  159. package/dist/components/chart/use-chart.d.ts +34 -0
  160. package/dist/components/chart/use-chart.d.ts.map +1 -0
  161. package/dist/components/command-palette/command-palette.d.ts +73 -0
  162. package/dist/components/command-palette/command-palette.d.ts.map +1 -0
  163. package/dist/components/command-palette/index.d.ts +7 -0
  164. package/dist/components/command-palette/index.d.ts.map +1 -0
  165. package/dist/components/confirm-dialog/confirm-dialog.d.ts +89 -0
  166. package/dist/components/confirm-dialog/confirm-dialog.d.ts.map +1 -0
  167. package/dist/components/confirm-dialog/index.d.ts +7 -0
  168. package/dist/components/confirm-dialog/index.d.ts.map +1 -0
  169. package/dist/components/content-renderer/classes.d.ts +33 -0
  170. package/dist/components/content-renderer/classes.d.ts.map +1 -0
  171. package/dist/components/content-renderer/content-renderer.d.ts +37 -0
  172. package/dist/components/content-renderer/content-renderer.d.ts.map +1 -0
  173. package/dist/components/content-renderer/html-tags.d.ts +6 -0
  174. package/dist/components/content-renderer/html-tags.d.ts.map +1 -0
  175. package/dist/components/content-renderer/html-to-markdown.d.ts +7 -0
  176. package/dist/components/content-renderer/html-to-markdown.d.ts.map +1 -0
  177. package/dist/components/content-renderer/index.d.ts +7 -0
  178. package/dist/components/content-renderer/index.d.ts.map +1 -0
  179. package/dist/components/content-renderer/markdown.d.ts +23 -0
  180. package/dist/components/content-renderer/markdown.d.ts.map +1 -0
  181. package/dist/components/content-renderer/remark-spoiler.d.ts +9 -0
  182. package/dist/components/content-renderer/remark-spoiler.d.ts.map +1 -0
  183. package/dist/components/content-renderer/styles.d.ts +2 -0
  184. package/dist/components/content-renderer/styles.d.ts.map +1 -0
  185. package/dist/components/country-select/country-select.d.ts +101 -0
  186. package/dist/components/country-select/country-select.d.ts.map +1 -0
  187. package/dist/components/country-select/flag-icon.d.ts +36 -0
  188. package/dist/components/country-select/flag-icon.d.ts.map +1 -0
  189. package/dist/components/country-select/index.d.ts +5 -0
  190. package/dist/components/country-select/index.d.ts.map +1 -0
  191. package/dist/components/date-range-picker/date-range-input.d.ts +48 -0
  192. package/dist/components/date-range-picker/date-range-input.d.ts.map +1 -0
  193. package/dist/components/date-range-picker/date-range-picker.d.ts +39 -0
  194. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -0
  195. package/dist/components/date-range-picker/index.d.ts +7 -0
  196. package/dist/components/date-range-picker/index.d.ts.map +1 -0
  197. package/dist/components/date-range-picker/use-date-range-picker.d.ts +28 -0
  198. package/dist/components/date-range-picker/use-date-range-picker.d.ts.map +1 -0
  199. package/dist/components/deadline-chip/deadline-chip.d.ts +41 -0
  200. package/dist/components/deadline-chip/deadline-chip.d.ts.map +1 -0
  201. package/dist/components/deadline-chip/index.d.ts +7 -0
  202. package/dist/components/deadline-chip/index.d.ts.map +1 -0
  203. package/dist/components/doc-layout/doc-layout.d.ts +17 -0
  204. package/dist/components/doc-layout/doc-layout.d.ts.map +1 -0
  205. package/dist/components/doc-layout/doc-section-nav.d.ts +16 -0
  206. package/dist/components/doc-layout/doc-section-nav.d.ts.map +1 -0
  207. package/dist/components/doc-layout/doc-sidebar.d.ts +15 -0
  208. package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -0
  209. package/dist/components/doc-layout/index.d.ts +4 -0
  210. package/dist/components/doc-layout/index.d.ts.map +1 -0
  211. package/dist/components/drawer/drawer.d.ts +65 -0
  212. package/dist/components/drawer/drawer.d.ts.map +1 -0
  213. package/dist/components/drawer/index.d.ts +7 -0
  214. package/dist/components/drawer/index.d.ts.map +1 -0
  215. package/dist/components/duration-picker/duration-picker.d.ts +24 -0
  216. package/dist/components/duration-picker/duration-picker.d.ts.map +1 -0
  217. package/dist/components/duration-picker/index.d.ts +2 -0
  218. package/dist/components/duration-picker/index.d.ts.map +1 -0
  219. package/dist/components/editor/classes.d.ts +52 -0
  220. package/dist/components/editor/classes.d.ts.map +1 -0
  221. package/dist/components/editor/editor.d.ts +15 -0
  222. package/dist/components/editor/editor.d.ts.map +1 -0
  223. package/dist/components/editor/extensions/clear-format.d.ts +3 -0
  224. package/dist/components/editor/extensions/clear-format.d.ts.map +1 -0
  225. package/dist/components/editor/extensions/index.d.ts +3 -0
  226. package/dist/components/editor/extensions/index.d.ts.map +1 -0
  227. package/dist/components/editor/extensions/text-transform.d.ts +20 -0
  228. package/dist/components/editor/extensions/text-transform.d.ts.map +1 -0
  229. package/dist/components/editor/icons/index.d.ts +42 -0
  230. package/dist/components/editor/icons/index.d.ts.map +1 -0
  231. package/dist/components/editor/index.d.ts +41 -104
  232. package/dist/components/editor/index.d.ts.map +1 -0
  233. package/dist/components/editor/index.js +1 -2
  234. package/dist/components/editor/presets.d.ts +3 -0
  235. package/dist/components/editor/presets.d.ts.map +1 -0
  236. package/dist/components/editor/styles.d.ts +2 -0
  237. package/dist/components/editor/styles.d.ts.map +1 -0
  238. package/dist/components/editor/toolbar/bubble-toolbar.d.ts +9 -0
  239. package/dist/components/editor/toolbar/bubble-toolbar.d.ts.map +1 -0
  240. package/dist/components/editor/toolbar/code-highlight-block.d.ts +3 -0
  241. package/dist/components/editor/toolbar/code-highlight-block.d.ts.map +1 -0
  242. package/dist/components/editor/toolbar/heading-block.d.ts +11 -0
  243. package/dist/components/editor/toolbar/heading-block.d.ts.map +1 -0
  244. package/dist/components/editor/toolbar/image-block.d.ts +11 -0
  245. package/dist/components/editor/toolbar/image-block.d.ts.map +1 -0
  246. package/dist/components/editor/toolbar/link-block.d.ts +13 -0
  247. package/dist/components/editor/toolbar/link-block.d.ts.map +1 -0
  248. package/dist/components/editor/toolbar/toolbar-item.d.ts +3 -0
  249. package/dist/components/editor/toolbar/toolbar-item.d.ts.map +1 -0
  250. package/dist/components/editor/toolbar/toolbar.d.ts +3 -0
  251. package/dist/components/editor/toolbar/toolbar.d.ts.map +1 -0
  252. package/dist/components/editor/toolbar/use-toolbar-state.d.ts +24 -0
  253. package/dist/components/editor/toolbar/use-toolbar-state.d.ts.map +1 -0
  254. package/dist/components/editor/types.d.ts +130 -0
  255. package/dist/components/editor/types.d.ts.map +1 -0
  256. package/dist/components/emoji-picker/emoji-picker.d.ts +24 -0
  257. package/dist/components/emoji-picker/emoji-picker.d.ts.map +1 -0
  258. package/dist/components/emoji-picker/emoji-search.d.ts +22 -0
  259. package/dist/components/emoji-picker/emoji-search.d.ts.map +1 -0
  260. package/dist/components/emoji-picker/emoji.d.ts +19 -0
  261. package/dist/components/emoji-picker/emoji.d.ts.map +1 -0
  262. package/dist/components/emoji-picker/index.d.ts +14 -0
  263. package/dist/components/emoji-picker/index.d.ts.map +1 -0
  264. package/dist/components/emoji-picker/index.js +3 -0
  265. package/dist/components/emoji-picker/index.js.map +1 -0
  266. package/dist/components/emoji-picker/twemoji-url.d.ts +26 -0
  267. package/dist/components/emoji-picker/twemoji-url.d.ts.map +1 -0
  268. package/dist/components/emoji-picker/types.d.ts +96 -0
  269. package/dist/components/emoji-picker/types.d.ts.map +1 -0
  270. package/dist/components/emoji-picker/use-emoji-data.d.ts +26 -0
  271. package/dist/components/emoji-picker/use-emoji-data.d.ts.map +1 -0
  272. package/dist/components/emoji-picker/use-recent-emojis.d.ts +16 -0
  273. package/dist/components/emoji-picker/use-recent-emojis.d.ts.map +1 -0
  274. package/dist/components/empty-content/empty-content.d.ts +92 -0
  275. package/dist/components/empty-content/empty-content.d.ts.map +1 -0
  276. package/dist/components/empty-content/index.d.ts +7 -0
  277. package/dist/components/empty-content/index.d.ts.map +1 -0
  278. package/dist/components/error-boundary/error-boundary.d.ts +162 -0
  279. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -0
  280. package/dist/components/error-boundary/index.d.ts +7 -0
  281. package/dist/components/error-boundary/index.d.ts.map +1 -0
  282. package/dist/components/field/field-autocomplete.d.ts +74 -0
  283. package/dist/components/field/field-autocomplete.d.ts.map +1 -0
  284. package/dist/components/field/field-checkbox.d.ts +42 -0
  285. package/dist/components/field/field-checkbox.d.ts.map +1 -0
  286. package/dist/components/field/field-code.d.ts +80 -0
  287. package/dist/components/field/field-code.d.ts.map +1 -0
  288. package/dist/components/field/field-country-select.d.ts +84 -0
  289. package/dist/components/field/field-country-select.d.ts.map +1 -0
  290. package/dist/components/field/field-date-picker.d.ts +58 -0
  291. package/dist/components/field/field-date-picker.d.ts.map +1 -0
  292. package/dist/components/field/field-datetime-picker.d.ts +96 -0
  293. package/dist/components/field/field-datetime-picker.d.ts.map +1 -0
  294. package/dist/components/field/field-editor.d.ts +218 -0
  295. package/dist/components/field/field-editor.d.ts.map +1 -0
  296. package/dist/components/field/field-multi-checkbox.d.ts +91 -0
  297. package/dist/components/field/field-multi-checkbox.d.ts.map +1 -0
  298. package/dist/components/field/field-multi-select.d.ts +85 -0
  299. package/dist/components/field/field-multi-select.d.ts.map +1 -0
  300. package/dist/components/field/field-multi-switch.d.ts +93 -0
  301. package/dist/components/field/field-multi-switch.d.ts.map +1 -0
  302. package/dist/components/field/field-number.d.ts +50 -0
  303. package/dist/components/field/field-number.d.ts.map +1 -0
  304. package/dist/components/field/field-phone.d.ts +82 -0
  305. package/dist/components/field/field-phone.d.ts.map +1 -0
  306. package/dist/components/field/field-radio.d.ts +64 -0
  307. package/dist/components/field/field-radio.d.ts.map +1 -0
  308. package/dist/components/field/field-rating.d.ts +43 -0
  309. package/dist/components/field/field-rating.d.ts.map +1 -0
  310. package/dist/components/field/field-select.d.ts +50 -0
  311. package/dist/components/field/field-select.d.ts.map +1 -0
  312. package/dist/components/field/field-slider.d.ts +56 -0
  313. package/dist/components/field/field-slider.d.ts.map +1 -0
  314. package/dist/components/field/field-switch.d.ts +44 -0
  315. package/dist/components/field/field-switch.d.ts.map +1 -0
  316. package/dist/components/field/field-text.d.ts +38 -0
  317. package/dist/components/field/field-text.d.ts.map +1 -0
  318. package/dist/components/field/field-time-picker.d.ts +79 -0
  319. package/dist/components/field/field-time-picker.d.ts.map +1 -0
  320. package/dist/components/field/field-upload.d.ts +120 -0
  321. package/dist/components/field/field-upload.d.ts.map +1 -0
  322. package/dist/components/field/index.d.ts +149 -0
  323. package/dist/components/field/index.d.ts.map +1 -0
  324. package/dist/components/image/image.d.ts +79 -0
  325. package/dist/components/image/image.d.ts.map +1 -0
  326. package/dist/components/image/index.d.ts +7 -0
  327. package/dist/components/image/index.d.ts.map +1 -0
  328. package/dist/components/index.d.ts +60 -7072
  329. package/dist/components/index.d.ts.map +1 -0
  330. package/dist/components/index.js +11 -11
  331. package/dist/components/label/index.d.ts +7 -0
  332. package/dist/components/label/index.d.ts.map +1 -0
  333. package/dist/components/label/label.d.ts +71 -0
  334. package/dist/components/label/label.d.ts.map +1 -0
  335. package/dist/components/lightbox/classes.d.ts +34 -0
  336. package/dist/components/lightbox/classes.d.ts.map +1 -0
  337. package/dist/components/lightbox/index.d.ts +11 -0
  338. package/dist/components/lightbox/index.d.ts.map +1 -0
  339. package/dist/components/lightbox/lightbox.d.ts +42 -0
  340. package/dist/components/lightbox/lightbox.d.ts.map +1 -0
  341. package/dist/components/lightbox/types.d.ts +233 -0
  342. package/dist/components/lightbox/types.d.ts.map +1 -0
  343. package/dist/components/lightbox/use-lightbox.d.ts +42 -0
  344. package/dist/components/lightbox/use-lightbox.d.ts.map +1 -0
  345. package/dist/components/loading-screen/index.d.ts +8 -0
  346. package/dist/components/loading-screen/index.d.ts.map +1 -0
  347. package/dist/components/loading-screen/loading-screen.d.ts +37 -0
  348. package/dist/components/loading-screen/loading-screen.d.ts.map +1 -0
  349. package/dist/components/loading-screen/splash-screen.d.ts +80 -0
  350. package/dist/components/loading-screen/splash-screen.d.ts.map +1 -0
  351. package/dist/components/map/Map.d.ts +63 -0
  352. package/dist/components/map/Map.d.ts.map +1 -0
  353. package/dist/components/map/MapCoverageLayer.d.ts +25 -0
  354. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -0
  355. package/dist/components/map/MapMarker.d.ts +17 -0
  356. package/dist/components/map/MapMarker.d.ts.map +1 -0
  357. package/dist/components/map/MapPointPicker.d.ts +26 -0
  358. package/dist/components/map/MapPointPicker.d.ts.map +1 -0
  359. package/dist/components/map/index.d.ts +14 -0
  360. package/dist/components/map/index.d.ts.map +1 -0
  361. package/dist/components/mega-menu/index.d.ts +12 -0
  362. package/dist/components/mega-menu/index.d.ts.map +1 -0
  363. package/dist/components/mega-menu/mega-menu-horizontal.d.ts +41 -0
  364. package/dist/components/mega-menu/mega-menu-horizontal.d.ts.map +1 -0
  365. package/dist/components/mega-menu/mega-menu-mobile.d.ts +28 -0
  366. package/dist/components/mega-menu/mega-menu-mobile.d.ts.map +1 -0
  367. package/dist/components/mega-menu/mega-menu-vertical.d.ts +28 -0
  368. package/dist/components/mega-menu/mega-menu-vertical.d.ts.map +1 -0
  369. package/dist/components/mega-menu/styles.d.ts +18 -0
  370. package/dist/components/mega-menu/styles.d.ts.map +1 -0
  371. package/dist/components/mega-menu/types.d.ts +200 -0
  372. package/dist/components/mega-menu/types.d.ts.map +1 -0
  373. package/dist/components/menu/index.d.ts +7 -0
  374. package/dist/components/menu/index.d.ts.map +1 -0
  375. package/dist/components/menu/menu.d.ts +144 -0
  376. package/dist/components/menu/menu.d.ts.map +1 -0
  377. package/dist/components/nav-card/index.d.ts +8 -0
  378. package/dist/components/nav-card/index.d.ts.map +1 -0
  379. package/dist/components/nav-card/nav-card-grid.d.ts +57 -0
  380. package/dist/components/nav-card/nav-card-grid.d.ts.map +1 -0
  381. package/dist/components/nav-card/nav-card.d.ts +69 -0
  382. package/dist/components/nav-card/nav-card.d.ts.map +1 -0
  383. package/dist/components/nav-section/components.d.ts +143 -0
  384. package/dist/components/nav-section/components.d.ts.map +1 -0
  385. package/dist/components/nav-section/index.d.ts +15 -0
  386. package/dist/components/nav-section/index.d.ts.map +1 -0
  387. package/dist/components/nav-section/nav-context.d.ts +80 -0
  388. package/dist/components/nav-section/nav-context.d.ts.map +1 -0
  389. package/dist/components/nav-section/nav-item.d.ts +20 -0
  390. package/dist/components/nav-section/nav-item.d.ts.map +1 -0
  391. package/dist/components/nav-section/nav-list.d.ts +25 -0
  392. package/dist/components/nav-section/nav-list.d.ts.map +1 -0
  393. package/dist/components/nav-section/nav-section-horizontal.d.ts +29 -0
  394. package/dist/components/nav-section/nav-section-horizontal.d.ts.map +1 -0
  395. package/dist/components/nav-section/nav-section-mini.d.ts +30 -0
  396. package/dist/components/nav-section/nav-section-mini.d.ts.map +1 -0
  397. package/dist/components/nav-section/nav-section-vertical.d.ts +37 -0
  398. package/dist/components/nav-section/nav-section-vertical.d.ts.map +1 -0
  399. package/dist/components/nav-section/styles.d.ts +35 -0
  400. package/dist/components/nav-section/styles.d.ts.map +1 -0
  401. package/dist/components/nav-section/types.d.ts +178 -0
  402. package/dist/components/nav-section/types.d.ts.map +1 -0
  403. package/dist/components/navigation-progress/index.d.ts +7 -0
  404. package/dist/components/navigation-progress/index.d.ts.map +1 -0
  405. package/dist/components/navigation-progress/navigation-progress.d.ts +36 -0
  406. package/dist/components/navigation-progress/navigation-progress.d.ts.map +1 -0
  407. package/dist/components/page-content/index.d.ts +7 -0
  408. package/dist/components/page-content/index.d.ts.map +1 -0
  409. package/dist/components/page-content/page-content.d.ts +55 -0
  410. package/dist/components/page-content/page-content.d.ts.map +1 -0
  411. package/dist/components/popover/index.d.ts +7 -0
  412. package/dist/components/popover/index.d.ts.map +1 -0
  413. package/dist/{popover-Dmw7SJLR.d.ts → components/popover/popover.d.ts} +11 -14
  414. package/dist/components/popover/popover.d.ts.map +1 -0
  415. package/dist/components/progress/countdown-ring.d.ts +60 -0
  416. package/dist/components/progress/countdown-ring.d.ts.map +1 -0
  417. package/dist/components/progress/index.d.ts +8 -0
  418. package/dist/components/progress/index.d.ts.map +1 -0
  419. package/dist/components/progress/progress.d.ts +106 -0
  420. package/dist/components/progress/progress.d.ts.map +1 -0
  421. package/dist/components/rail/index.d.ts +7 -0
  422. package/dist/components/rail/index.d.ts.map +1 -0
  423. package/dist/components/rail/rail.d.ts +39 -0
  424. package/dist/components/rail/rail.d.ts.map +1 -0
  425. package/dist/components/scroll-spy/index.d.ts +3 -0
  426. package/dist/components/scroll-spy/index.d.ts.map +1 -0
  427. package/dist/components/scroll-spy/scroll-spy-provider.d.ts +26 -0
  428. package/dist/components/scroll-spy/scroll-spy-provider.d.ts.map +1 -0
  429. package/dist/components/scroll-spy/scroll-spy-section.d.ts +10 -0
  430. package/dist/components/scroll-spy/scroll-spy-section.d.ts.map +1 -0
  431. package/dist/components/scroll-to-top/index.d.ts +7 -0
  432. package/dist/components/scroll-to-top/index.d.ts.map +1 -0
  433. package/dist/components/scroll-to-top/scroll-to-top.d.ts +25 -0
  434. package/dist/components/scroll-to-top/scroll-to-top.d.ts.map +1 -0
  435. package/dist/components/scrollbar/index.d.ts +7 -0
  436. package/dist/components/scrollbar/index.d.ts.map +1 -0
  437. package/dist/components/scrollbar/scrollbar.d.ts +59 -0
  438. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -0
  439. package/dist/components/search-input/index.d.ts +2 -0
  440. package/dist/components/search-input/index.d.ts.map +1 -0
  441. package/dist/components/search-input/search-input.d.ts +46 -0
  442. package/dist/components/search-input/search-input.d.ts.map +1 -0
  443. package/dist/components/settings/index.d.ts +10 -0
  444. package/dist/components/settings/index.d.ts.map +1 -0
  445. package/dist/components/settings/settings-drawer.d.ts +39 -0
  446. package/dist/components/settings/settings-drawer.d.ts.map +1 -0
  447. package/dist/components/settings/settings-provider.d.ts +106 -0
  448. package/dist/components/settings/settings-provider.d.ts.map +1 -0
  449. package/dist/components/skeleton/index.d.ts +7 -0
  450. package/dist/components/skeleton/index.d.ts.map +1 -0
  451. package/dist/components/skeleton/skeleton.d.ts +77 -0
  452. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  453. package/dist/components/snackbar/index.d.ts +7 -0
  454. package/dist/components/snackbar/index.d.ts.map +1 -0
  455. package/dist/components/snackbar/snackbar.d.ts +120 -0
  456. package/dist/components/snackbar/snackbar.d.ts.map +1 -0
  457. package/dist/components/sponsored-slot/index.d.ts +3 -0
  458. package/dist/components/sponsored-slot/index.d.ts.map +1 -0
  459. package/dist/components/sponsored-slot/sponsored-slot.d.ts +16 -0
  460. package/dist/components/sponsored-slot/sponsored-slot.d.ts.map +1 -0
  461. package/dist/components/sponsored-slot/types.d.ts +45 -0
  462. package/dist/components/sponsored-slot/types.d.ts.map +1 -0
  463. package/dist/components/stepper/index.d.ts +7 -0
  464. package/dist/components/stepper/index.d.ts.map +1 -0
  465. package/dist/components/stepper/stepper.d.ts +145 -0
  466. package/dist/components/stepper/stepper.d.ts.map +1 -0
  467. package/dist/components/svg-color/index.d.ts +7 -0
  468. package/dist/components/svg-color/index.d.ts.map +1 -0
  469. package/dist/components/svg-color/svg-color.d.ts +80 -0
  470. package/dist/components/svg-color/svg-color.d.ts.map +1 -0
  471. package/dist/components/table/index.d.ts +7 -0
  472. package/dist/components/table/index.d.ts.map +1 -0
  473. package/dist/components/table/table.d.ts +184 -0
  474. package/dist/components/table/table.d.ts.map +1 -0
  475. package/dist/components/tabs/index.d.ts +7 -0
  476. package/dist/components/tabs/index.d.ts.map +1 -0
  477. package/dist/components/tabs/tabs.d.ts +146 -0
  478. package/dist/components/tabs/tabs.d.ts.map +1 -0
  479. package/dist/components/tag-cloud/index.d.ts +7 -0
  480. package/dist/components/tag-cloud/index.d.ts.map +1 -0
  481. package/dist/components/tag-cloud/tag-cloud.d.ts +58 -0
  482. package/dist/components/tag-cloud/tag-cloud.d.ts.map +1 -0
  483. package/dist/components/tiptap-renderer/index.d.ts +2 -0
  484. package/dist/components/tiptap-renderer/index.d.ts.map +1 -0
  485. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +45 -0
  486. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -0
  487. package/dist/components/tooltip/index.d.ts +7 -0
  488. package/dist/components/tooltip/index.d.ts.map +1 -0
  489. package/dist/components/tooltip/tooltip.d.ts +38 -0
  490. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  491. package/dist/components/virtual-list/index.d.ts +7 -0
  492. package/dist/components/virtual-list/index.d.ts.map +1 -0
  493. package/dist/components/virtual-list/virtual-list.d.ts +64 -0
  494. package/dist/components/virtual-list/virtual-list.d.ts.map +1 -0
  495. package/dist/core/accessibility/index.d.ts +96 -0
  496. package/dist/core/accessibility/index.d.ts.map +1 -0
  497. package/dist/core/accessibility/skip-link.d.ts +31 -0
  498. package/dist/core/accessibility/skip-link.d.ts.map +1 -0
  499. package/dist/core/context.d.ts +99 -0
  500. package/dist/core/context.d.ts.map +1 -0
  501. package/dist/core/hooks/use-boolean.d.ts +54 -0
  502. package/dist/core/hooks/use-boolean.d.ts.map +1 -0
  503. package/dist/core/hooks/use-breakpoints.d.ts +87 -0
  504. package/dist/core/hooks/use-breakpoints.d.ts.map +1 -0
  505. package/dist/core/hooks/use-click-outside.d.ts +26 -0
  506. package/dist/core/hooks/use-click-outside.d.ts.map +1 -0
  507. package/dist/core/hooks/use-copy-to-clipboard.d.ts +66 -0
  508. package/dist/core/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  509. package/dist/core/hooks/use-countdown.d.ts +105 -0
  510. package/dist/core/hooks/use-countdown.d.ts.map +1 -0
  511. package/dist/core/hooks/use-debounce.d.ts +64 -0
  512. package/dist/core/hooks/use-debounce.d.ts.map +1 -0
  513. package/dist/core/hooks/use-event-listener.d.ts +37 -0
  514. package/dist/core/hooks/use-event-listener.d.ts.map +1 -0
  515. package/dist/core/hooks/use-interval.d.ts +30 -0
  516. package/dist/core/hooks/use-interval.d.ts.map +1 -0
  517. package/dist/core/hooks/use-is-client.d.ts +24 -0
  518. package/dist/core/hooks/use-is-client.d.ts.map +1 -0
  519. package/dist/core/hooks/use-local-storage.d.ts +61 -0
  520. package/dist/core/hooks/use-local-storage.d.ts.map +1 -0
  521. package/dist/core/hooks/use-media-query.d.ts +107 -0
  522. package/dist/core/hooks/use-media-query.d.ts.map +1 -0
  523. package/dist/core/hooks/use-mounted.d.ts +33 -0
  524. package/dist/core/hooks/use-mounted.d.ts.map +1 -0
  525. package/dist/core/hooks/use-multi-select.d.ts +113 -0
  526. package/dist/core/hooks/use-multi-select.d.ts.map +1 -0
  527. package/dist/core/hooks/use-previous.d.ts +23 -0
  528. package/dist/core/hooks/use-previous.d.ts.map +1 -0
  529. package/dist/core/hooks/use-set-state.d.ts +56 -0
  530. package/dist/core/hooks/use-set-state.d.ts.map +1 -0
  531. package/dist/core/hooks/use-tabs.d.ts +74 -0
  532. package/dist/core/hooks/use-tabs.d.ts.map +1 -0
  533. package/dist/core/hooks/use-timeout.d.ts +37 -0
  534. package/dist/core/hooks/use-timeout.d.ts.map +1 -0
  535. package/dist/core/index.d.ts +36 -468
  536. package/dist/core/index.d.ts.map +1 -0
  537. package/dist/core/index.js +6 -7
  538. package/dist/core/provider-stack.d.ts +181 -0
  539. package/dist/core/provider-stack.d.ts.map +1 -0
  540. package/dist/core/provider.d.ts +67 -0
  541. package/dist/core/provider.d.ts.map +1 -0
  542. package/dist/forms/index.d.ts +6 -557
  543. package/dist/forms/index.d.ts.map +1 -0
  544. package/dist/forms/index.js +0 -1
  545. package/dist/forms/index.js.map +1 -1
  546. package/dist/forms/schema-provider.d.ts +282 -0
  547. package/dist/forms/schema-provider.d.ts.map +1 -0
  548. package/dist/forms/schema-utils.d.ts +286 -0
  549. package/dist/forms/schema-utils.d.ts.map +1 -0
  550. package/dist/hooks/index.d.ts +38 -8
  551. package/dist/hooks/index.d.ts.map +1 -0
  552. package/dist/hooks/index.js +8 -9
  553. package/dist/hooks/use-array.d.ts +126 -0
  554. package/dist/hooks/use-array.d.ts.map +1 -0
  555. package/dist/hooks/use-async.d.ts +88 -0
  556. package/dist/hooks/use-async.d.ts.map +1 -0
  557. package/dist/hooks/use-back-to-top.d.ts +57 -0
  558. package/dist/hooks/use-back-to-top.d.ts.map +1 -0
  559. package/dist/hooks/use-client-rect.d.ts +67 -0
  560. package/dist/hooks/use-client-rect.d.ts.map +1 -0
  561. package/dist/hooks/use-config-from-query.d.ts +98 -0
  562. package/dist/hooks/use-config-from-query.d.ts.map +1 -0
  563. package/dist/hooks/use-cookies.d.ts +62 -0
  564. package/dist/hooks/use-cookies.d.ts.map +1 -0
  565. package/dist/hooks/use-countdown-date.d.ts +47 -0
  566. package/dist/hooks/use-countdown-date.d.ts.map +1 -0
  567. package/dist/hooks/use-countdown-seconds.d.ts +83 -0
  568. package/dist/hooks/use-countdown-seconds.d.ts.map +1 -0
  569. package/dist/hooks/use-double-click.d.ts +67 -0
  570. package/dist/hooks/use-double-click.d.ts.map +1 -0
  571. package/dist/hooks/use-focus-trap.d.ts +66 -0
  572. package/dist/hooks/use-focus-trap.d.ts.map +1 -0
  573. package/dist/hooks/use-image-dimensions.d.ts +124 -0
  574. package/dist/hooks/use-image-dimensions.d.ts.map +1 -0
  575. package/dist/hooks/use-infinite-scroll.d.ts +204 -0
  576. package/dist/hooks/use-infinite-scroll.d.ts.map +1 -0
  577. package/dist/hooks/use-intersection-observer.d.ts +93 -0
  578. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  579. package/dist/hooks/use-isomorphic-layout-effect.d.ts +34 -0
  580. package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  581. package/dist/hooks/use-keyboard-shortcut.d.ts +112 -0
  582. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -0
  583. package/dist/hooks/use-lazy-query.d.ts +132 -0
  584. package/dist/hooks/use-lazy-query.d.ts.map +1 -0
  585. package/dist/hooks/use-mutation.d.ts +141 -0
  586. package/dist/hooks/use-mutation.d.ts.map +1 -0
  587. package/dist/hooks/use-online-status.d.ts +56 -0
  588. package/dist/hooks/use-online-status.d.ts.map +1 -0
  589. package/dist/hooks/use-password-visibility.d.ts +83 -0
  590. package/dist/hooks/use-password-visibility.d.ts.map +1 -0
  591. package/dist/hooks/use-popover-hover.d.ts +78 -0
  592. package/dist/hooks/use-popover-hover.d.ts.map +1 -0
  593. package/dist/hooks/use-scroll-offset-top.d.ts +69 -0
  594. package/dist/hooks/use-scroll-offset-top.d.ts.map +1 -0
  595. package/dist/hooks/use-scroll-position.d.ts +96 -0
  596. package/dist/hooks/use-scroll-position.d.ts.map +1 -0
  597. package/dist/hooks/use-session-storage.d.ts +66 -0
  598. package/dist/hooks/use-session-storage.d.ts.map +1 -0
  599. package/dist/hooks/use-throttle.d.ts +67 -0
  600. package/dist/hooks/use-throttle.d.ts.map +1 -0
  601. package/dist/hooks/use-update-effect.d.ts +53 -0
  602. package/dist/hooks/use-update-effect.d.ts.map +1 -0
  603. package/dist/hooks/use-window-size.d.ts +132 -0
  604. package/dist/hooks/use-window-size.d.ts.map +1 -0
  605. package/dist/http/client.d.ts +74 -0
  606. package/dist/http/client.d.ts.map +1 -0
  607. package/dist/http/index.d.ts +6 -229
  608. package/dist/http/index.d.ts.map +1 -0
  609. package/dist/http/index.js +0 -2
  610. package/dist/http/index.js.map +1 -1
  611. package/dist/http/types.d.ts +158 -0
  612. package/dist/http/types.d.ts.map +1 -0
  613. package/dist/index.d.ts +19 -2758
  614. package/dist/index.d.ts.map +1 -0
  615. package/dist/index.js +35 -63
  616. package/dist/index.js.map +1 -1
  617. package/dist/layouts/auth/centered.d.ts +49 -0
  618. package/dist/layouts/auth/centered.d.ts.map +1 -0
  619. package/dist/layouts/auth/index.d.ts +12 -0
  620. package/dist/layouts/auth/index.d.ts.map +1 -0
  621. package/dist/layouts/auth/simple.d.ts +58 -0
  622. package/dist/layouts/auth/simple.d.ts.map +1 -0
  623. package/dist/layouts/auth/split.d.ts +81 -0
  624. package/dist/layouts/auth/split.d.ts.map +1 -0
  625. package/dist/layouts/core/context.d.ts +102 -0
  626. package/dist/layouts/core/context.d.ts.map +1 -0
  627. package/dist/layouts/core/css-vars.d.ts +43 -0
  628. package/dist/layouts/core/css-vars.d.ts.map +1 -0
  629. package/dist/layouts/core/header-section.d.ts +79 -0
  630. package/dist/layouts/core/header-section.d.ts.map +1 -0
  631. package/dist/layouts/core/index.d.ts +18 -0
  632. package/dist/layouts/core/index.d.ts.map +1 -0
  633. package/dist/layouts/core/layout-section.d.ts +64 -0
  634. package/dist/layouts/core/layout-section.d.ts.map +1 -0
  635. package/dist/layouts/core/user-menu.d.ts +88 -0
  636. package/dist/layouts/core/user-menu.d.ts.map +1 -0
  637. package/dist/layouts/dashboard/index.d.ts +10 -0
  638. package/dist/layouts/dashboard/index.d.ts.map +1 -0
  639. package/dist/layouts/dashboard/layout.d.ts +90 -0
  640. package/dist/layouts/dashboard/layout.d.ts.map +1 -0
  641. package/dist/layouts/dashboard/sidenav.d.ts +58 -0
  642. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -0
  643. package/dist/layouts/dashboard/topnav.d.ts +41 -0
  644. package/dist/layouts/dashboard/topnav.d.ts.map +1 -0
  645. package/dist/layouts/index.d.ts +27 -850
  646. package/dist/layouts/index.d.ts.map +1 -0
  647. package/dist/layouts/index.js +3 -4
  648. package/dist/layouts/types.d.ts +317 -0
  649. package/dist/layouts/types.d.ts.map +1 -0
  650. package/dist/netron/context.d.ts +18 -0
  651. package/dist/netron/context.d.ts.map +1 -0
  652. package/dist/netron/hooks.d.ts +10 -0
  653. package/dist/netron/hooks.d.ts.map +1 -0
  654. package/dist/netron/index.d.ts +47 -4
  655. package/dist/netron/index.d.ts.map +1 -0
  656. package/dist/netron/index.js +1 -2
  657. package/dist/netron/types.d.ts +12 -0
  658. package/dist/netron/types.d.ts.map +1 -0
  659. package/dist/registry/index.d.ts +8 -341
  660. package/dist/registry/index.d.ts.map +1 -0
  661. package/dist/registry/index.js +1 -2
  662. package/dist/registry/installer.d.ts +137 -0
  663. package/dist/registry/installer.d.ts.map +1 -0
  664. package/dist/registry/manager.d.ts +196 -0
  665. package/dist/registry/manager.d.ts.map +1 -0
  666. package/dist/state/create-store.d.ts +164 -0
  667. package/dist/state/create-store.d.ts.map +1 -0
  668. package/dist/state/index.d.ts +12 -969
  669. package/dist/state/index.d.ts.map +1 -0
  670. package/dist/state/index.js +2 -3
  671. package/dist/state/settings-version.d.ts +255 -0
  672. package/dist/state/settings-version.d.ts.map +1 -0
  673. package/dist/state/stores/auth.d.ts +155 -0
  674. package/dist/state/stores/auth.d.ts.map +1 -0
  675. package/dist/state/stores/index.d.ts +10 -0
  676. package/dist/state/stores/index.d.ts.map +1 -0
  677. package/dist/state/stores/settings.d.ts +151 -0
  678. package/dist/state/stores/settings.d.ts.map +1 -0
  679. package/dist/state/stores/theme.d.ts +87 -0
  680. package/dist/state/stores/theme.d.ts.map +1 -0
  681. package/dist/state/stores/ui.d.ts +204 -0
  682. package/dist/state/stores/ui.d.ts.map +1 -0
  683. package/dist/theme/colors/base.d.ts +61 -0
  684. package/dist/theme/colors/base.d.ts.map +1 -0
  685. package/dist/theme/colors/index.d.ts +10 -0
  686. package/dist/theme/colors/index.d.ts.map +1 -0
  687. package/dist/theme/colors/luxury.d.ts +49 -0
  688. package/dist/theme/colors/luxury.d.ts.map +1 -0
  689. package/dist/theme/components/Autocomplete.d.ts +9 -0
  690. package/dist/theme/components/Autocomplete.d.ts.map +1 -0
  691. package/dist/theme/components/Button.d.ts +33 -0
  692. package/dist/theme/components/Button.d.ts.map +1 -0
  693. package/dist/theme/components/Card.d.ts +20 -0
  694. package/dist/theme/components/Card.d.ts.map +1 -0
  695. package/dist/theme/components/Chip.d.ts +29 -0
  696. package/dist/theme/components/Chip.d.ts.map +1 -0
  697. package/dist/theme/components/DataGrid.d.ts +15 -0
  698. package/dist/theme/components/DataGrid.d.ts.map +1 -0
  699. package/dist/theme/components/DatePicker.d.ts +19 -0
  700. package/dist/theme/components/DatePicker.d.ts.map +1 -0
  701. package/dist/theme/components/Dialog.d.ts +23 -0
  702. package/dist/theme/components/Dialog.d.ts.map +1 -0
  703. package/dist/theme/components/FormControls.d.ts +53 -0
  704. package/dist/theme/components/FormControls.d.ts.map +1 -0
  705. package/dist/theme/components/Tabs.d.ts +21 -0
  706. package/dist/theme/components/Tabs.d.ts.map +1 -0
  707. package/dist/theme/components/TextField.d.ts +87 -0
  708. package/dist/theme/components/TextField.d.ts.map +1 -0
  709. package/dist/theme/components/index.d.ts +27 -0
  710. package/dist/theme/components/index.d.ts.map +1 -0
  711. package/dist/theme/components/theme-utils.d.ts +42 -0
  712. package/dist/theme/components/theme-utils.d.ts.map +1 -0
  713. package/dist/theme/create-theme.d.ts +131 -0
  714. package/dist/theme/create-theme.d.ts.map +1 -0
  715. package/dist/theme/css-variables.d.ts +42 -0
  716. package/dist/theme/css-variables.d.ts.map +1 -0
  717. package/dist/theme/custom-shadows.d.ts +58 -0
  718. package/dist/theme/custom-shadows.d.ts.map +1 -0
  719. package/dist/theme/index.d.ts +23 -1045
  720. package/dist/theme/index.d.ts.map +1 -0
  721. package/dist/theme/index.js +2 -3
  722. package/dist/theme/mixins.d.ts +332 -0
  723. package/dist/theme/mixins.d.ts.map +1 -0
  724. package/dist/theme/opacity.d.ts +51 -0
  725. package/dist/theme/opacity.d.ts.map +1 -0
  726. package/dist/theme/palette/builder.d.ts +138 -0
  727. package/dist/theme/palette/builder.d.ts.map +1 -0
  728. package/dist/theme/palette/index.d.ts +7 -0
  729. package/dist/theme/palette/index.d.ts.map +1 -0
  730. package/dist/theme/palette.d.ts +43 -0
  731. package/dist/theme/palette.d.ts.map +1 -0
  732. package/dist/theme/presets/arctic.d.ts +13 -0
  733. package/dist/theme/presets/arctic.d.ts.map +1 -0
  734. package/dist/theme/presets/default.d.ts +13 -0
  735. package/dist/theme/presets/default.d.ts.map +1 -0
  736. package/dist/theme/presets/dracula.d.ts +27 -0
  737. package/dist/theme/presets/dracula.d.ts.map +1 -0
  738. package/dist/theme/presets/ember.d.ts +23 -0
  739. package/dist/theme/presets/ember.d.ts.map +1 -0
  740. package/dist/theme/presets/index.d.ts +39 -0
  741. package/dist/theme/presets/index.d.ts.map +1 -0
  742. package/dist/theme/presets/luxury.d.ts +13 -0
  743. package/dist/theme/presets/luxury.d.ts.map +1 -0
  744. package/dist/theme/presets/midnight.d.ts +23 -0
  745. package/dist/theme/presets/midnight.d.ts.map +1 -0
  746. package/dist/theme/presets/minimal.d.ts +23 -0
  747. package/dist/theme/presets/minimal.d.ts.map +1 -0
  748. package/dist/theme/presets/nature.d.ts +14 -0
  749. package/dist/theme/presets/nature.d.ts.map +1 -0
  750. package/dist/theme/presets/retro.d.ts +23 -0
  751. package/dist/theme/presets/retro.d.ts.map +1 -0
  752. package/dist/theme/shadows.d.ts +61 -0
  753. package/dist/theme/shadows.d.ts.map +1 -0
  754. package/dist/theme/typography.d.ts +24 -0
  755. package/dist/theme/typography.d.ts.map +1 -0
  756. package/dist/theme/utils/color.d.ts +295 -0
  757. package/dist/theme/utils/color.d.ts.map +1 -0
  758. package/dist/theme/utils/index.d.ts +7 -0
  759. package/dist/theme/utils/index.d.ts.map +1 -0
  760. package/dist/{registry-DQcIzW2s.d.ts → types/blocks.d.ts} +30 -191
  761. package/dist/types/blocks.d.ts.map +1 -0
  762. package/dist/{components-BCGZ-Rwt.d.ts → types/components.d.ts} +17 -20
  763. package/dist/types/components.d.ts.map +1 -0
  764. package/dist/{config-Pct0n_Kq.d.ts → types/config.d.ts} +14 -16
  765. package/dist/types/config.d.ts.map +1 -0
  766. package/dist/types/index.d.ts +13 -7
  767. package/dist/types/index.d.ts.map +1 -0
  768. package/dist/types/index.js +1 -2
  769. package/dist/types/registry.d.ts +158 -0
  770. package/dist/types/registry.d.ts.map +1 -0
  771. package/dist/{theme-B4Q3Bg5o.d.ts → types/theme.d.ts} +31 -34
  772. package/dist/types/theme.d.ts.map +1 -0
  773. package/dist/utils/async-lock.d.ts +169 -0
  774. package/dist/utils/async-lock.d.ts.map +1 -0
  775. package/dist/utils/cn.d.ts +80 -0
  776. package/dist/utils/cn.d.ts.map +1 -0
  777. package/dist/utils/cookies.d.ts +68 -0
  778. package/dist/utils/cookies.d.ts.map +1 -0
  779. package/dist/utils/create-classes.d.ts +90 -0
  780. package/dist/utils/create-classes.d.ts.map +1 -0
  781. package/dist/utils/errors.d.ts +201 -0
  782. package/dist/utils/errors.d.ts.map +1 -0
  783. package/dist/utils/fetch-interceptor.d.ts +230 -0
  784. package/dist/utils/fetch-interceptor.d.ts.map +1 -0
  785. package/dist/utils/font.d.ts +65 -0
  786. package/dist/utils/font.d.ts.map +1 -0
  787. package/dist/utils/format-crypto.d.ts +312 -0
  788. package/dist/utils/format-crypto.d.ts.map +1 -0
  789. package/dist/utils/format-date.d.ts +240 -0
  790. package/dist/utils/format-date.d.ts.map +1 -0
  791. package/dist/utils/format-number.d.ts +245 -0
  792. package/dist/utils/format-number.d.ts.map +1 -0
  793. package/dist/utils/i18n-text.d.ts +68 -0
  794. package/dist/utils/i18n-text.d.ts.map +1 -0
  795. package/dist/utils/index.d.ts +30 -0
  796. package/dist/utils/index.d.ts.map +1 -0
  797. package/dist/utils/jwt.d.ts +227 -0
  798. package/dist/utils/jwt.d.ts.map +1 -0
  799. package/dist/utils/object.d.ts +96 -0
  800. package/dist/utils/object.d.ts.map +1 -0
  801. package/dist/utils/refs.d.ts +60 -0
  802. package/dist/utils/refs.d.ts.map +1 -0
  803. package/dist/utils/rtl.d.ts +75 -0
  804. package/dist/utils/rtl.d.ts.map +1 -0
  805. package/dist/utils/storage.d.ts +190 -0
  806. package/dist/utils/storage.d.ts.map +1 -0
  807. package/dist/utils/string.d.ts +216 -0
  808. package/dist/utils/string.d.ts.map +1 -0
  809. package/dist/utils/template-resolver.d.ts +12 -0
  810. package/dist/utils/template-resolver.d.ts.map +1 -0
  811. package/dist/utils/toast.d.ts +25 -0
  812. package/dist/utils/toast.d.ts.map +1 -0
  813. package/dist/utils/transform-number.d.ts +108 -0
  814. package/dist/utils/transform-number.d.ts.map +1 -0
  815. package/dist/utils/url.d.ts +198 -0
  816. package/dist/utils/url.d.ts.map +1 -0
  817. package/package.json +69 -59
  818. package/dist/chunk-2FYNRDXR.js.map +0 -1
  819. package/dist/chunk-77KIJLPP.js +0 -37
  820. package/dist/chunk-77KIJLPP.js.map +0 -1
  821. package/dist/chunk-A2Z7NVGL.js.map +0 -1
  822. package/dist/chunk-BV32OJ2A.js.map +0 -1
  823. package/dist/chunk-DDY7TLUI.js.map +0 -1
  824. package/dist/chunk-HO2GKTWJ.js.map +0 -1
  825. package/dist/chunk-IZOIO7PA.js.map +0 -1
  826. package/dist/chunk-JDTC2SBY.js.map +0 -1
  827. package/dist/chunk-KTCWPGON.js.map +0 -1
  828. package/dist/chunk-MEFT6XPH.js.map +0 -1
  829. package/dist/chunk-SNKGGHBT.js.map +0 -1
  830. package/dist/chunk-VAAIHNWQ.js.map +0 -1
  831. package/dist/chunk-XQXGE2PW.js +0 -16793
  832. package/dist/chunk-XQXGE2PW.js.map +0 -1
  833. package/dist/chunk-XWL6J6IO.js.map +0 -1
  834. package/dist/chunk-XXP3ZGU6.js.map +0 -1
  835. package/dist/chunk-YJMAQL3S.js.map +0 -1
  836. package/dist/index-nmJ8Muwg.d.ts +0 -2368
  837. package/dist/settings-CAC0qFjS.d.ts +0 -455
  838. package/dist/text-transform-D6MzzF7V.d.ts +0 -165
  839. package/dist/use-timeout-D7U3EAtH.d.ts +0 -808
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/constants.ts","../../src/cli/config.ts","../../src/registry/manager.ts","../../src/registry/installer.ts","../../src/registry/index.ts","../../src/cli/commands/add.ts","../../src/cli/index.ts","../../src/cli/commands/init.ts","../../src/cli/commands/list.ts","../../src/cli/commands/diff.ts","../../src/cli/commands/update.ts","../../src/cli/commands/remove.ts","../../src/cli/commands/doctor.ts"],"names":["require","fs","registry","path","fs3","path3","resolve","Command","path4","fs4","fs5","path5","findInstalledItems","path6","generateFileContent","fs7","path7","updateLockfile","path8","fs8","pkg"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Prism CLI Constants\n *\n * @module @omnitron-dev/prism/cli/constants\n */\n\nimport { createRequire } from 'node:module';\nconst require = createRequire(import.meta.url);\nconst pkg = require('../../package.json') as { version: string };\n\n/** Current Prism version */\nexport const PRISM_VERSION = pkg.version;\n\n/** Default configuration file name */\nexport const CONFIG_FILE_NAME = 'prism.config.json';\n\n/** Default component output directory */\nexport const DEFAULT_COMPONENTS_DIR = 'src/components/ui';\n\n/** Default blocks output directory */\nexport const DEFAULT_BLOCKS_DIR = 'src/blocks';\n\n/** Default hooks output directory */\nexport const DEFAULT_HOOKS_DIR = 'src/hooks';\n\n/** Default utils output directory */\nexport const DEFAULT_UTILS_DIR = 'src/utils';\n\n/** Default registry URL */\nexport const DEFAULT_REGISTRY_URL = 'https://registry.prism.omnitron.dev';\n\n/** Default configuration */\nexport const DEFAULT_CONFIG = {\n $schema: 'https://prism.omnitron.dev/schema.json',\n style: 'default' as const,\n tailwind: {\n config: 'tailwind.config.js',\n css: 'src/index.css',\n baseColor: 'slate',\n cssVariables: true,\n },\n aliases: {\n components: '@/components/ui',\n blocks: '@/blocks',\n hooks: '@/hooks',\n utils: '@/utils',\n },\n registries: [DEFAULT_REGISTRY_URL],\n};\n\n/** Detect if colors should be suppressed */\nconst supportsColor = !process.env.NO_COLOR && process.stderr.isTTY !== false;\n\n/** CLI colors - disabled when NO_COLOR is set or output is not a TTY */\nexport const COLORS = supportsColor\n ? {\n primary: '\\x1b[36m',\n success: '\\x1b[32m',\n warning: '\\x1b[33m',\n error: '\\x1b[31m',\n muted: '\\x1b[90m',\n bold: '\\x1b[1m',\n reset: '\\x1b[0m',\n }\n : {\n primary: '',\n success: '',\n warning: '',\n error: '',\n muted: '',\n bold: '',\n reset: '',\n };\n\n/** Log utilities */\nexport const log = {\n info: (msg: string) => console.log(`${COLORS.primary}ℹ${COLORS.reset} ${msg}`),\n success: (msg: string) => console.log(`${COLORS.success}✓${COLORS.reset} ${msg}`),\n warning: (msg: string) => console.log(`${COLORS.warning}⚠${COLORS.reset} ${msg}`),\n error: (msg: string) => console.error(`${COLORS.error}✖${COLORS.reset} ${msg}`),\n muted: (msg: string) => console.log(`${COLORS.muted}${msg}${COLORS.reset}`),\n};\n\n/** Component categories */\nexport const COMPONENT_CATEGORIES = [\n 'inputs',\n 'data-display',\n 'feedback',\n 'surfaces',\n 'navigation',\n 'layout',\n 'data',\n] as const;\n\n/** Block categories */\nexport const BLOCK_CATEGORIES = ['layouts', 'auth', 'settings', 'data', 'dashboard', 'marketing'] as const;\n","/**\n * Prism CLI Configuration\n *\n * Handles loading, validating, and saving Prism configuration.\n *\n * @module @omnitron-dev/prism/cli/config\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { CONFIG_FILE_NAME, DEFAULT_CONFIG, log } from './constants.js';\n\n/**\n * Prism configuration schema.\n */\nexport interface PrismConfigSchema {\n $schema?: string;\n style: 'default' | 'new-york';\n tailwind?: {\n config: string;\n css: string;\n baseColor: string;\n cssVariables: boolean;\n };\n aliases: {\n components: string;\n blocks: string;\n hooks: string;\n utils: string;\n };\n registries: string[];\n}\n\n/**\n * Runtime Prism configuration with resolved paths.\n */\nexport interface PrismConfig extends PrismConfigSchema {\n /** Resolved root directory */\n rootDir: string;\n /** Resolved config file path */\n configPath: string;\n}\n\n/**\n * Find the prism.config.json file by walking up the directory tree.\n */\nexport function findConfigFile(startDir: string = process.cwd()): string | null {\n let currentDir = path.resolve(startDir);\n const root = path.parse(currentDir).root;\n\n while (currentDir !== root) {\n const configPath = path.join(currentDir, CONFIG_FILE_NAME);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n currentDir = path.dirname(currentDir);\n }\n\n return null;\n}\n\n/**\n * Load Prism configuration from file.\n */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<PrismConfig | null> {\n const configPath = findConfigFile(cwd);\n\n if (!configPath) {\n return null;\n }\n\n try {\n const content = await fs.promises.readFile(configPath, 'utf-8');\n const config = JSON.parse(content) as PrismConfigSchema;\n\n return {\n ...DEFAULT_CONFIG,\n ...config,\n rootDir: path.dirname(configPath),\n configPath,\n };\n } catch (error) {\n log.error(`Failed to load config: ${(error as Error).message}`);\n return null;\n }\n}\n\n/**\n * Save Prism configuration to file.\n */\nexport async function saveConfig(\n config: PrismConfigSchema,\n outputPath: string = path.join(process.cwd(), CONFIG_FILE_NAME)\n): Promise<void> {\n const content = JSON.stringify(config, null, 2);\n await fs.promises.writeFile(outputPath, content, 'utf-8');\n}\n\n/**\n * Validate Prism configuration.\n */\nexport function validateConfig(config: unknown): config is PrismConfigSchema {\n if (!config || typeof config !== 'object') {\n return false;\n }\n\n const c = config as Record<string, unknown>;\n\n // Required fields\n if (typeof c.style !== 'string' || !['default', 'new-york'].includes(c.style)) {\n return false;\n }\n\n if (!c.aliases || typeof c.aliases !== 'object') {\n return false;\n }\n\n const aliases = c.aliases as Record<string, unknown>;\n if (\n typeof aliases.components !== 'string' ||\n typeof aliases.blocks !== 'string' ||\n typeof aliases.hooks !== 'string' ||\n typeof aliases.utils !== 'string'\n ) {\n return false;\n }\n\n if (!Array.isArray(c.registries) || c.registries.length === 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Resolve an alias to an actual file path.\n */\nexport function resolveAlias(alias: string, config: PrismConfig): string {\n // Handle @ alias\n if (alias.startsWith('@/')) {\n return path.join(config.rootDir, 'src', alias.slice(2));\n }\n\n // Handle ~ alias (common in some setups)\n if (alias.startsWith('~/')) {\n return path.join(config.rootDir, alias.slice(2));\n }\n\n // Handle relative paths\n if (alias.startsWith('./') || alias.startsWith('../')) {\n return path.join(config.rootDir, alias);\n }\n\n // Assume it's relative to rootDir\n return path.join(config.rootDir, alias);\n}\n\n/**\n * Get the output path for a component.\n */\nexport function getComponentPath(componentName: string, config: PrismConfig): string {\n const componentsDir = resolveAlias(config.aliases.components, config);\n return path.join(componentsDir, componentName);\n}\n\n/**\n * Get the output path for a block.\n */\nexport function getBlockPath(blockName: string, config: PrismConfig): string {\n const blocksDir = resolveAlias(config.aliases.blocks, config);\n return path.join(blocksDir, blockName);\n}\n\n/**\n * Get the output path for a hook.\n */\nexport function getHookPath(hookName: string, config: PrismConfig): string {\n const hooksDir = resolveAlias(config.aliases.hooks, config);\n return path.join(hooksDir, `${hookName}.ts`);\n}\n\n/**\n * Get the output path for a utility.\n */\nexport function getUtilPath(utilName: string, config: PrismConfig): string {\n const utilsDir = resolveAlias(config.aliases.utils, config);\n return path.join(utilsDir, `${utilName}.ts`);\n}\n","/**\n * Registry Manager\n *\n * Core registry management for Prism components and blocks.\n * Handles loading, merging, querying, and caching of registry data.\n *\n * Key Features:\n * - Multiple registry sources (local, remote, merged)\n * - Automatic dependency resolution\n * - Version management and compatibility checking\n * - Caching with configurable TTL\n *\n * @module @omnitron-dev/prism/registry/manager\n */\n\nimport type { RegistrySchema, ComponentDefinition, RegistryConfig, RemoteRegistryConfig } from '../types/registry.js';\nimport type { BlockDefinition } from '../types/blocks.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface RegistryManagerOptions {\n /** Base directory for local registries */\n baseDir?: string;\n /** Default registry name */\n defaultRegistry?: string;\n /** Registry configuration */\n config?: RegistryConfig;\n /** Cache TTL in milliseconds (default: 5 minutes) */\n cacheTtl?: number;\n}\n\nexport interface SearchOptions {\n /** Filter by category */\n category?: string;\n /** Search query */\n query?: string;\n /** Include dependencies in results */\n includeDependencies?: boolean;\n /** Limit results */\n limit?: number;\n}\n\nexport interface ResolvedItem {\n /** Item definition */\n definition: ComponentDefinition | BlockDefinition;\n /** Registry source */\n registry: string;\n /** Resolved dependencies */\n dependencies: ResolvedItem[];\n}\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n}\n\n// =============================================================================\n// REGISTRY MANAGER\n// =============================================================================\n\n/**\n * Registry manager for Prism design system.\n *\n * Manages component and block registries with support for:\n * - Local and remote registry sources\n * - Registry merging and extension\n * - Dependency resolution\n * - Caching with TTL\n *\n * @example\n * ```typescript\n * const manager = new RegistryManager({\n * baseDir: './prism',\n * config: {\n * default: 'prism',\n * registries: {\n * prism: 'https://registry.prism.dev',\n * custom: './custom-registry.json',\n * },\n * },\n * });\n *\n * // Get a component\n * const button = await manager.getComponent('button');\n *\n * // Search for components\n * const inputs = await manager.searchComponents({ category: 'inputs' });\n *\n * // Resolve dependencies\n * const resolved = await manager.resolveDependencies('data-table');\n * ```\n */\nexport class RegistryManager {\n private readonly options: Required<RegistryManagerOptions>;\n private registries: Map<string, RegistrySchema> = new Map();\n private cache: Map<string, CacheEntry<RegistrySchema>> = new Map();\n private loaders: Map<string, () => Promise<RegistrySchema>> = new Map();\n\n constructor(options: RegistryManagerOptions = {}) {\n this.options = {\n baseDir: options.baseDir ?? (typeof process !== 'undefined' && process.cwd ? process.cwd() : '/'),\n defaultRegistry: options.defaultRegistry ?? 'prism',\n config: options.config ?? { default: 'prism', registries: {} },\n cacheTtl: options.cacheTtl ?? 5 * 60 * 1000, // 5 minutes\n };\n }\n\n // ===========================================================================\n // REGISTRY LOADING\n // ===========================================================================\n\n /**\n * Register a custom loader for a registry.\n */\n registerLoader(name: string, loader: () => Promise<RegistrySchema>): void {\n this.loaders.set(name, loader);\n }\n\n /**\n * Load a registry by name.\n */\n async loadRegistry(name: string): Promise<RegistrySchema> {\n // Check cache first\n const cached = this.cache.get(name);\n if (cached && Date.now() - cached.timestamp < this.options.cacheTtl) {\n return cached.data;\n }\n\n // Check if already loaded\n const existing = this.registries.get(name);\n if (existing && !cached) {\n return existing;\n }\n\n // Use custom loader if registered\n const customLoader = this.loaders.get(name);\n if (customLoader) {\n const registry = await customLoader();\n this.cacheRegistry(name, registry);\n return registry;\n }\n\n // Get registry config\n const config = this.options.config.registries[name];\n if (!config) {\n throw new Error(`Registry \"${name}\" not found in configuration`);\n }\n\n // Load based on config type\n const registry = typeof config === 'string' ? await this.loadFromPath(config) : await this.loadFromRemote(config);\n\n // Handle registry extension\n if (registry.extends) {\n const baseRegistry = await this.loadRegistry(registry.extends);\n const merged = this.mergeRegistries(baseRegistry, registry);\n this.cacheRegistry(name, merged);\n return merged;\n }\n\n this.cacheRegistry(name, registry);\n return registry;\n }\n\n /**\n * Load registry from local file path.\n * Uses dynamic import for ESM compatibility across environments.\n *\n * @param path - Relative or absolute path to registry JSON\n * @returns Loaded registry schema\n */\n private async loadFromPath(path: string): Promise<RegistrySchema> {\n const fullPath = path.startsWith('/') ? path : `${this.options.baseDir}/${path}`;\n\n // Check if running in Node.js-like environment with fs access\n if (typeof process !== 'undefined' && (process.versions?.node || process.versions?.bun)) {\n // Dynamic import for Node.js fs module\n const fs = await import('node:fs/promises');\n const content = await fs.readFile(fullPath, 'utf-8');\n return JSON.parse(content) as RegistrySchema;\n }\n\n // In browser/Deno environment, try to fetch if it's a URL\n if (path.startsWith('http://') || path.startsWith('https://')) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(`Failed to load registry from ${path}: ${response.statusText}`);\n }\n return response.json();\n }\n\n // For browser environment with bundled registries, use custom loader\n throw new Error(\n `Cannot load local file \"${fullPath}\" in browser environment. ` +\n `Register a custom loader with manager.registerLoader() or use a remote URL.`\n );\n }\n\n /**\n * Load registry from remote URL.\n */\n private async loadFromRemote(config: RemoteRegistryConfig): Promise<RegistrySchema> {\n const response = await fetch(config.url, {\n headers: config.headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to load registry from ${config.url}: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Cache a loaded registry.\n */\n private cacheRegistry(name: string, registry: RegistrySchema): void {\n this.registries.set(name, registry);\n this.cache.set(name, {\n data: registry,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Merge two registries (base + extension).\n */\n private mergeRegistries(base: RegistrySchema, extension: RegistrySchema): RegistrySchema {\n return {\n ...base,\n ...extension,\n components: { ...base.components, ...extension.components },\n blocks: { ...base.blocks, ...extension.blocks },\n themes: { ...base.themes, ...extension.themes },\n };\n }\n\n /**\n * Clear registry cache.\n */\n clearCache(name?: string): void {\n if (name) {\n this.cache.delete(name);\n } else {\n this.cache.clear();\n }\n }\n\n // ===========================================================================\n // COMPONENT OPERATIONS\n // ===========================================================================\n\n /**\n * Get a component definition by name.\n */\n async getComponent(name: string, registryName?: string): Promise<ComponentDefinition | null> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.components[name] ?? null;\n }\n\n /**\n * Get all components from a registry.\n */\n async getComponents(registryName?: string): Promise<Record<string, ComponentDefinition>> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.components;\n }\n\n /**\n * Search for components.\n */\n async searchComponents(options: SearchOptions, registryName?: string): Promise<ComponentDefinition[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n let results = Object.values(registry.components);\n\n // Filter by category\n if (options.category) {\n results = results.filter((c) => c.category === options.category);\n }\n\n // Filter by query\n if (options.query) {\n const query = options.query.toLowerCase();\n results = results.filter(\n (c) =>\n c.name.toLowerCase().includes(query) ||\n c.displayName?.toLowerCase().includes(query) ||\n c.description?.toLowerCase().includes(query)\n );\n }\n\n // Limit results\n if (options.limit && options.limit > 0) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Get component categories.\n */\n async getComponentCategories(registryName?: string): Promise<string[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n const categories = new Set<string>();\n\n for (const component of Object.values(registry.components)) {\n categories.add(component.category);\n }\n\n return Array.from(categories).sort();\n }\n\n // ===========================================================================\n // BLOCK OPERATIONS\n // ===========================================================================\n\n /**\n * Get a block definition by name.\n */\n async getBlock(name: string, registryName?: string): Promise<BlockDefinition | null> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.blocks[name] ?? null;\n }\n\n /**\n * Get all blocks from a registry.\n */\n async getBlocks(registryName?: string): Promise<Record<string, BlockDefinition>> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.blocks;\n }\n\n /**\n * Search for blocks.\n */\n async searchBlocks(options: SearchOptions, registryName?: string): Promise<BlockDefinition[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n let results = Object.values(registry.blocks);\n\n // Filter by category\n if (options.category) {\n results = results.filter((b) => b.category === options.category);\n }\n\n // Filter by query\n if (options.query) {\n const query = options.query.toLowerCase();\n results = results.filter(\n (b) =>\n b.name.toLowerCase().includes(query) ||\n b.displayName?.toLowerCase().includes(query) ||\n b.description?.toLowerCase().includes(query)\n );\n }\n\n // Limit results\n if (options.limit && options.limit > 0) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Get block categories.\n */\n async getBlockCategories(registryName?: string): Promise<string[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n const categories = new Set<string>();\n\n for (const block of Object.values(registry.blocks)) {\n categories.add(block.category);\n }\n\n return Array.from(categories).sort();\n }\n\n // ===========================================================================\n // DEPENDENCY RESOLUTION\n // ===========================================================================\n\n /**\n * Resolve all dependencies for a component.\n */\n async resolveComponentDependencies(name: string, registryName?: string): Promise<ResolvedItem> {\n const registry = registryName ?? this.options.defaultRegistry;\n const component = await this.getComponent(name, registry);\n\n if (!component) {\n throw new Error(`Component \"${name}\" not found in registry \"${registry}\"`);\n }\n\n const dependencies: ResolvedItem[] = [];\n\n // Resolve component dependencies\n for (const depName of component.dependencies.components) {\n const resolved = await this.resolveComponentDependencies(depName, registry);\n dependencies.push(resolved);\n }\n\n return {\n definition: component,\n registry,\n dependencies,\n };\n }\n\n /**\n * Resolve all dependencies for a block.\n */\n async resolveBlockDependencies(name: string, registryName?: string): Promise<ResolvedItem> {\n const registry = registryName ?? this.options.defaultRegistry;\n const block = await this.getBlock(name, registry);\n\n if (!block) {\n throw new Error(`Block \"${name}\" not found in registry \"${registry}\"`);\n }\n\n const dependencies: ResolvedItem[] = [];\n\n // Resolve component dependencies\n for (const compName of block.dependencies.components) {\n const resolved = await this.resolveComponentDependencies(compName, registry);\n dependencies.push(resolved);\n }\n\n // Resolve block dependencies\n for (const blockName of block.dependencies.blocks) {\n const resolved = await this.resolveBlockDependencies(blockName, registry);\n dependencies.push(resolved);\n }\n\n return {\n definition: block,\n registry,\n dependencies,\n };\n }\n\n /**\n * Get flat list of all npm dependencies for resolved items.\n */\n getNpmDependencies(resolved: ResolvedItem): string[] {\n const deps = new Set<string>();\n\n function collectDeps(item: ResolvedItem): void {\n // Add direct npm dependencies\n const definition = item.definition as ComponentDefinition | BlockDefinition;\n if ('dependencies' in definition) {\n for (const dep of definition.dependencies.npm) {\n deps.add(dep);\n }\n }\n\n // Recurse into dependencies\n for (const child of item.dependencies) {\n collectDeps(child);\n }\n }\n\n collectDeps(resolved);\n return Array.from(deps).sort();\n }\n\n /**\n * Get flat list of all file paths for resolved items.\n */\n getFilePaths(resolved: ResolvedItem): string[] {\n const paths = new Set<string>();\n\n function collectPaths(item: ResolvedItem): void {\n // Add direct file paths\n const definition = item.definition as ComponentDefinition | BlockDefinition;\n for (const file of definition.files) {\n paths.add(file.path);\n }\n\n // Recurse into dependencies\n for (const child of item.dependencies) {\n collectPaths(child);\n }\n }\n\n collectPaths(resolved);\n return Array.from(paths).sort();\n }\n\n // ===========================================================================\n // VERSION CHECKING\n // ===========================================================================\n\n /**\n * Check if a component version is compatible.\n */\n async checkComponentVersion(name: string, requiredVersion: string, registryName?: string): Promise<boolean> {\n const component = await this.getComponent(name, registryName);\n if (!component) return false;\n\n return this.isVersionCompatible(component.version, requiredVersion);\n }\n\n /**\n * Check semver version compatibility.\n * Simple implementation - considers major.minor compatibility.\n */\n private isVersionCompatible(actual: string, required: string): boolean {\n const [actualMajor, actualMinor] = actual.split('.').map(Number);\n const [requiredMajor, requiredMinor] = required.split('.').map(Number);\n\n // Major version must match\n if (actualMajor !== requiredMajor) return false;\n\n // Minor version must be >= required\n return actualMinor >= requiredMinor;\n }\n\n // ===========================================================================\n // REGISTRY INFO\n // ===========================================================================\n\n /**\n * Get registry metadata.\n */\n async getRegistryInfo(registryName?: string): Promise<{\n name: string;\n version: string;\n description?: string;\n componentCount: number;\n blockCount: number;\n themeCount: number;\n }> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n\n return {\n name: registry.name,\n version: registry.version,\n description: registry.description,\n componentCount: Object.keys(registry.components).length,\n blockCount: Object.keys(registry.blocks).length,\n themeCount: Object.keys(registry.themes).length,\n };\n }\n\n /**\n * Get list of loaded registries.\n */\n getLoadedRegistries(): string[] {\n return Array.from(this.registries.keys());\n }\n}\n\n// =============================================================================\n// DEFAULT INSTANCE\n// =============================================================================\n\n/**\n * Default registry manager instance.\n */\nexport const registry = new RegistryManager();\n\n/**\n * Create a new registry manager with custom options.\n */\nexport function createRegistryManager(options?: RegistryManagerOptions): RegistryManager {\n return new RegistryManager(options);\n}\n","/**\n * Component/Block Installer\n *\n * Handles installation of Prism components and blocks to target projects.\n * Manages file copying, dependency resolution, and lockfile tracking.\n *\n * Key Features:\n * - Atomic installation with rollback on failure\n * - Automatic dependency installation\n * - Template variable substitution\n * - Lockfile tracking for updates\n *\n * @module @omnitron-dev/prism/registry/installer\n */\n\nimport { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\nimport type { ComponentDefinition, InstalledComponent, InstalledBlock, PrismLockfile } from '../types/registry.js';\nimport type { BlockDefinition } from '../types/blocks.js';\nimport { RegistryManager, type ResolvedItem } from './manager.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface InstallerOptions {\n /** Target directory for components */\n componentsDir?: string;\n /** Target directory for blocks */\n blocksDir?: string;\n /** Target directory for hooks */\n hooksDir?: string;\n /** Overwrite existing files */\n overwrite?: boolean;\n /** Dry run mode (don't write files) */\n dryRun?: boolean;\n /** Skip dependencies */\n skipDependencies?: boolean;\n /** Template variables for substitution */\n templateVars?: Record<string, string>;\n}\n\nexport interface InstallResult {\n /** Whether installation was successful */\n success: boolean;\n /** Installed files */\n files: string[];\n /** npm dependencies to install */\n npmDependencies: string[];\n /** Errors encountered */\n errors: string[];\n /** Warnings */\n warnings: string[];\n}\n\ninterface FileOperation {\n type: 'write' | 'mkdir';\n path: string;\n content?: string;\n}\n\n// =============================================================================\n// INSTALLER\n// =============================================================================\n\n/**\n * Prism component and block installer.\n *\n * @example\n * ```typescript\n * const installer = new PrismInstaller({\n * componentsDir: 'src/components',\n * blocksDir: 'src/blocks',\n * });\n *\n * // Install a component\n * const result = await installer.installComponent('button');\n *\n * // Install a block with all dependencies\n * const blockResult = await installer.installBlock('dashboard-layout');\n * ```\n */\nexport class PrismInstaller {\n private readonly options: Required<InstallerOptions>;\n private readonly registryManager: RegistryManager;\n private lockfile: PrismLockfile | null = null;\n private lockfilePath: string;\n\n constructor(registryManager: RegistryManager, options: InstallerOptions = {}) {\n this.registryManager = registryManager;\n this.options = {\n componentsDir: options.componentsDir ?? 'src/components/prism',\n blocksDir: options.blocksDir ?? 'src/blocks',\n hooksDir: options.hooksDir ?? 'src/hooks',\n overwrite: options.overwrite ?? false,\n dryRun: options.dryRun ?? false,\n skipDependencies: options.skipDependencies ?? false,\n templateVars: options.templateVars ?? {},\n };\n this.lockfilePath = path.join(process.cwd(), 'prism.lock.json');\n }\n\n // ===========================================================================\n // COMPONENT INSTALLATION\n // ===========================================================================\n\n /**\n * Install a component and its dependencies.\n */\n async installComponent(name: string, registryName?: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n // Resolve component and dependencies\n const resolved = await this.registryManager.resolveComponentDependencies(name, registryName);\n\n // Get all items to install (flattened)\n const itemsToInstall = this.options.skipDependencies ? [resolved] : this.flattenDependencies(resolved);\n\n // Check for existing installations\n await this.loadLockfile();\n const existingComponents = new Set(Object.keys(this.lockfile?.components ?? {}));\n\n // Filter out already installed components (unless overwrite is enabled)\n const filteredItems = this.options.overwrite\n ? itemsToInstall\n : itemsToInstall.filter((item) => {\n const def = item.definition as ComponentDefinition;\n if (existingComponents.has(def.name)) {\n result.warnings.push(\n `Component \"${def.name}\" is already installed, skipping (use --overwrite to replace)`\n );\n return false;\n }\n return true;\n });\n\n // Collect all file operations\n const operations: FileOperation[] = [];\n const installedComponents: InstalledComponent[] = [];\n\n for (const item of filteredItems) {\n const component = item.definition as ComponentDefinition;\n const componentOps = await this.prepareComponentFiles(component, item.registry);\n operations.push(...componentOps);\n\n installedComponents.push({\n name: component.name,\n version: component.version,\n registry: item.registry,\n installedAt: new Date().toISOString(),\n files: componentOps.filter((op) => op.type === 'write').map((op) => op.path),\n });\n }\n\n // Collect npm dependencies\n result.npmDependencies = this.registryManager.getNpmDependencies(resolved);\n\n // Execute operations (or simulate in dry run)\n if (this.options.dryRun) {\n result.files = operations.filter((op) => op.type === 'write').map((op) => op.path);\n result.success = true;\n } else {\n await this.executeOperations(operations);\n result.files = operations.filter((op) => op.type === 'write').map((op) => op.path);\n\n // Update lockfile\n for (const component of installedComponents) {\n this.lockfile!.components[component.name] = component;\n }\n await this.saveLockfile();\n\n result.success = true;\n }\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Prepare file operations for a component.\n */\n private async prepareComponentFiles(component: ComponentDefinition, _registry: string): Promise<FileOperation[]> {\n const operations: FileOperation[] = [];\n const componentDir = path.join(this.options.componentsDir, component.name);\n\n // Create component directory\n operations.push({ type: 'mkdir', path: componentDir });\n\n // Prepare each file\n for (const file of component.files) {\n const targetPath = path.join(componentDir, path.basename(file.path));\n const content = await this.fetchFileContent(file.path);\n const processedContent = this.processTemplate(content);\n\n operations.push({\n type: 'write',\n path: targetPath,\n content: processedContent,\n });\n }\n\n return operations;\n }\n\n // ===========================================================================\n // BLOCK INSTALLATION\n // ===========================================================================\n\n /**\n * Install a block and its dependencies.\n */\n async installBlock(name: string, registryName?: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n // Resolve block and dependencies\n const resolved = await this.registryManager.resolveBlockDependencies(name, registryName);\n\n // Get all items to install (flattened)\n const allItems = this.options.skipDependencies ? [resolved] : this.flattenDependencies(resolved);\n\n // Separate blocks and components by checking for block-specific properties\n // BlockDefinition has 'defaultConfig' which ComponentDefinition doesn't have\n const blocks = allItems.filter((item) => {\n const def = item.definition;\n // Block has 'defaultConfig' and 'dependencies.blocks', Component has 'dependencies.components'\n return 'defaultConfig' in def && 'dependencies' in def && 'blocks' in (def as BlockDefinition).dependencies;\n });\n const components = allItems.filter((item) => !blocks.includes(item));\n\n // Check for existing installations\n await this.loadLockfile();\n\n // Install component dependencies first\n for (const item of components) {\n const component = item.definition as ComponentDefinition;\n const existingComponent = this.lockfile?.components[component.name];\n\n if (existingComponent && !this.options.overwrite) {\n result.warnings.push(`Component \"${component.name}\" is already installed, skipping`);\n continue;\n }\n\n const componentResult = await this.installComponent(component.name, item.registry);\n result.files.push(...componentResult.files);\n result.errors.push(...componentResult.errors);\n result.warnings.push(...componentResult.warnings);\n }\n\n // Install blocks\n const operations: FileOperation[] = [];\n const installedBlocks: InstalledBlock[] = [];\n\n for (const item of blocks) {\n const block = item.definition as BlockDefinition;\n const existingBlock = this.lockfile?.blocks[block.name];\n\n if (existingBlock && !this.options.overwrite) {\n result.warnings.push(`Block \"${block.name}\" is already installed, skipping`);\n continue;\n }\n\n const blockOps = await this.prepareBlockFiles(block, item.registry);\n operations.push(...blockOps);\n\n installedBlocks.push({\n name: block.name,\n version: block.version,\n registry: item.registry,\n installedAt: new Date().toISOString(),\n files: blockOps.filter((op) => op.type === 'write').map((op) => op.path),\n config: block.defaultConfig,\n });\n }\n\n // Collect npm dependencies\n result.npmDependencies = this.registryManager.getNpmDependencies(resolved);\n\n // Execute operations\n if (this.options.dryRun) {\n result.files.push(...operations.filter((op) => op.type === 'write').map((op) => op.path));\n result.success = true;\n } else {\n await this.executeOperations(operations);\n result.files.push(...operations.filter((op) => op.type === 'write').map((op) => op.path));\n\n // Update lockfile\n for (const block of installedBlocks) {\n this.lockfile!.blocks[block.name] = block;\n }\n await this.saveLockfile();\n\n result.success = true;\n }\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Prepare file operations for a block.\n */\n private async prepareBlockFiles(block: BlockDefinition, _registry: string): Promise<FileOperation[]> {\n const operations: FileOperation[] = [];\n const blockDir = path.join(this.options.blocksDir, block.name);\n\n // Create block directory\n operations.push({ type: 'mkdir', path: blockDir });\n\n // Prepare each file\n for (const file of block.files) {\n const targetPath = path.join(blockDir, file.path);\n const targetDir = path.dirname(targetPath);\n\n // Create subdirectory if needed\n if (targetDir !== blockDir) {\n operations.push({ type: 'mkdir', path: targetDir });\n }\n\n const content = await this.fetchFileContent(file.path);\n const processedContent = this.processTemplate(content);\n\n operations.push({\n type: 'write',\n path: targetPath,\n content: processedContent,\n });\n }\n\n return operations;\n }\n\n // ===========================================================================\n // UNINSTALLATION\n // ===========================================================================\n\n /**\n * Uninstall a component.\n */\n async uninstallComponent(name: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n await this.loadLockfile();\n const installed = this.lockfile?.components[name];\n\n if (!installed) {\n result.errors.push(`Component \"${name}\" is not installed`);\n return result;\n }\n\n // Check if any other components depend on this one\n const dependents = await this.findDependents(name, 'component');\n if (dependents.length > 0) {\n result.errors.push(`Cannot uninstall \"${name}\" because it is used by: ${dependents.join(', ')}`);\n return result;\n }\n\n // Delete files\n if (!this.options.dryRun) {\n for (const filePath of installed.files) {\n await fs.unlink(filePath).catch(() => {\n result.warnings.push(`Could not delete file: ${filePath}`);\n });\n }\n\n // Try to remove component directory if empty\n const componentDir = path.dirname(installed.files[0]);\n await fs.rmdir(componentDir).catch(() => {\n // Directory not empty or doesn't exist\n });\n\n // Update lockfile\n delete this.lockfile!.components[name];\n await this.saveLockfile();\n }\n\n result.files = installed.files;\n result.success = true;\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Uninstall a block.\n */\n async uninstallBlock(name: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n await this.loadLockfile();\n const installed = this.lockfile?.blocks[name];\n\n if (!installed) {\n result.errors.push(`Block \"${name}\" is not installed`);\n return result;\n }\n\n // Check if any other blocks depend on this one\n const dependents = await this.findDependents(name, 'block');\n if (dependents.length > 0) {\n result.errors.push(`Cannot uninstall \"${name}\" because it is used by: ${dependents.join(', ')}`);\n return result;\n }\n\n // Delete files\n if (!this.options.dryRun) {\n for (const filePath of installed.files) {\n await fs.unlink(filePath).catch(() => {\n result.warnings.push(`Could not delete file: ${filePath}`);\n });\n }\n\n // Try to remove block directory\n const blockDir = path.dirname(installed.files[0]);\n await fs.rm(blockDir, { recursive: true }).catch(() => {\n result.warnings.push(`Could not remove directory: ${blockDir}`);\n });\n\n // Update lockfile\n delete this.lockfile!.blocks[name];\n await this.saveLockfile();\n }\n\n result.files = installed.files;\n result.success = true;\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n // ===========================================================================\n // HELPERS\n // ===========================================================================\n\n /**\n * Flatten dependency tree into unique list.\n */\n private flattenDependencies(resolved: ResolvedItem): ResolvedItem[] {\n const seen = new Set<string>();\n const result: ResolvedItem[] = [];\n\n function traverse(item: ResolvedItem): void {\n const key = `${item.registry}:${item.definition.name}`;\n if (seen.has(key)) return;\n seen.add(key);\n\n // Process dependencies first (for proper install order)\n for (const dep of item.dependencies) {\n traverse(dep);\n }\n\n result.push(item);\n }\n\n traverse(resolved);\n return result;\n }\n\n /**\n * Fetch file content from registry.\n * Supports local files (prefixed with file:// or absolute paths) and remote URLs.\n */\n private async fetchFileContent(filePath: string): Promise<string> {\n // Handle local file paths\n if (filePath.startsWith('file://') || filePath.startsWith('/') || /^[a-zA-Z]:/.test(filePath)) {\n const actualPath = filePath.replace('file://', '');\n try {\n const content = await fs.readFile(actualPath, 'utf-8');\n return content;\n } catch (error) {\n throw new Error(\n `Failed to read local file \"${actualPath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n // Handle relative paths (resolve against baseDir from registry manager options)\n if (!filePath.startsWith('http://') && !filePath.startsWith('https://')) {\n const resolvedPath = path.resolve(process.cwd(), filePath);\n try {\n const content = await fs.readFile(resolvedPath, 'utf-8');\n return content;\n } catch (error) {\n throw new Error(\n `Failed to read file \"${resolvedPath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n // Handle remote URLs\n try {\n const response = await fetch(filePath);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n return await response.text();\n } catch (error) {\n throw new Error(\n `Failed to fetch remote file \"${filePath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n /**\n * Process template variables in content.\n */\n private processTemplate(content: string): string {\n let result = content;\n\n for (const [key, value] of Object.entries(this.options.templateVars)) {\n result = result.replace(new RegExp(`{{${key}}}`, 'g'), value);\n }\n\n return result;\n }\n\n /**\n * Execute file operations.\n */\n private async executeOperations(operations: FileOperation[]): Promise<void> {\n // Sort operations: directories first, then files\n const sorted = [...operations].sort((a, b) => {\n if (a.type === 'mkdir' && b.type !== 'mkdir') return -1;\n if (a.type !== 'mkdir' && b.type === 'mkdir') return 1;\n return 0;\n });\n\n for (const op of sorted) {\n if (op.type === 'mkdir') {\n await fs.mkdir(op.path, { recursive: true });\n } else if (op.type === 'write' && op.content !== undefined) {\n // Check if file exists and we shouldn't overwrite\n if (!this.options.overwrite) {\n try {\n await fs.access(op.path);\n continue; // File exists, skip\n } catch {\n // File doesn't exist, proceed\n }\n }\n await fs.writeFile(op.path, op.content, 'utf-8');\n }\n }\n }\n\n /**\n * Find items that depend on a given component/block.\n */\n private async findDependents(name: string, type: 'component' | 'block'): Promise<string[]> {\n const dependents: string[] = [];\n\n if (!this.lockfile) return dependents;\n\n // Check all installed blocks for dependencies\n for (const [blockName, _block] of Object.entries(this.lockfile.blocks)) {\n const blockDef = await this.registryManager.getBlock(blockName);\n if (!blockDef) continue;\n\n if (type === 'component' && blockDef.dependencies.components.includes(name)) {\n dependents.push(blockName);\n }\n if (type === 'block' && blockDef.dependencies.blocks.includes(name)) {\n dependents.push(blockName);\n }\n }\n\n // Check components for component dependencies\n if (type === 'component') {\n for (const [compName, _comp] of Object.entries(this.lockfile.components)) {\n const compDef = await this.registryManager.getComponent(compName);\n if (!compDef) continue;\n\n if (compDef.dependencies.components.includes(name)) {\n dependents.push(compName);\n }\n }\n }\n\n return dependents;\n }\n\n // ===========================================================================\n // LOCKFILE MANAGEMENT\n // ===========================================================================\n\n /**\n * Load lockfile from disk.\n */\n private async loadLockfile(): Promise<void> {\n if (this.lockfile) return;\n\n try {\n const content = await fs.readFile(this.lockfilePath, 'utf-8');\n this.lockfile = JSON.parse(content);\n } catch {\n // Create new lockfile if it doesn't exist\n this.lockfile = {\n version: '1.0.0',\n components: {},\n blocks: {},\n themes: [],\n };\n }\n }\n\n /**\n * Save lockfile to disk.\n */\n private async saveLockfile(): Promise<void> {\n if (!this.lockfile) return;\n\n await fs.writeFile(this.lockfilePath, JSON.stringify(this.lockfile, null, 2), 'utf-8');\n }\n\n /**\n * Get current lockfile.\n */\n async getLockfile(): Promise<PrismLockfile> {\n await this.loadLockfile();\n return this.lockfile!;\n }\n\n /**\n * List installed components.\n */\n async listInstalled(): Promise<{\n components: InstalledComponent[];\n blocks: InstalledBlock[];\n }> {\n await this.loadLockfile();\n return {\n components: Object.values(this.lockfile!.components),\n blocks: Object.values(this.lockfile!.blocks),\n };\n }\n}\n\n// =============================================================================\n// FACTORY\n// =============================================================================\n\n/**\n * Create a new installer instance.\n */\nexport function createInstaller(registryManager: RegistryManager, options?: InstallerOptions): PrismInstaller {\n return new PrismInstaller(registryManager, options);\n}\n","/**\n * Prism Registry Module\n *\n * Component and block registry system for the Prism design framework.\n * Enables shadcn/ui-style copy-paste installation with dependency resolution.\n *\n * @module @omnitron-dev/prism/registry\n */\n\n// =============================================================================\n// REGISTRY MANAGER\n// =============================================================================\n\nexport { RegistryManager, registry, createRegistryManager } from './manager.js';\n\nexport type { RegistryManagerOptions, SearchOptions, ResolvedItem } from './manager.js';\n\n// =============================================================================\n// INSTALLER\n// =============================================================================\n\nexport { PrismInstaller, createInstaller } from './installer.js';\n\nexport type { InstallerOptions, InstallResult } from './installer.js';\n\n// =============================================================================\n// DEFAULT REGISTRY SCHEMA\n// =============================================================================\n\nimport type { RegistrySchema } from '../types/registry.js';\n\n/**\n * Default Prism registry schema.\n * Defines the structure for the base component and block registry.\n */\nexport const defaultRegistrySchema: RegistrySchema = {\n $schema: 'https://prism.omnitron.dev/registry/v1/schema.json',\n name: 'prism',\n version: '1.0.0',\n description: 'Official Prism Design System Registry',\n baseUrl: 'https://registry.prism.omnitron.dev',\n components: {\n // Input Components\n button: {\n name: 'button',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Button',\n description: 'Primary action button with multiple variants',\n files: [\n { path: 'Button.tsx', type: 'component' },\n { path: 'Button.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n docs: 'https://docs.prism.omnitron.dev/components/button',\n },\n 'icon-button': {\n name: 'icon-button',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Icon Button',\n description: 'Compact button for icon-only actions',\n files: [\n { path: 'IconButton.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n 'text-field': {\n name: 'text-field',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Text Field',\n description: 'Text input with label and helper text',\n files: [\n { path: 'TextField.tsx', type: 'component' },\n { path: 'TextField.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n select: {\n name: 'select',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Select',\n description: 'Dropdown selection component',\n files: [\n { path: 'Select.tsx', type: 'component' },\n { path: 'Select.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n checkbox: {\n name: 'checkbox',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Checkbox',\n description: 'Checkbox input for boolean values',\n files: [\n { path: 'Checkbox.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n switch: {\n name: 'switch',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Switch',\n description: 'Toggle switch for on/off states',\n files: [\n { path: 'Switch.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Data Display\n avatar: {\n name: 'avatar',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Avatar',\n description: 'User avatar with image or initials',\n files: [\n { path: 'Avatar.tsx', type: 'component' },\n { path: 'AvatarGroup.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n badge: {\n name: 'badge',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Badge',\n description: 'Badge for notifications and status',\n files: [\n { path: 'Badge.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n chip: {\n name: 'chip',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Chip',\n description: 'Compact element for tags and selections',\n files: [\n { path: 'Chip.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n tooltip: {\n name: 'tooltip',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Tooltip',\n description: 'Informative tooltip on hover',\n files: [\n { path: 'Tooltip.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Feedback\n alert: {\n name: 'alert',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Alert',\n description: 'Alert messages with severity levels',\n files: [\n { path: 'Alert.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n snackbar: {\n name: 'snackbar',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Snackbar',\n description: 'Brief notification messages',\n files: [\n { path: 'Snackbar.tsx', type: 'component' },\n { path: 'SnackbarProvider.tsx', type: 'component' },\n { path: 'useSnackbar.ts', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'notistack'],\n components: [],\n },\n hasVariants: false,\n },\n dialog: {\n name: 'dialog',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Dialog',\n description: 'Modal dialog with actions',\n files: [\n { path: 'Dialog.tsx', type: 'component' },\n { path: 'ConfirmDialog.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: ['button'],\n },\n hasVariants: false,\n },\n progress: {\n name: 'progress',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Progress',\n description: 'Progress indicators (linear and circular)',\n files: [\n { path: 'LinearProgress.tsx', type: 'component' },\n { path: 'CircularProgress.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Surfaces\n card: {\n name: 'card',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Card',\n description: 'Content card with header, content, and actions',\n files: [\n { path: 'Card.tsx', type: 'component' },\n { path: 'Card.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n paper: {\n name: 'paper',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Paper',\n description: 'Basic surface with elevation',\n files: [\n { path: 'Paper.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n accordion: {\n name: 'accordion',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Accordion',\n description: 'Expandable content panels',\n files: [\n { path: 'Accordion.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Navigation\n tabs: {\n name: 'tabs',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Tabs',\n description: 'Tabbed navigation component',\n files: [\n { path: 'Tabs.tsx', type: 'component' },\n { path: 'TabPanel.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n breadcrumbs: {\n name: 'breadcrumbs',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Breadcrumbs',\n description: 'Navigation breadcrumb trail',\n files: [\n { path: 'Breadcrumbs.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n menu: {\n name: 'menu',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Menu',\n description: 'Dropdown menu for actions',\n files: [\n { path: 'Menu.tsx', type: 'component' },\n { path: 'MenuItem.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Layout\n stack: {\n name: 'stack',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Stack',\n description: 'Vertical/horizontal flex layout',\n files: [\n { path: 'Stack.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n grid: {\n name: 'grid',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Grid',\n description: 'Responsive grid layout',\n files: [\n { path: 'Grid.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n container: {\n name: 'container',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Container',\n description: 'Centered content container',\n files: [\n { path: 'Container.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n divider: {\n name: 'divider',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Divider',\n description: 'Visual separator',\n files: [\n { path: 'Divider.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Data\n 'data-table': {\n name: 'data-table',\n version: '1.0.0',\n category: 'data',\n displayName: 'Data Table',\n description: 'Full-featured data table with sorting, filtering, pagination',\n files: [\n { path: 'DataTable.tsx', type: 'component' },\n { path: 'DataTable.types.ts', type: 'types' },\n { path: 'DataTableToolbar.tsx', type: 'component' },\n { path: 'DataTablePagination.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', '@tanstack/react-table'],\n components: ['button', 'text-field', 'select', 'checkbox', 'menu'],\n },\n hasVariants: true,\n docs: 'https://docs.prism.omnitron.dev/components/data-table',\n },\n table: {\n name: 'table',\n version: '1.0.0',\n category: 'data',\n displayName: 'Table',\n description: 'Basic table component',\n files: [\n { path: 'Table.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n list: {\n name: 'list',\n version: '1.0.0',\n category: 'data',\n displayName: 'List',\n description: 'Vertical list of items',\n files: [\n { path: 'List.tsx', type: 'component' },\n { path: 'ListItem.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n },\n blocks: {\n // Dashboard blocks\n 'dashboard-layout': {\n name: 'dashboard-layout',\n version: '1.0.0',\n category: 'layouts',\n displayName: 'Dashboard Layout',\n description: 'Complete dashboard layout with sidebar and header',\n files: [\n { path: 'DashboardLayout.tsx', type: 'component' },\n { path: 'DashboardLayout.types.ts', type: 'type' },\n { path: 'Sidebar.tsx', type: 'component' },\n { path: 'Header.tsx', type: 'component' },\n { path: 'NavSection.tsx', type: 'component' },\n { path: 'NavItem.tsx', type: 'component' },\n { path: 'useDashboard.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'framer-motion'],\n components: ['avatar', 'menu', 'icon-button', 'tooltip'],\n blocks: [],\n },\n defaultConfig: {\n sidebarWidth: 280,\n headerHeight: 64,\n collapsedWidth: 72,\n },\n docs: 'https://docs.prism.omnitron.dev/blocks/dashboard-layout',\n },\n 'auth-forms': {\n name: 'auth-forms',\n version: '1.0.0',\n category: 'auth',\n displayName: 'Authentication Forms',\n description: 'Login, register, forgot password, and verify forms',\n files: [\n { path: 'LoginForm.tsx', type: 'component' },\n { path: 'RegisterForm.tsx', type: 'component' },\n { path: 'ForgotPasswordForm.tsx', type: 'component' },\n { path: 'VerifyCodeForm.tsx', type: 'component' },\n { path: 'auth.schema.ts', type: 'schema' },\n { path: 'useAuthForm.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'react-hook-form', '@hookform/resolvers', 'zod'],\n components: ['button', 'text-field', 'checkbox', 'alert'],\n blocks: [],\n },\n defaultConfig: {\n showSocialLogin: true,\n showRememberMe: true,\n },\n },\n 'settings-panel': {\n name: 'settings-panel',\n version: '1.0.0',\n category: 'settings',\n displayName: 'Settings Panel',\n description: 'Theme settings panel with live preview',\n files: [\n { path: 'SettingsPanel.tsx', type: 'component' },\n { path: 'SettingsDrawer.tsx', type: 'component' },\n { path: 'ThemePreview.tsx', type: 'component' },\n { path: 'useSettings.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'framer-motion'],\n components: ['button', 'switch', 'select', 'icon-button'],\n blocks: [],\n },\n defaultConfig: {\n position: 'right',\n },\n },\n 'user-profile': {\n name: 'user-profile',\n version: '1.0.0',\n category: 'data',\n displayName: 'User Profile',\n description: 'User profile page with avatar, info, and settings',\n files: [\n { path: 'ProfilePage.tsx', type: 'component' },\n { path: 'ProfileHeader.tsx', type: 'component' },\n { path: 'ProfileTabs.tsx', type: 'component' },\n { path: 'AccountTab.tsx', type: 'component' },\n { path: 'SecurityTab.tsx', type: 'component' },\n { path: 'NotificationsTab.tsx', type: 'component' },\n { path: 'useProfile.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'react-hook-form'],\n components: ['avatar', 'button', 'tabs', 'card', 'text-field', 'switch'],\n blocks: [],\n },\n defaultConfig: {},\n },\n 'data-grid': {\n name: 'data-grid',\n version: '1.0.0',\n category: 'data',\n displayName: 'Data Grid',\n description: 'Advanced data grid with server-side features',\n files: [\n { path: 'DataGrid.tsx', type: 'component' },\n { path: 'DataGrid.types.ts', type: 'type' },\n { path: 'GridToolbar.tsx', type: 'component' },\n { path: 'GridFilters.tsx', type: 'component' },\n { path: 'GridExport.tsx', type: 'component' },\n { path: 'useDataGrid.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', '@tanstack/react-table', '@tanstack/react-virtual'],\n components: ['button', 'text-field', 'select', 'checkbox', 'menu', 'chip'],\n blocks: [],\n },\n defaultConfig: {\n pageSize: 25,\n enableColumnResize: true,\n enableColumnReorder: true,\n },\n },\n },\n themes: {},\n};\n","/**\n * Prism CLI - Add Command\n *\n * Add components or blocks to your project.\n *\n * @module @omnitron-dev/prism/cli/commands/add\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log } from '../constants.js';\nimport { loadConfig, getComponentPath, getBlockPath, type PrismConfig } from '../config.js';\nimport { defaultRegistrySchema } from '../../registry/index.js';\nimport type { ComponentDefinition } from '../../types/registry.js';\n\ninterface AddOptions {\n cwd?: string;\n yes?: boolean;\n overwrite?: boolean;\n all?: boolean;\n path?: string;\n install?: boolean;\n}\n\ninterface AddResult {\n name: string;\n success: boolean;\n error?: string;\n npmDeps?: string[];\n}\n\n/**\n * Create the add command.\n */\nexport function addCommand(): Command {\n const command = new Command('add');\n\n command\n .description('Add components or blocks to your project')\n .argument('[items...]', 'Components or blocks to add')\n .option('-y, --yes', 'Skip confirmation prompts')\n .option('-o, --overwrite', 'Overwrite existing files')\n .option('-a, --all', 'Add all available components')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('-p, --path <path>', 'Custom output path')\n .option('-i, --install', 'Auto-install npm dependencies')\n .action(async (items: string[], options: AddOptions) => {\n await runAdd(items, options);\n });\n\n return command;\n}\n\n/**\n * Run the add command.\n */\nasync function runAdd(items: string[], options: AddOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n log.error('No prism.config.json found. Run `prism init` first.');\n process.exit(1);\n }\n\n // Determine what to add\n let itemsToAdd: string[] = items;\n\n if (options.all) {\n itemsToAdd = [\n ...Object.keys(defaultRegistrySchema.components),\n ...Object.keys(defaultRegistrySchema.blocks).map((b) => `block:${b}`),\n ];\n }\n\n if (itemsToAdd.length === 0) {\n log.error('No items specified. Use `prism add <component>` or `prism add --all`');\n log.info('Run `prism list` to see available components.');\n process.exit(1);\n }\n\n console.log('');\n log.info(`Adding ${itemsToAdd.length} item(s)...`);\n console.log('');\n\n const results: AddResult[] = [];\n const allNpmDeps = new Set<string>();\n\n for (const item of itemsToAdd) {\n try {\n const result = await addItem(item, config, options);\n results.push(result);\n // Collect npm dependencies\n if (result.npmDeps) {\n for (const dep of result.npmDeps) {\n allNpmDeps.add(dep);\n }\n }\n } catch (error) {\n results.push({\n name: item,\n success: false,\n error: (error as Error).message,\n });\n }\n }\n\n // Summary\n console.log('');\n const successCount = results.filter((r) => r.success).length;\n const failCount = results.filter((r) => !r.success).length;\n\n if (successCount > 0) {\n log.success(`Added ${successCount} item(s) successfully.`);\n }\n if (failCount > 0) {\n log.error(`Failed to add ${failCount} item(s).`);\n for (const result of results.filter((r) => !r.success)) {\n log.muted(` - ${result.name}: ${result.error}`);\n }\n }\n\n // Display npm dependencies to install\n if (allNpmDeps.size > 0) {\n console.log('');\n log.info('Required npm dependencies:');\n const depsArray = Array.from(allNpmDeps).sort();\n for (const dep of depsArray) {\n log.muted(` - ${dep}`);\n }\n console.log('');\n log.info('Install with:');\n log.muted(` npm install ${depsArray.join(' ')}`);\n log.muted(` # or`);\n log.muted(` pnpm add ${depsArray.join(' ')}`);\n\n // Auto-install if requested\n if ((options.install || options.yes) && allNpmDeps.size > 0) {\n const pm = detectPackageManager(cwd);\n const installCmd = pm === 'pnpm' ? 'pnpm add' : pm === 'yarn' ? 'yarn add' : 'npm install';\n log.info(`Installing dependencies with ${pm}...`);\n try {\n const { execSync } = await import('node:child_process');\n execSync(`${installCmd} ${depsArray.join(' ')}`, {\n cwd,\n stdio: 'inherit',\n });\n log.success('Dependencies installed successfully.');\n } catch {\n log.warning('Auto-install failed. Please install dependencies manually.');\n }\n }\n }\n console.log('');\n}\n\n/**\n * Detect the package manager used in the project.\n */\nfunction detectPackageManager(cwd: string): 'pnpm' | 'yarn' | 'npm' {\n if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (fs.existsSync(path.join(cwd, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\n/**\n * Add a single item (component or block).\n */\nasync function addItem(item: string, config: PrismConfig, options: AddOptions): Promise<AddResult> {\n // Check if it's a block (prefixed with \"block:\")\n const isBlock = item.startsWith('block:');\n const itemName = isBlock ? item.slice(6) : item;\n\n // Look up the item in the registry\n const registry = isBlock ? defaultRegistrySchema.blocks : defaultRegistrySchema.components;\n\n const definition = registry[itemName] as ComponentDefinition | undefined;\n if (!definition) {\n return {\n name: item,\n success: false,\n error: `Not found in registry. Run 'prism list' to see available items.`,\n };\n }\n\n // Determine output path\n const outputPath = options.path\n ? path.join(config.rootDir, options.path, itemName)\n : isBlock\n ? getBlockPath(itemName, config)\n : getComponentPath(itemName, config);\n\n // Check if already exists\n if (fs.existsSync(outputPath) && !options.overwrite) {\n return {\n name: item,\n success: false,\n error: `Already exists at ${path.relative(config.rootDir, outputPath)}. Use --overwrite to replace.`,\n };\n }\n\n // Create directory\n await fs.promises.mkdir(outputPath, { recursive: true });\n\n // Generate files based on registry definition\n for (const file of definition.files) {\n const filePath = path.join(outputPath, file.path);\n const content = generateFileContent(itemName, file.path, file.type, definition, isBlock);\n await fs.promises.writeFile(filePath, content, 'utf-8');\n }\n\n log.success(`Added ${itemName} → ${path.relative(config.rootDir, outputPath)}/`);\n\n // Update lockfile\n await updateLockfile(config.rootDir, itemName, definition.version, isBlock);\n\n // Collect npm dependencies\n const npmDeps: string[] = [];\n if ('dependencies' in definition && definition.dependencies?.npm) {\n npmDeps.push(...definition.dependencies.npm);\n }\n\n return { name: item, success: true, npmDeps };\n}\n\n/**\n * Update the lockfile after adding an item.\n */\nasync function updateLockfile(rootDir: string, name: string, version: string, isBlock: boolean): Promise<void> {\n const lockfilePath = path.join(rootDir, 'prism.lock.json');\n\n let lockfile: {\n version: string;\n components: Record<string, { name: string; version: string; installedAt: string }>;\n blocks: Record<string, { name: string; version: string; installedAt: string }>;\n } = {\n version: '1',\n components: {},\n blocks: {},\n };\n\n // Load existing lockfile if present\n if (fs.existsSync(lockfilePath)) {\n try {\n lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n } catch {\n // Use default lockfile on parse error\n }\n }\n\n // Add the new item\n const entry = {\n name,\n version,\n installedAt: new Date().toISOString(),\n };\n\n if (isBlock) {\n lockfile.blocks[name] = entry;\n } else {\n lockfile.components[name] = entry;\n }\n\n // Write lockfile\n await fs.promises.writeFile(lockfilePath, JSON.stringify(lockfile, null, 2) + '\\n', 'utf-8');\n}\n\n// =============================================================================\n// TEMPLATE GENERATORS\n// =============================================================================\n\n/**\n * Convert kebab-case to PascalCase.\n */\nexport function toPascalCase(name: string): string {\n return name\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\n/**\n * Convert kebab-case to camelCase.\n */\nfunction toCamelCase(name: string): string {\n const pascal = toPascalCase(name);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Generate file content based on type.\n */\nexport function generateFileContent(\n name: string,\n fileName: string,\n fileType: string,\n definition: ComponentDefinition,\n isBlock: boolean\n): string {\n const pascalName = toPascalCase(name);\n const camelName = toCamelCase(name);\n\n // Barrel export (index.ts)\n if (fileName === 'index.ts') {\n return generateBarrelExport(definition, pascalName);\n }\n\n // Type definitions\n if (fileType === 'types' || fileName.endsWith('.types.ts')) {\n return generateTypeDefinitions(name, pascalName, definition);\n }\n\n // Hook file\n if (fileType === 'hook' || fileName.startsWith('use')) {\n const hookName = fileName.replace('.ts', '');\n return generateHook(hookName, pascalName, definition, isBlock);\n }\n\n // Schema file (for forms)\n if (fileType === 'schema' || fileName.endsWith('.schema.ts')) {\n return generateSchema(name, pascalName, definition);\n }\n\n // Component file\n return generateComponent(name, pascalName, camelName, fileName, definition, isBlock);\n}\n\n/**\n * Generate barrel export file.\n */\nfunction generateBarrelExport(definition: ComponentDefinition, pascalName: string): string {\n const exports: string[] = [];\n\n for (const file of definition.files) {\n if (file.path === 'index.ts') continue;\n\n const moduleName = file.path.replace(/\\.tsx?$/, '.js');\n\n if (file.type === 'types' || file.path.endsWith('.types.ts')) {\n exports.push(`export type * from './${moduleName}';`);\n } else {\n exports.push(`export * from './${moduleName}';`);\n }\n }\n\n return `/**\n * ${definition.displayName || pascalName}\n *\n * ${definition.description || ''}\n *\n * @module @omnitron-dev/prism/components/${definition.name}\n */\n\n${exports.join('\\n')}\n`;\n}\n\n/**\n * Generate TypeScript type definitions.\n */\nfunction generateTypeDefinitions(name: string, pascalName: string, definition: ComponentDefinition): string {\n const muiComponent = getMuiComponent(name);\n\n return `/**\n * ${pascalName} Type Definitions\n *\n * @module @omnitron-dev/prism/components/${name}\n */\n\nimport type { ${muiComponent}Props as Mui${muiComponent}Props } from '@mui/material/${muiComponent}';\n\n/**\n * Props for the ${pascalName} component.\n * Extends MUI ${muiComponent} with Prism-specific options.\n */\nexport interface ${pascalName}Props extends Mui${muiComponent}Props {\n /**\n * Additional CSS class name.\n */\n className?: string;\n}\n\n/**\n * Ref type for ${pascalName} component.\n */\nexport type ${pascalName}Ref = HTMLDivElement;\n`;\n}\n\n/**\n * Generate React hook.\n */\nfunction generateHook(hookName: string, pascalName: string, definition: ComponentDefinition, isBlock: boolean): string {\n const camelHook = toCamelCase(hookName);\n\n if (isBlock) {\n return generateBlockHook(hookName, pascalName, definition);\n }\n\n return `/**\n * ${hookName} Hook\n *\n * Custom hook for ${definition.displayName || pascalName} component logic.\n *\n * @module @omnitron-dev/prism/components/${definition.name}\n */\n\nimport { useState, useCallback, useMemo } from 'react';\n\n/**\n * Options for ${camelHook} hook.\n */\nexport interface ${toPascalCase(hookName)}Options {\n /**\n * Initial state value.\n */\n initialValue?: boolean;\n}\n\n/**\n * Return type for ${camelHook} hook.\n */\nexport interface ${toPascalCase(hookName)}Return {\n /**\n * Current state value.\n */\n value: boolean;\n /**\n * Set value to true.\n */\n onOpen: () => void;\n /**\n * Set value to false.\n */\n onClose: () => void;\n /**\n * Toggle the value.\n */\n onToggle: () => void;\n}\n\n/**\n * Hook for managing ${definition.displayName || pascalName} state.\n *\n * @param options - Hook options\n * @returns State and handlers\n *\n * @example\n * \\`\\`\\`tsx\n * function Example() {\n * const { value, onOpen, onClose, onToggle } = ${camelHook}();\n *\n * return (\n * <button onClick={onToggle}>\n * {value ? 'Open' : 'Closed'}\n * </button>\n * );\n * }\n * \\`\\`\\`\n */\nexport function ${camelHook}(options: ${toPascalCase(hookName)}Options = {}): ${toPascalCase(hookName)}Return {\n const { initialValue = false } = options;\n\n const [value, setValue] = useState(initialValue);\n\n const onOpen = useCallback(() => setValue(true), []);\n const onClose = useCallback(() => setValue(false), []);\n const onToggle = useCallback(() => setValue((prev) => !prev), []);\n\n return useMemo(\n () => ({ value, onOpen, onClose, onToggle }),\n [value, onOpen, onClose, onToggle]\n );\n}\n`;\n}\n\n/**\n * Generate block-specific hook.\n */\nfunction generateBlockHook(hookName: string, pascalName: string, definition: ComponentDefinition): string {\n const camelHook = toCamelCase(hookName);\n\n return `/**\n * ${hookName} Hook\n *\n * State management hook for ${definition.displayName || pascalName} block.\n *\n * @module @omnitron-dev/prism/blocks/${definition.name}\n */\n\nimport { useState, useCallback, useMemo, useContext, createContext } from 'react';\nimport type { ReactNode } from 'react';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * State for ${pascalName} block.\n */\nexport interface ${pascalName}State {\n /**\n * Whether the sidebar/panel is open.\n */\n isOpen: boolean;\n /**\n * Whether the sidebar/panel is collapsed.\n */\n isCollapsed: boolean;\n}\n\n/**\n * Actions for ${pascalName} block.\n */\nexport interface ${pascalName}Actions {\n /**\n * Open the sidebar/panel.\n */\n open: () => void;\n /**\n * Close the sidebar/panel.\n */\n close: () => void;\n /**\n * Toggle open state.\n */\n toggle: () => void;\n /**\n * Collapse the sidebar.\n */\n collapse: () => void;\n /**\n * Expand the sidebar.\n */\n expand: () => void;\n /**\n * Toggle collapsed state.\n */\n toggleCollapse: () => void;\n}\n\n/**\n * Context value for ${pascalName}.\n */\nexport interface ${pascalName}ContextValue extends ${pascalName}State, ${pascalName}Actions {}\n\n/**\n * Options for ${camelHook} hook.\n */\nexport interface ${toPascalCase(hookName)}Options {\n /**\n * Initial open state.\n */\n defaultOpen?: boolean;\n /**\n * Initial collapsed state.\n */\n defaultCollapsed?: boolean;\n}\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst ${pascalName}Context = createContext<${pascalName}ContextValue | null>(null);\n\n/**\n * Provider props.\n */\nexport interface ${pascalName}ProviderProps extends ${toPascalCase(hookName)}Options {\n children: ReactNode;\n}\n\n/**\n * Provider component for ${pascalName} context.\n */\nexport function ${pascalName}Provider({\n children,\n defaultOpen = true,\n defaultCollapsed = false,\n}: ${pascalName}ProviderProps) {\n const value = ${camelHook}({ defaultOpen, defaultCollapsed });\n\n return (\n <${pascalName}Context.Provider value={value}>\n {children}\n </${pascalName}Context.Provider>\n );\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\n/**\n * Hook for managing ${definition.displayName || pascalName} state.\n *\n * @param options - Hook options\n * @returns State and actions\n *\n * @example\n * \\`\\`\\`tsx\n * function ${pascalName}() {\n * const { isOpen, isCollapsed, toggle, toggleCollapse } = ${camelHook}();\n *\n * return (\n * <div>\n * <button onClick={toggle}>Toggle Open</button>\n * <button onClick={toggleCollapse}>Toggle Collapse</button>\n * </div>\n * );\n * }\n * \\`\\`\\`\n */\nexport function ${camelHook}(\n options: ${toPascalCase(hookName)}Options = {}\n): ${pascalName}ContextValue {\n const context = useContext(${pascalName}Context);\n\n const { defaultOpen = true, defaultCollapsed = false } = options;\n\n const [isOpen, setIsOpen] = useState(context?.isOpen ?? defaultOpen);\n const [isCollapsed, setIsCollapsed] = useState(context?.isCollapsed ?? defaultCollapsed);\n\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((prev) => !prev), []);\n\n const collapse = useCallback(() => setIsCollapsed(true), []);\n const expand = useCallback(() => setIsCollapsed(false), []);\n const toggleCollapse = useCallback(() => setIsCollapsed((prev) => !prev), []);\n\n return useMemo(\n () => ({\n isOpen,\n isCollapsed,\n open,\n close,\n toggle,\n collapse,\n expand,\n toggleCollapse,\n }),\n [isOpen, isCollapsed, open, close, toggle, collapse, expand, toggleCollapse]\n );\n}\n\n/**\n * Hook to consume ${pascalName} context.\n * Must be used within a ${pascalName}Provider.\n */\nexport function use${pascalName}Context(): ${pascalName}ContextValue {\n const context = useContext(${pascalName}Context);\n\n if (!context) {\n throw new Error('use${pascalName}Context must be used within a ${pascalName}Provider');\n }\n\n return context;\n}\n`;\n}\n\n/**\n * Generate Zod schema for forms.\n */\nfunction generateSchema(name: string, pascalName: string, definition: ComponentDefinition): string {\n return `/**\n * ${pascalName} Schema\n *\n * Zod validation schemas for ${definition.displayName || pascalName} forms.\n *\n * @module @omnitron-dev/prism/blocks/${definition.name}\n */\n\nimport { z } from 'zod';\n\n/**\n * Login form schema.\n */\nexport const loginSchema = z.object({\n email: z\n .string()\n .min(1, 'Email is required')\n .email('Invalid email address'),\n password: z\n .string()\n .min(1, 'Password is required')\n .min(8, 'Password must be at least 8 characters'),\n rememberMe: z.boolean().optional(),\n});\n\n/**\n * Login form values type.\n */\nexport type LoginFormValues = z.infer<typeof loginSchema>;\n\n/**\n * Register form schema.\n */\nexport const registerSchema = z\n .object({\n firstName: z.string().min(1, 'First name is required'),\n lastName: z.string().min(1, 'Last name is required'),\n email: z\n .string()\n .min(1, 'Email is required')\n .email('Invalid email address'),\n password: z\n .string()\n .min(1, 'Password is required')\n .min(8, 'Password must be at least 8 characters'),\n confirmPassword: z.string().min(1, 'Please confirm your password'),\n acceptTerms: z.literal(true, {\n errorMap: () => ({ message: 'You must accept the terms' }),\n }),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n });\n\n/**\n * Register form values type.\n */\nexport type RegisterFormValues = z.infer<typeof registerSchema>;\n\n/**\n * Forgot password form schema.\n */\nexport const forgotPasswordSchema = z.object({\n email: z\n .string()\n .min(1, 'Email is required')\n .email('Invalid email address'),\n});\n\n/**\n * Forgot password form values type.\n */\nexport type ForgotPasswordFormValues = z.infer<typeof forgotPasswordSchema>;\n\n/**\n * Verify code form schema.\n */\nexport const verifyCodeSchema = z.object({\n code: z\n .string()\n .min(1, 'Code is required')\n .length(6, 'Code must be 6 digits'),\n});\n\n/**\n * Verify code form values type.\n */\nexport type VerifyCodeFormValues = z.infer<typeof verifyCodeSchema>;\n`;\n}\n\n/**\n * Generate React component.\n */\nfunction generateComponent(\n name: string,\n pascalName: string,\n camelName: string,\n fileName: string,\n definition: ComponentDefinition,\n isBlock: boolean\n): string {\n const componentName = fileName.replace(/\\.tsx$/, '');\n const componentPascal = toPascalCase(componentName.replace(pascalName, '')) || pascalName;\n const muiComponent = getMuiComponent(name);\n\n if (isBlock) {\n return generateBlockComponent(name, componentName, componentPascal, definition);\n }\n\n return `'use client';\n\n/**\n * ${componentPascal} Component\n *\n * ${definition.description || ''}\n *\n * @module @omnitron-dev/prism/components/${definition.name}\n * @see https://mui.com/material-ui/react-${name}/\n */\n\nimport { forwardRef } from 'react';\nimport Mui${muiComponent} from '@mui/material/${muiComponent}';\nimport type { ${muiComponent}Props as Mui${muiComponent}Props } from '@mui/material/${muiComponent}';\nimport { clsx } from 'clsx';\n\n/**\n * Props for the ${componentPascal} component.\n */\nexport interface ${componentPascal}Props extends Mui${muiComponent}Props {\n /**\n * Additional CSS class name.\n */\n className?: string;\n}\n\n/**\n * ${definition.displayName || componentPascal} component.\n *\n * A wrapper around MUI ${muiComponent} with Prism design system styling.\n *\n * @example\n * \\`\\`\\`tsx\n * <${componentPascal} variant=\"contained\" color=\"primary\">\n * Click me\n * </${componentPascal}>\n * \\`\\`\\`\n */\nexport const ${componentPascal} = forwardRef<HTMLButtonElement, ${componentPascal}Props>(\n function ${componentPascal}({ className, ...props }, ref) {\n return (\n <Mui${muiComponent}\n ref={ref}\n className={clsx('prism-${name}', className)}\n {...props}\n />\n );\n }\n);\n\n${componentPascal}.displayName = '${componentPascal}';\n`;\n}\n\n/**\n * Generate block component.\n */\nfunction generateBlockComponent(\n name: string,\n componentName: string,\n componentPascal: string,\n definition: ComponentDefinition\n): string {\n return `'use client';\n\n/**\n * ${componentPascal} Component\n *\n * ${definition.description || ''}\n *\n * @module @omnitron-dev/prism/blocks/${definition.name}\n */\n\nimport { forwardRef } from 'react';\nimport type { ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport type { BoxProps } from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\nimport { clsx } from 'clsx';\n\n/**\n * Props for the ${componentPascal} component.\n */\nexport interface ${componentPascal}Props extends Omit<BoxProps, 'children'> {\n /**\n * Content to render inside the component.\n */\n children?: ReactNode;\n /**\n * Additional CSS class name.\n */\n className?: string;\n}\n\n/**\n * Styled root component.\n */\nconst ${componentPascal}Root = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n backgroundColor: theme.palette.background.default,\n}));\n\n/**\n * ${definition.displayName || componentPascal} component.\n *\n * @example\n * \\`\\`\\`tsx\n * <${componentPascal}>\n * <Header />\n * <Sidebar />\n * <Main />\n * </${componentPascal}>\n * \\`\\`\\`\n */\nexport const ${componentPascal} = forwardRef<HTMLDivElement, ${componentPascal}Props>(\n function ${componentPascal}({ className, children, ...props }, ref) {\n return (\n <${componentPascal}Root\n ref={ref}\n className={clsx('prism-${name}', className)}\n {...props}\n >\n {children}\n </${componentPascal}Root>\n );\n }\n);\n\n${componentPascal}.displayName = '${componentPascal}';\n`;\n}\n\n/**\n * Get the MUI component name for a Prism component.\n */\nfunction getMuiComponent(name: string): string {\n const mapping: Record<string, string> = {\n button: 'Button',\n 'icon-button': 'IconButton',\n 'text-field': 'TextField',\n select: 'Select',\n checkbox: 'Checkbox',\n switch: 'Switch',\n avatar: 'Avatar',\n badge: 'Badge',\n chip: 'Chip',\n tooltip: 'Tooltip',\n alert: 'Alert',\n snackbar: 'Snackbar',\n dialog: 'Dialog',\n progress: 'CircularProgress',\n card: 'Card',\n paper: 'Paper',\n accordion: 'Accordion',\n tabs: 'Tabs',\n breadcrumbs: 'Breadcrumbs',\n menu: 'Menu',\n stack: 'Stack',\n grid: 'Grid',\n container: 'Container',\n divider: 'Divider',\n 'data-table': 'Table',\n table: 'Table',\n list: 'List',\n };\n\n return mapping[name] || toPascalCase(name);\n}\n","/**\n * Prism CLI\n *\n * Command-line interface for the Prism design system.\n * Provides shadcn/ui-style component installation and management.\n *\n * @module @omnitron-dev/prism/cli\n */\n\nimport { Command } from 'commander';\nimport { addCommand } from './commands/add.js';\nimport { initCommand } from './commands/init.js';\nimport { listCommand } from './commands/list.js';\nimport { diffCommand } from './commands/diff.js';\nimport { updateCommand } from './commands/update.js';\nimport { removeCommand } from './commands/remove.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { PRISM_VERSION } from './constants.js';\n\n/**\n * Create and configure the Prism CLI.\n */\nexport function createCli(): Command {\n const program = new Command();\n\n program\n .name('prism')\n .description('Prism Design System CLI - Component installation and management')\n .version(PRISM_VERSION, '-v, --version', 'Display the current version');\n\n // Add commands\n program.addCommand(initCommand());\n program.addCommand(addCommand());\n program.addCommand(removeCommand());\n program.addCommand(listCommand());\n program.addCommand(diffCommand());\n program.addCommand(updateCommand());\n program.addCommand(doctorCommand());\n\n return program;\n}\n\n/**\n * Run the CLI with process arguments.\n */\nexport async function cli(): Promise<void> {\n const program = createCli();\n await program.parseAsync(process.argv);\n}\n\n// Export for programmatic use\nexport { addCommand } from './commands/add.js';\nexport { removeCommand } from './commands/remove.js';\nexport { initCommand } from './commands/init.js';\nexport { listCommand } from './commands/list.js';\nexport { diffCommand } from './commands/diff.js';\nexport { updateCommand } from './commands/update.js';\nexport { doctorCommand } from './commands/doctor.js';\nexport { PRISM_VERSION, DEFAULT_CONFIG } from './constants.js';\nexport type { PrismConfig, PrismConfigSchema } from './config.js';\n","/**\n * Prism CLI - Init Command\n *\n * Initialize a new Prism project with configuration.\n *\n * @module @omnitron-dev/prism/cli/commands/init\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as readline from 'node:readline';\nimport {\n CONFIG_FILE_NAME,\n DEFAULT_CONFIG,\n DEFAULT_COMPONENTS_DIR,\n DEFAULT_BLOCKS_DIR,\n DEFAULT_HOOKS_DIR,\n DEFAULT_UTILS_DIR,\n log,\n} from '../constants.js';\nimport { findConfigFile, saveConfig, type PrismConfigSchema } from '../config.js';\n\n/**\n * Prompt user for input.\n */\nasync function prompt(question: string, defaultValue?: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const displayQuestion = defaultValue ? `${question} (${defaultValue}): ` : `${question}: `;\n\n rl.question(displayQuestion, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultValue || '');\n });\n });\n}\n\n/**\n * Prompt user for yes/no confirmation.\n */\nasync function confirm(question: string, defaultValue: boolean = true): Promise<boolean> {\n const hint = defaultValue ? '(Y/n)' : '(y/N)';\n const answer = await prompt(`${question} ${hint}`);\n\n if (!answer) {\n return defaultValue;\n }\n\n return ['y', 'yes', 'да'].includes(answer.toLowerCase());\n}\n\ninterface InitOptions {\n yes?: boolean;\n defaults?: boolean;\n cwd?: string;\n}\n\n/**\n * Create the init command.\n */\nexport function initCommand(): Command {\n const command = new Command('init');\n\n command\n .description('Initialize Prism in your project')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('-d, --defaults', 'Use default configuration')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (options: InitOptions) => {\n await runInit(options);\n });\n\n return command;\n}\n\n/**\n * Run the init command.\n */\nasync function runInit(options: InitOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n console.log('');\n log.info('Initializing Prism...');\n console.log('');\n\n // Check for existing config\n const existingConfig = findConfigFile(cwd);\n if (existingConfig) {\n log.warning(`Config already exists at ${existingConfig}`);\n const overwrite = options.yes || (await confirm('Overwrite existing configuration?', false));\n if (!overwrite) {\n log.info('Initialization cancelled.');\n return;\n }\n }\n\n let config: PrismConfigSchema;\n\n if (options.yes || options.defaults) {\n // Use defaults\n config = { ...DEFAULT_CONFIG };\n } else {\n // Interactive prompts\n config = await interactiveInit(cwd);\n }\n\n // Create directories\n const dirs = [\n path.join(cwd, DEFAULT_COMPONENTS_DIR),\n path.join(cwd, DEFAULT_BLOCKS_DIR),\n path.join(cwd, DEFAULT_HOOKS_DIR),\n path.join(cwd, DEFAULT_UTILS_DIR),\n ];\n\n for (const dir of dirs) {\n if (!fs.existsSync(dir)) {\n await fs.promises.mkdir(dir, { recursive: true });\n log.success(`Created ${path.relative(cwd, dir)}/`);\n }\n }\n\n // Save config\n const configPath = path.join(cwd, CONFIG_FILE_NAME);\n await saveConfig(config, configPath);\n log.success(`Created ${CONFIG_FILE_NAME}`);\n\n console.log('');\n log.success('Prism initialized successfully!');\n console.log('');\n log.info('Next steps:');\n console.log(' 1. Run `prism add button` to add your first component');\n console.log(' 2. Run `prism list` to see available components');\n console.log(' 3. Visit https://prism.omnitron.dev/docs for documentation');\n console.log('');\n}\n\n/**\n * Interactive initialization with prompts.\n */\nasync function interactiveInit(cwd: string): Promise<PrismConfigSchema> {\n console.log('This will guide you through configuring Prism for your project.\\n');\n\n // Style\n const styleAnswer = await prompt('Which style would you like to use? (default/new-york)', 'default');\n const style = styleAnswer === 'new-york' ? 'new-york' : 'default';\n\n // Components alias\n const componentsAlias = await prompt('Where should components be installed?', '@/components/ui');\n\n // Blocks alias\n const blocksAlias = await prompt('Where should blocks be installed?', '@/blocks');\n\n // Hooks alias\n const hooksAlias = await prompt('Where should hooks be installed?', '@/hooks');\n\n // Utils alias\n const utilsAlias = await prompt('Where should utils be installed?', '@/utils');\n\n // Check for Tailwind config\n const tailwindConfigPath = path.join(cwd, 'tailwind.config.js');\n const tailwindTsConfigPath = path.join(cwd, 'tailwind.config.ts');\n const hasTailwind = fs.existsSync(tailwindConfigPath) || fs.existsSync(tailwindTsConfigPath);\n\n let tailwindConfig: PrismConfigSchema['tailwind'];\n\n if (hasTailwind) {\n const useTailwind = await confirm('Tailwind CSS detected. Configure CSS variables?', true);\n if (useTailwind) {\n const cssFile = await prompt('Where is your global CSS file?', 'src/index.css');\n const baseColor = await prompt('What base color would you like?', 'slate');\n\n tailwindConfig = {\n config: fs.existsSync(tailwindTsConfigPath) ? 'tailwind.config.ts' : 'tailwind.config.js',\n css: cssFile,\n baseColor,\n cssVariables: true,\n };\n }\n }\n\n return {\n $schema: 'https://prism.omnitron.dev/schema.json',\n style,\n tailwind: tailwindConfig,\n aliases: {\n components: componentsAlias,\n blocks: blocksAlias,\n hooks: hooksAlias,\n utils: utilsAlias,\n },\n registries: DEFAULT_CONFIG.registries,\n };\n}\n","/**\n * Prism CLI - List Command\n *\n * List available components and blocks from the registry.\n *\n * @module @omnitron-dev/prism/cli/commands/list\n */\n\nimport { Command } from 'commander';\nimport { COLORS, log, COMPONENT_CATEGORIES, BLOCK_CATEGORIES } from '../constants.js';\nimport { defaultRegistrySchema } from '../../registry/index.js';\n\ninterface ListOptions {\n components?: boolean;\n blocks?: boolean;\n category?: string;\n json?: boolean;\n}\n\n/**\n * Create the list command.\n */\nexport function listCommand(): Command {\n const command = new Command('list');\n\n command\n .description('List available components and blocks')\n .option('-c, --components', 'List only components')\n .option('-b, --blocks', 'List only blocks')\n .option('--category <category>', 'Filter by category')\n .option('--json', 'Output as JSON')\n .action(async (options: ListOptions) => {\n await runList(options);\n });\n\n return command;\n}\n\n/**\n * Run the list command.\n */\nasync function runList(options: ListOptions): Promise<void> {\n const showComponents = options.components || (!options.components && !options.blocks);\n const showBlocks = options.blocks || (!options.components && !options.blocks);\n\n if (options.json) {\n const output = {\n ...(showComponents && { components: defaultRegistrySchema.components }),\n ...(showBlocks && { blocks: defaultRegistrySchema.blocks }),\n };\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n\n console.log('');\n\n if (showComponents) {\n log.info('Available Components:');\n console.log('');\n listItems(defaultRegistrySchema.components, options.category, COMPONENT_CATEGORIES);\n }\n\n if (showBlocks) {\n if (showComponents) console.log('');\n log.info('Available Blocks:');\n console.log('');\n listItems(defaultRegistrySchema.blocks, options.category, BLOCK_CATEGORIES);\n }\n\n console.log('');\n log.muted('Use `prism add <name>` to add a component to your project.');\n log.muted('Use `prism add block:<name>` to add a block to your project.');\n console.log('');\n}\n\n/**\n * List items grouped by category.\n */\nfunction listItems(\n items: Record<string, { name: string; displayName?: string; category: string; description?: string }>,\n filterCategory: string | undefined,\n categoryOrder: readonly string[]\n): void {\n // Group by category\n const byCategory: Record<string, (typeof items)[string][]> = {};\n\n for (const item of Object.values(items)) {\n if (filterCategory && item.category !== filterCategory) {\n continue;\n }\n\n if (!byCategory[item.category]) {\n byCategory[item.category] = [];\n }\n byCategory[item.category].push(item);\n }\n\n // Sort categories\n const sortedCategories = Object.keys(byCategory).sort((a, b) => {\n const aIndex = categoryOrder.indexOf(a as (typeof categoryOrder)[number]);\n const bIndex = categoryOrder.indexOf(b as (typeof categoryOrder)[number]);\n if (aIndex === -1 && bIndex === -1) return a.localeCompare(b);\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n return aIndex - bIndex;\n });\n\n for (const category of sortedCategories) {\n const categoryItems = byCategory[category];\n const categoryTitle = category\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n\n console.log(` ${COLORS.primary}${categoryTitle}${COLORS.reset}`);\n\n for (const item of categoryItems.sort((a, b) => a.name.localeCompare(b.name))) {\n const displayName = item.displayName || item.name;\n const description = item.description ? ` - ${item.description}` : '';\n console.log(\n ` ${COLORS.muted}•${COLORS.reset} ${item.name} ${COLORS.muted}(${displayName})${description}${COLORS.reset}`\n );\n }\n\n console.log('');\n }\n}\n","/**\n * Prism CLI - Diff Command\n *\n * Show differences between local and registry versions.\n *\n * @module @omnitron-dev/prism/cli/commands/diff\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log, COLORS } from '../constants.js';\nimport { loadConfig, getComponentPath, getBlockPath, type PrismConfig } from '../config.js';\nimport { defaultRegistrySchema } from '../../registry/index.js';\n\ninterface DiffOptions {\n cwd?: string;\n}\n\n/**\n * Create the diff command.\n */\nexport function diffCommand(): Command {\n const command = new Command('diff');\n\n command\n .description('Show differences between local and registry versions')\n .argument('[items...]', 'Components or blocks to diff (default: all installed)')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (items: string[], options: DiffOptions) => {\n await runDiff(items, options);\n });\n\n return command;\n}\n\n/**\n * Run the diff command.\n */\nasync function runDiff(items: string[], options: DiffOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n log.error('No prism.config.json found. Run `prism init` first.');\n process.exit(1);\n }\n\n console.log('');\n log.info('Checking for updates...');\n console.log('');\n\n // Find installed items\n const installedItems = await findInstalledItems(config, items);\n\n if (installedItems.length === 0) {\n log.info('No Prism components or blocks found in your project.');\n log.muted('Run `prism add <component>` to add components.');\n return;\n }\n\n // Check each item\n const diffs: { name: string; status: 'up-to-date' | 'outdated' | 'modified' | 'unknown' }[] = [];\n\n for (const item of installedItems) {\n const status = await checkItemStatus(item, config);\n diffs.push({ name: item.name, status });\n }\n\n // Display results\n const upToDate = diffs.filter((d) => d.status === 'up-to-date');\n const outdated = diffs.filter((d) => d.status === 'outdated');\n const modified = diffs.filter((d) => d.status === 'modified');\n const unknown = diffs.filter((d) => d.status === 'unknown');\n\n if (upToDate.length > 0) {\n console.log(`${COLORS.success}Up to date (${upToDate.length}):${COLORS.reset}`);\n for (const item of upToDate) {\n console.log(` ${COLORS.muted}✓${COLORS.reset} ${item.name}`);\n }\n console.log('');\n }\n\n if (modified.length > 0) {\n console.log(`${COLORS.warning}Modified locally (${modified.length}):${COLORS.reset}`);\n for (const item of modified) {\n console.log(` ${COLORS.warning}~${COLORS.reset} ${item.name}`);\n }\n console.log('');\n log.muted('Modified items have local changes. Use --overwrite with update to replace.');\n }\n\n if (outdated.length > 0) {\n console.log(`${COLORS.primary}Updates available (${outdated.length}):${COLORS.reset}`);\n for (const item of outdated) {\n console.log(` ${COLORS.primary}↑${COLORS.reset} ${item.name}`);\n }\n console.log('');\n log.info('Run `prism update` to update outdated components.');\n }\n\n if (unknown.length > 0) {\n console.log(`${COLORS.muted}Unknown (${unknown.length}):${COLORS.reset}`);\n for (const item of unknown) {\n console.log(` ${COLORS.muted}?${COLORS.reset} ${item.name}`);\n }\n console.log('');\n }\n\n console.log('');\n}\n\ninterface InstalledItem {\n name: string;\n type: 'component' | 'block';\n path: string;\n}\n\n/**\n * Find installed Prism items.\n */\nasync function findInstalledItems(config: PrismConfig, filterItems: string[]): Promise<InstalledItem[]> {\n const items: InstalledItem[] = [];\n\n // Check components directory\n const componentsDir = getComponentPath('', config);\n if (fs.existsSync(componentsDir)) {\n const entries = await fs.promises.readdir(componentsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const name = entry.name;\n if (filterItems.length === 0 || filterItems.includes(name)) {\n items.push({\n name,\n type: 'component',\n path: path.join(componentsDir, name),\n });\n }\n }\n }\n }\n\n // Check blocks directory\n const blocksDir = getBlockPath('', config);\n if (fs.existsSync(blocksDir)) {\n const entries = await fs.promises.readdir(blocksDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const name = entry.name;\n if (filterItems.length === 0 || filterItems.includes(name) || filterItems.includes(`block:${name}`)) {\n items.push({\n name,\n type: 'block',\n path: path.join(blocksDir, name),\n });\n }\n }\n }\n }\n\n return items;\n}\n\n/**\n * Check the status of an installed item.\n */\nasync function checkItemStatus(\n item: InstalledItem,\n config: PrismConfig\n): Promise<'up-to-date' | 'outdated' | 'modified' | 'unknown'> {\n // Look up in registry\n const registry = item.type === 'block' ? defaultRegistrySchema.blocks : defaultRegistrySchema.components;\n\n const definition = registry[item.name];\n\n if (!definition) {\n return 'unknown';\n }\n\n // Check for prism.lock.json file to get installed version info\n const lockfilePath = path.join(config.rootDir, 'prism.lock.json');\n let installedVersion: string | undefined;\n\n if (fs.existsSync(lockfilePath)) {\n try {\n const lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n const installed = item.type === 'block' ? lockfile.blocks?.[item.name] : lockfile.components?.[item.name];\n installedVersion = installed?.version;\n } catch {\n // Ignore lockfile errors\n }\n }\n\n // Compare versions\n if (installedVersion && installedVersion !== definition.version) {\n return 'outdated';\n }\n\n // Check if any files were modified by hashing\n const hasModifications = await checkForLocalModifications(item, definition, config);\n\n if (hasModifications) {\n return 'modified';\n }\n\n return 'up-to-date';\n}\n\n/**\n * Check if local files have been modified from the generated templates.\n */\nasync function checkForLocalModifications(\n item: InstalledItem,\n definition: { files: Array<{ path: string }> },\n _config: PrismConfig\n): Promise<boolean> {\n // Check if all expected files exist\n for (const file of definition.files) {\n const filePath = path.join(item.path, file.path);\n if (!fs.existsSync(filePath)) {\n // Missing file = modified (user deleted it)\n return true;\n }\n }\n\n // Check for extra files that weren't in the template\n const localFiles = await fs.promises.readdir(item.path);\n const expectedFiles = new Set(definition.files.map((f) => f.path));\n\n for (const localFile of localFiles) {\n // Ignore common non-generated files\n if (localFile.startsWith('.') || localFile === 'node_modules') {\n continue;\n }\n if (!expectedFiles.has(localFile)) {\n // Extra file added by user\n return true;\n }\n }\n\n return false;\n}\n","/**\n * Prism CLI - Update Command\n *\n * Update installed components and blocks to latest versions.\n *\n * @module @omnitron-dev/prism/cli/commands/update\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log } from '../constants.js';\nimport { loadConfig, getComponentPath, getBlockPath, type PrismConfig } from '../config.js';\nimport { defaultRegistrySchema } from '../../registry/index.js';\n\ninterface UpdateOptions {\n cwd?: string;\n yes?: boolean;\n overwrite?: boolean;\n all?: boolean;\n}\n\n/**\n * Create the update command.\n */\nexport function updateCommand(): Command {\n const command = new Command('update');\n\n command\n .description('Update installed components and blocks')\n .argument('[items...]', 'Components or blocks to update (default: all installed)')\n .option('-y, --yes', 'Skip confirmation prompts')\n .option('-o, --overwrite', 'Overwrite modified files')\n .option('-a, --all', 'Update all installed items')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (items: string[], options: UpdateOptions) => {\n await runUpdate(items, options);\n });\n\n return command;\n}\n\n/**\n * Run the update command.\n */\nasync function runUpdate(items: string[], options: UpdateOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n log.error('No prism.config.json found. Run `prism init` first.');\n process.exit(1);\n }\n\n console.log('');\n log.info('Checking for updates...');\n console.log('');\n\n // Find installed items\n const installedItems = await findInstalledItems(config, items, options.all);\n\n if (installedItems.length === 0) {\n log.info('No Prism components or blocks found to update.');\n return;\n }\n\n // Check for updates\n const toUpdate: { name: string; type: 'component' | 'block'; path: string }[] = [];\n\n for (const item of installedItems) {\n const hasUpdate = await checkForUpdate(item, config);\n if (hasUpdate) {\n toUpdate.push(item);\n }\n }\n\n if (toUpdate.length === 0) {\n log.success('All items are up to date!');\n return;\n }\n\n log.info(`Found ${toUpdate.length} item(s) to update:`);\n for (const item of toUpdate) {\n console.log(` • ${item.name}`);\n }\n console.log('');\n\n // Perform updates\n const results: { name: string; success: boolean; error?: string }[] = [];\n\n for (const item of toUpdate) {\n try {\n await updateItem(item, config, options);\n results.push({ name: item.name, success: true });\n log.success(`Updated ${item.name}`);\n } catch (error) {\n results.push({ name: item.name, success: false, error: (error as Error).message });\n log.error(`Failed to update ${item.name}: ${(error as Error).message}`);\n }\n }\n\n // Summary\n console.log('');\n const successCount = results.filter((r) => r.success).length;\n const failCount = results.filter((r) => !r.success).length;\n\n if (successCount > 0) {\n log.success(`Updated ${successCount} item(s) successfully.`);\n }\n if (failCount > 0) {\n log.error(`Failed to update ${failCount} item(s).`);\n }\n console.log('');\n}\n\ninterface InstalledItem {\n name: string;\n type: 'component' | 'block';\n path: string;\n}\n\n/**\n * Find installed Prism items.\n */\nasync function findInstalledItems(config: PrismConfig, filterItems: string[], all?: boolean): Promise<InstalledItem[]> {\n const items: InstalledItem[] = [];\n\n // Check components directory\n const componentsDir = getComponentPath('', config);\n if (fs.existsSync(componentsDir)) {\n const entries = await fs.promises.readdir(componentsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const name = entry.name;\n if (all || filterItems.length === 0 || filterItems.includes(name)) {\n items.push({\n name,\n type: 'component',\n path: path.join(componentsDir, name),\n });\n }\n }\n }\n }\n\n // Check blocks directory\n const blocksDir = getBlockPath('', config);\n if (fs.existsSync(blocksDir)) {\n const entries = await fs.promises.readdir(blocksDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const name = entry.name;\n if (all || filterItems.length === 0 || filterItems.includes(name) || filterItems.includes(`block:${name}`)) {\n items.push({\n name,\n type: 'block',\n path: path.join(blocksDir, name),\n });\n }\n }\n }\n }\n\n return items;\n}\n\n/**\n * Check if an item has an update available.\n */\nasync function checkForUpdate(item: InstalledItem, config: PrismConfig): Promise<boolean> {\n // Look up in registry\n const registry = item.type === 'block' ? defaultRegistrySchema.blocks : defaultRegistrySchema.components;\n\n const definition = registry[item.name];\n\n if (!definition) {\n return false;\n }\n\n // Check for prism.lock.json file to get installed version info\n const lockfilePath = path.join(config.rootDir, 'prism.lock.json');\n\n if (fs.existsSync(lockfilePath)) {\n try {\n const lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n const installed = item.type === 'block' ? lockfile.blocks?.[item.name] : lockfile.components?.[item.name];\n\n if (installed?.version && installed.version !== definition.version) {\n return true;\n }\n } catch {\n // Ignore lockfile errors, assume update may be needed\n }\n }\n\n return false;\n}\n\n/**\n * Update an item to the latest version.\n */\nasync function updateItem(item: InstalledItem, config: PrismConfig, options: UpdateOptions): Promise<void> {\n // Look up in registry\n const registry = item.type === 'block' ? defaultRegistrySchema.blocks : defaultRegistrySchema.components;\n\n const definition = registry[item.name];\n\n if (!definition) {\n throw new Error('Item not found in registry');\n }\n\n // Backup existing files unless --overwrite\n if (!options.overwrite) {\n const backupDir = path.join(item.path, '.prism-backup');\n await fs.promises.mkdir(backupDir, { recursive: true });\n\n for (const file of definition.files) {\n const filePath = path.join(item.path, file.path);\n if (fs.existsSync(filePath)) {\n const backupPath = path.join(backupDir, file.path);\n await fs.promises.copyFile(filePath, backupPath);\n }\n }\n log.muted(` Backed up ${definition.files.length} file(s) to .prism-backup/`);\n }\n\n // Re-generate files using the template system\n const { generateFileContent } = await import('./add.js');\n\n for (const file of definition.files) {\n const filePath = path.join(item.path, file.path);\n // Cast to ComponentDefinition as the function handles both types\n const content = generateFileContent(\n item.name,\n file.path,\n file.type as string,\n definition as import('../../types/registry.js').ComponentDefinition,\n item.type === 'block'\n );\n await fs.promises.writeFile(filePath, content, 'utf-8');\n }\n\n log.muted(` Updated ${definition.files.length} file(s) in ${path.relative(config.rootDir, item.path)}/`);\n\n // Update lockfile\n const lockfilePath = path.join(config.rootDir, 'prism.lock.json');\n let lockfile: {\n version: string;\n components: Record<string, { name: string; version: string; installedAt: string }>;\n blocks: Record<string, { name: string; version: string; installedAt: string }>;\n } = {\n version: '1',\n components: {},\n blocks: {},\n };\n\n if (fs.existsSync(lockfilePath)) {\n try {\n lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n } catch {\n // Use default lockfile\n }\n }\n\n const entry = {\n name: item.name,\n version: definition.version,\n installedAt: new Date().toISOString(),\n };\n\n if (item.type === 'block') {\n lockfile.blocks[item.name] = entry;\n } else {\n lockfile.components[item.name] = entry;\n }\n\n await fs.promises.writeFile(lockfilePath, JSON.stringify(lockfile, null, 2), 'utf-8');\n}\n","/**\n * Prism CLI - Remove Command\n *\n * Remove components or blocks from your project.\n *\n * @module @omnitron-dev/prism/cli/commands/remove\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log } from '../constants.js';\nimport { loadConfig, getComponentPath, getBlockPath, type PrismConfig } from '../config.js';\n\ninterface RemoveOptions {\n cwd?: string;\n yes?: boolean;\n force?: boolean;\n}\n\n/**\n * Create the remove command.\n */\nexport function removeCommand(): Command {\n const command = new Command('remove');\n\n command\n .description('Remove components or blocks from your project')\n .argument('<items...>', 'Components or blocks to remove')\n .option('-y, --yes', 'Skip confirmation prompts')\n .option('-f, --force', 'Force removal even if files have been modified')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (items: string[], options: RemoveOptions) => {\n await runRemove(items, options);\n });\n\n return command;\n}\n\n/**\n * Run the remove command.\n */\nasync function runRemove(items: string[], options: RemoveOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n log.error('No prism.config.json found. Run `prism init` first.');\n process.exit(1);\n }\n\n if (items.length === 0) {\n log.error('No items specified. Use `prism remove <component>` or `prism remove block:<name>`');\n process.exit(1);\n }\n\n console.log('');\n log.info(`Removing ${items.length} item(s)...`);\n console.log('');\n\n const results: { name: string; success: boolean; error?: string }[] = [];\n\n for (const item of items) {\n try {\n const result = await removeItem(item, config, options);\n results.push(result);\n } catch (error) {\n results.push({\n name: item,\n success: false,\n error: (error as Error).message,\n });\n }\n }\n\n // Summary\n console.log('');\n const successCount = results.filter((r) => r.success).length;\n const failCount = results.filter((r) => !r.success).length;\n\n if (successCount > 0) {\n log.success(`Removed ${successCount} item(s) successfully.`);\n }\n\n if (failCount > 0) {\n log.error(`Failed to remove ${failCount} item(s):`);\n for (const result of results.filter((r) => !r.success)) {\n log.muted(` - ${result.name}: ${result.error}`);\n }\n process.exit(1);\n }\n}\n\n/**\n * Remove a single item (component or block).\n */\nasync function removeItem(\n item: string,\n config: PrismConfig,\n options: RemoveOptions\n): Promise<{ name: string; success: boolean; error?: string }> {\n const isBlock = item.startsWith('block:');\n const name = isBlock ? item.replace('block:', '') : item;\n\n // Get the installed path\n const itemPath = isBlock ? getBlockPath(name, config) : getComponentPath(name, config);\n\n // Check if it exists\n if (!fs.existsSync(itemPath)) {\n return {\n name: item,\n success: false,\n error: `Not installed at ${path.relative(config.rootDir, itemPath)}`,\n };\n }\n\n // Remove the directory\n try {\n await fs.promises.rm(itemPath, { recursive: true, force: true });\n log.success(`Removed ${name} from ${path.relative(config.rootDir, itemPath)}/`);\n\n // Update lockfile\n await updateLockfile(config.rootDir, name, isBlock);\n\n return { name: item, success: true };\n } catch (error) {\n return {\n name: item,\n success: false,\n error: `Failed to remove: ${(error as Error).message}`,\n };\n }\n}\n\n/**\n * Update the lockfile after removing an item.\n */\nasync function updateLockfile(rootDir: string, name: string, isBlock: boolean): Promise<void> {\n const lockfilePath = path.join(rootDir, 'prism.lock.json');\n\n if (!fs.existsSync(lockfilePath)) {\n return;\n }\n\n try {\n const lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8')) as {\n version: string;\n components: Record<string, unknown>;\n blocks: Record<string, unknown>;\n };\n\n if (isBlock) {\n delete lockfile.blocks[name];\n } else {\n delete lockfile.components[name];\n }\n\n await fs.promises.writeFile(lockfilePath, JSON.stringify(lockfile, null, 2) + '\\n', 'utf-8');\n log.muted(` Updated prism.lock.json`);\n } catch {\n log.warning(' Could not update lockfile');\n }\n}\n","/**\n * Prism CLI - Doctor Command\n *\n * Diagnose project configuration and environment.\n *\n * @module @omnitron-dev/prism/cli/commands/doctor\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log, COLORS } from '../constants.js';\nimport { findConfigFile, loadConfig, resolveAlias, type PrismConfig } from '../config.js';\n\ninterface DoctorOptions {\n cwd?: string;\n}\n\ninterface CheckResult {\n name: string;\n status: 'pass' | 'warn' | 'fail';\n message: string;\n}\n\n/**\n * Create the doctor command.\n */\nexport function doctorCommand(): Command {\n const command = new Command('doctor');\n\n command\n .description('Diagnose project configuration and environment')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (options: DoctorOptions) => {\n await runDoctor(options);\n });\n\n return command;\n}\n\n/**\n * Run the doctor command.\n */\nasync function runDoctor(options: DoctorOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n console.log('');\n log.info('Prism Doctor - Checking project health...');\n console.log('');\n\n const checks: CheckResult[] = [];\n\n // 1. Config file\n checks.push(await checkConfigFile(cwd));\n\n // 2. Package.json\n checks.push(...(await checkPackageJson(cwd)));\n\n // 3. Config directories\n const config = await loadConfig(cwd);\n if (config) {\n checks.push(...checkDirectories(config));\n }\n\n // 4. TypeScript config\n checks.push(await checkTsConfig(cwd));\n\n // 5. Lockfile integrity\n checks.push(await checkLockfile(cwd));\n\n // Display results\n console.log('');\n const passCount = checks.filter((c) => c.status === 'pass').length;\n const warnCount = checks.filter((c) => c.status === 'warn').length;\n const failCount = checks.filter((c) => c.status === 'fail').length;\n\n for (const check of checks) {\n const icon =\n check.status === 'pass'\n ? `${COLORS.success}✓${COLORS.reset}`\n : check.status === 'warn'\n ? `${COLORS.warning}⚠${COLORS.reset}`\n : `${COLORS.error}✖${COLORS.reset}`;\n console.log(` ${icon} ${check.name}: ${check.message}`);\n }\n\n console.log('');\n console.log(\n ` ${COLORS.success}${passCount} passed${COLORS.reset}` +\n (warnCount > 0 ? `, ${COLORS.warning}${warnCount} warnings${COLORS.reset}` : '') +\n (failCount > 0 ? `, ${COLORS.error}${failCount} failed${COLORS.reset}` : '')\n );\n console.log('');\n\n if (failCount > 0) {\n process.exit(1);\n }\n}\n\nasync function checkConfigFile(cwd: string): Promise<CheckResult> {\n const configPath = findConfigFile(cwd);\n if (!configPath) {\n return {\n name: 'Config file',\n status: 'fail',\n message: 'prism.config.json not found. Run `prism init` to create one.',\n };\n }\n return {\n name: 'Config file',\n status: 'pass',\n message: `Found at ${path.relative(cwd, configPath)}`,\n };\n}\n\nasync function checkPackageJson(cwd: string): Promise<CheckResult[]> {\n const results: CheckResult[] = [];\n const pkgPath = path.join(cwd, 'package.json');\n\n if (!fs.existsSync(pkgPath)) {\n results.push({\n name: 'package.json',\n status: 'fail',\n message: 'Not found in project root.',\n });\n return results;\n }\n\n try {\n const pkg = JSON.parse(await fs.promises.readFile(pkgPath, 'utf-8'));\n const allDeps = { ...pkg.dependencies, ...pkg.devDependencies, ...pkg.peerDependencies };\n\n const requiredPeers = ['react', 'react-dom', '@mui/material'];\n for (const dep of requiredPeers) {\n if (allDeps[dep]) {\n results.push({\n name: dep,\n status: 'pass',\n message: `${allDeps[dep]}`,\n });\n } else {\n results.push({\n name: dep,\n status: 'fail',\n message: 'Not installed. Required peer dependency.',\n });\n }\n }\n\n const optionalDeps = ['@emotion/react', '@emotion/styled', 'zustand'];\n for (const dep of optionalDeps) {\n if (allDeps[dep]) {\n results.push({\n name: dep,\n status: 'pass',\n message: `${allDeps[dep]}`,\n });\n } else {\n results.push({\n name: dep,\n status: 'warn',\n message: 'Not installed. Recommended dependency.',\n });\n }\n }\n } catch {\n results.push({\n name: 'package.json',\n status: 'fail',\n message: 'Failed to parse.',\n });\n }\n\n return results;\n}\n\nfunction checkDirectories(config: PrismConfig): CheckResult[] {\n const results: CheckResult[] = [];\n\n const dirs = {\n components: config.aliases.components,\n blocks: config.aliases.blocks,\n hooks: config.aliases.hooks,\n utils: config.aliases.utils,\n };\n\n for (const [name, alias] of Object.entries(dirs)) {\n const resolved = resolveAlias(alias, config);\n if (fs.existsSync(resolved)) {\n results.push({\n name: `${name} directory`,\n status: 'pass',\n message: `Exists at ${path.relative(config.rootDir, resolved)}`,\n });\n } else {\n results.push({\n name: `${name} directory`,\n status: 'warn',\n message: `Not found at ${path.relative(config.rootDir, resolved)}. Will be created on first add.`,\n });\n }\n }\n\n return results;\n}\n\nasync function checkTsConfig(cwd: string): Promise<CheckResult> {\n const tsConfigPath = path.join(cwd, 'tsconfig.json');\n\n if (!fs.existsSync(tsConfigPath)) {\n return {\n name: 'TypeScript',\n status: 'warn',\n message: 'tsconfig.json not found. Path aliases may not work.',\n };\n }\n\n try {\n const content = await fs.promises.readFile(tsConfigPath, 'utf-8');\n // Strip comments for JSON parse (basic approach)\n const stripped = content.replace(/\\/\\/.*$/gm, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n const tsConfig = JSON.parse(stripped);\n const paths = tsConfig.compilerOptions?.paths || tsConfig.compilerOptions?.baseUrl;\n\n if (paths) {\n return {\n name: 'TypeScript',\n status: 'pass',\n message: 'Path aliases configured.',\n };\n }\n\n return {\n name: 'TypeScript',\n status: 'warn',\n message: 'No path aliases found. Ensure @ alias is configured for Prism imports.',\n };\n } catch {\n return {\n name: 'TypeScript',\n status: 'warn',\n message: 'Could not parse tsconfig.json.',\n };\n }\n}\n\nasync function checkLockfile(cwd: string): Promise<CheckResult> {\n const lockfilePath = path.join(cwd, 'prism.lock.json');\n\n if (!fs.existsSync(lockfilePath)) {\n return {\n name: 'Lockfile',\n status: 'pass',\n message: 'No lockfile yet (no components installed).',\n };\n }\n\n try {\n const lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n const componentCount = Object.keys(lockfile.components || {}).length;\n const blockCount = Object.keys(lockfile.blocks || {}).length;\n\n return {\n name: 'Lockfile',\n status: 'pass',\n message: `${componentCount} component(s), ${blockCount} block(s) installed.`,\n };\n } catch {\n return {\n name: 'Lockfile',\n status: 'warn',\n message: 'Lockfile exists but could not be parsed.',\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/cli/constants.ts","../../src/cli/config.ts","../../src/registry/manager.ts","../../src/registry/installer.ts","../../src/registry/index.ts","../../src/cli/commands/add.ts","../../src/cli/index.ts","../../src/cli/commands/init.ts","../../src/cli/commands/list.ts","../../src/cli/commands/diff.ts","../../src/cli/commands/update.ts","../../src/cli/commands/remove.ts","../../src/cli/commands/doctor.ts"],"names":["require","fs","registry","path","fs3","path3","resolve","Command","path4","fs4","fs5","path5","findInstalledItems","path6","generateFileContent","fs7","path7","updateLockfile","path8","fs8","pkg"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Prism CLI Constants\n *\n * @module cli/constants\n */\n\nimport { createRequire } from 'node:module';\nconst require = createRequire(import.meta.url);\nconst pkg = require('../../package.json') as { version: string };\n\n/** Current Prism version */\nexport const PRISM_VERSION = pkg.version;\n\n/** Default configuration file name */\nexport const CONFIG_FILE_NAME = 'prism.config.json';\n\n/** Default component output directory */\nexport const DEFAULT_COMPONENTS_DIR = 'src/components/ui';\n\n/** Default blocks output directory */\nexport const DEFAULT_BLOCKS_DIR = 'src/blocks';\n\n/** Default hooks output directory */\nexport const DEFAULT_HOOKS_DIR = 'src/hooks';\n\n/** Default utils output directory */\nexport const DEFAULT_UTILS_DIR = 'src/utils';\n\n/** Default registry URL */\nexport const DEFAULT_REGISTRY_URL = 'https://registry.prism.omnitron.dev';\n\n/** Default configuration */\nexport const DEFAULT_CONFIG = {\n $schema: 'https://prism.omnitron.dev/schema.json',\n style: 'default' as const,\n tailwind: {\n config: 'tailwind.config.js',\n css: 'src/index.css',\n baseColor: 'slate',\n cssVariables: true,\n },\n aliases: {\n components: '@/components/ui',\n blocks: '@/blocks',\n hooks: '@/hooks',\n utils: '@/utils',\n },\n registries: [DEFAULT_REGISTRY_URL],\n};\n\n/** Detect if colors should be suppressed */\nconst supportsColor = !process.env.NO_COLOR && process.stderr.isTTY !== false;\n\n/** CLI colors - disabled when NO_COLOR is set or output is not a TTY */\nexport const COLORS = supportsColor\n ? {\n primary: '\\x1b[36m',\n success: '\\x1b[32m',\n warning: '\\x1b[33m',\n error: '\\x1b[31m',\n muted: '\\x1b[90m',\n bold: '\\x1b[1m',\n reset: '\\x1b[0m',\n }\n : {\n primary: '',\n success: '',\n warning: '',\n error: '',\n muted: '',\n bold: '',\n reset: '',\n };\n\n/** Log utilities */\nexport const log = {\n info: (msg: string) => console.log(`${COLORS.primary}ℹ${COLORS.reset} ${msg}`),\n success: (msg: string) => console.log(`${COLORS.success}✓${COLORS.reset} ${msg}`),\n warning: (msg: string) => console.log(`${COLORS.warning}⚠${COLORS.reset} ${msg}`),\n error: (msg: string) => console.error(`${COLORS.error}✖${COLORS.reset} ${msg}`),\n muted: (msg: string) => console.log(`${COLORS.muted}${msg}${COLORS.reset}`),\n};\n\n/** Component categories */\nexport const COMPONENT_CATEGORIES = [\n 'inputs',\n 'data-display',\n 'feedback',\n 'surfaces',\n 'navigation',\n 'layout',\n 'data',\n] as const;\n\n/** Block categories */\nexport const BLOCK_CATEGORIES = ['layouts', 'auth', 'settings', 'data', 'dashboard', 'marketing'] as const;\n","/**\n * Prism CLI Configuration\n *\n * Handles loading, validating, and saving Prism configuration.\n *\n * @module cli/config\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { CONFIG_FILE_NAME, DEFAULT_CONFIG, log } from './constants.js';\n\n/**\n * Prism configuration schema.\n */\nexport interface PrismConfigSchema {\n $schema?: string;\n style: 'default' | 'new-york';\n tailwind?: {\n config: string;\n css: string;\n baseColor: string;\n cssVariables: boolean;\n };\n aliases: {\n components: string;\n blocks: string;\n hooks: string;\n utils: string;\n };\n registries: string[];\n}\n\n/**\n * Runtime Prism configuration with resolved paths.\n */\nexport interface PrismConfig extends PrismConfigSchema {\n /** Resolved root directory */\n rootDir: string;\n /** Resolved config file path */\n configPath: string;\n}\n\n/**\n * Find the prism.config.json file by walking up the directory tree.\n */\nexport function findConfigFile(startDir: string = process.cwd()): string | null {\n let currentDir = path.resolve(startDir);\n const root = path.parse(currentDir).root;\n\n while (currentDir !== root) {\n const configPath = path.join(currentDir, CONFIG_FILE_NAME);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n currentDir = path.dirname(currentDir);\n }\n\n return null;\n}\n\n/**\n * Load Prism configuration from file.\n */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<PrismConfig | null> {\n const configPath = findConfigFile(cwd);\n\n if (!configPath) {\n return null;\n }\n\n try {\n const content = await fs.promises.readFile(configPath, 'utf-8');\n const config = JSON.parse(content) as PrismConfigSchema;\n\n return {\n ...DEFAULT_CONFIG,\n ...config,\n rootDir: path.dirname(configPath),\n configPath,\n };\n } catch (error) {\n log.error(`Failed to load config: ${(error as Error).message}`);\n return null;\n }\n}\n\n/**\n * Save Prism configuration to file.\n */\nexport async function saveConfig(\n config: PrismConfigSchema,\n outputPath: string = path.join(process.cwd(), CONFIG_FILE_NAME)\n): Promise<void> {\n const content = JSON.stringify(config, null, 2);\n await fs.promises.writeFile(outputPath, content, 'utf-8');\n}\n\n/**\n * Validate Prism configuration.\n */\nexport function validateConfig(config: unknown): config is PrismConfigSchema {\n if (!config || typeof config !== 'object') {\n return false;\n }\n\n const c = config as Record<string, unknown>;\n\n // Required fields\n if (typeof c.style !== 'string' || !['default', 'new-york'].includes(c.style)) {\n return false;\n }\n\n if (!c.aliases || typeof c.aliases !== 'object') {\n return false;\n }\n\n const aliases = c.aliases as Record<string, unknown>;\n if (\n typeof aliases.components !== 'string' ||\n typeof aliases.blocks !== 'string' ||\n typeof aliases.hooks !== 'string' ||\n typeof aliases.utils !== 'string'\n ) {\n return false;\n }\n\n if (!Array.isArray(c.registries) || c.registries.length === 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Resolve an alias to an actual file path.\n */\nexport function resolveAlias(alias: string, config: PrismConfig): string {\n // Handle @ alias\n if (alias.startsWith('@/')) {\n return path.join(config.rootDir, 'src', alias.slice(2));\n }\n\n // Handle ~ alias (common in some setups)\n if (alias.startsWith('~/')) {\n return path.join(config.rootDir, alias.slice(2));\n }\n\n // Handle relative paths\n if (alias.startsWith('./') || alias.startsWith('../')) {\n return path.join(config.rootDir, alias);\n }\n\n // Assume it's relative to rootDir\n return path.join(config.rootDir, alias);\n}\n\n/**\n * Get the output path for a component.\n */\nexport function getComponentPath(componentName: string, config: PrismConfig): string {\n const componentsDir = resolveAlias(config.aliases.components, config);\n return path.join(componentsDir, componentName);\n}\n\n/**\n * Get the output path for a block.\n */\nexport function getBlockPath(blockName: string, config: PrismConfig): string {\n const blocksDir = resolveAlias(config.aliases.blocks, config);\n return path.join(blocksDir, blockName);\n}\n\n/**\n * Get the output path for a hook.\n */\nexport function getHookPath(hookName: string, config: PrismConfig): string {\n const hooksDir = resolveAlias(config.aliases.hooks, config);\n return path.join(hooksDir, `${hookName}.ts`);\n}\n\n/**\n * Get the output path for a utility.\n */\nexport function getUtilPath(utilName: string, config: PrismConfig): string {\n const utilsDir = resolveAlias(config.aliases.utils, config);\n return path.join(utilsDir, `${utilName}.ts`);\n}\n","/**\n * Registry Manager\n *\n * Core registry management for Prism components and blocks.\n * Handles loading, merging, querying, and caching of registry data.\n *\n * Key Features:\n * - Multiple registry sources (local, remote, merged)\n * - Automatic dependency resolution\n * - Version management and compatibility checking\n * - Caching with configurable TTL\n *\n * @module registry/manager\n */\n\nimport type { RegistrySchema, ComponentDefinition, RegistryConfig, RemoteRegistryConfig } from '../types/registry.js';\nimport type { BlockDefinition } from '../types/blocks.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface RegistryManagerOptions {\n /** Base directory for local registries */\n baseDir?: string;\n /** Default registry name */\n defaultRegistry?: string;\n /** Registry configuration */\n config?: RegistryConfig;\n /** Cache TTL in milliseconds (default: 5 minutes) */\n cacheTtl?: number;\n}\n\nexport interface SearchOptions {\n /** Filter by category */\n category?: string;\n /** Search query */\n query?: string;\n /** Include dependencies in results */\n includeDependencies?: boolean;\n /** Limit results */\n limit?: number;\n}\n\nexport interface ResolvedItem {\n /** Item definition */\n definition: ComponentDefinition | BlockDefinition;\n /** Registry source */\n registry: string;\n /** Resolved dependencies */\n dependencies: ResolvedItem[];\n}\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n}\n\n// =============================================================================\n// REGISTRY MANAGER\n// =============================================================================\n\n/**\n * Registry manager for Prism design system.\n *\n * Manages component and block registries with support for:\n * - Local and remote registry sources\n * - Registry merging and extension\n * - Dependency resolution\n * - Caching with TTL\n *\n * @example\n * ```typescript\n * const manager = new RegistryManager({\n * baseDir: './prism',\n * config: {\n * default: 'prism',\n * registries: {\n * prism: 'https://registry.prism.dev',\n * custom: './custom-registry.json',\n * },\n * },\n * });\n *\n * // Get a component\n * const button = await manager.getComponent('button');\n *\n * // Search for components\n * const inputs = await manager.searchComponents({ category: 'inputs' });\n *\n * // Resolve dependencies\n * const resolved = await manager.resolveDependencies('data-table');\n * ```\n */\nexport class RegistryManager {\n private readonly options: Required<RegistryManagerOptions>;\n private registries: Map<string, RegistrySchema> = new Map();\n private cache: Map<string, CacheEntry<RegistrySchema>> = new Map();\n private loaders: Map<string, () => Promise<RegistrySchema>> = new Map();\n\n constructor(options: RegistryManagerOptions = {}) {\n this.options = {\n baseDir: options.baseDir ?? (typeof process !== 'undefined' && process.cwd ? process.cwd() : '/'),\n defaultRegistry: options.defaultRegistry ?? 'prism',\n config: options.config ?? { default: 'prism', registries: {} },\n cacheTtl: options.cacheTtl ?? 5 * 60 * 1000, // 5 minutes\n };\n }\n\n // ===========================================================================\n // REGISTRY LOADING\n // ===========================================================================\n\n /**\n * Register a custom loader for a registry.\n */\n registerLoader(name: string, loader: () => Promise<RegistrySchema>): void {\n this.loaders.set(name, loader);\n }\n\n /**\n * Load a registry by name.\n */\n async loadRegistry(name: string): Promise<RegistrySchema> {\n // Check cache first\n const cached = this.cache.get(name);\n if (cached && Date.now() - cached.timestamp < this.options.cacheTtl) {\n return cached.data;\n }\n\n // Check if already loaded\n const existing = this.registries.get(name);\n if (existing && !cached) {\n return existing;\n }\n\n // Use custom loader if registered\n const customLoader = this.loaders.get(name);\n if (customLoader) {\n const registry = await customLoader();\n this.cacheRegistry(name, registry);\n return registry;\n }\n\n // Get registry config\n const config = this.options.config.registries[name];\n if (!config) {\n throw new Error(`Registry \"${name}\" not found in configuration`);\n }\n\n // Load based on config type\n const registry = typeof config === 'string' ? await this.loadFromPath(config) : await this.loadFromRemote(config);\n\n // Handle registry extension\n if (registry.extends) {\n const baseRegistry = await this.loadRegistry(registry.extends);\n const merged = this.mergeRegistries(baseRegistry, registry);\n this.cacheRegistry(name, merged);\n return merged;\n }\n\n this.cacheRegistry(name, registry);\n return registry;\n }\n\n /**\n * Load registry from local file path.\n * Uses dynamic import for ESM compatibility across environments.\n *\n * @param path - Relative or absolute path to registry JSON\n * @returns Loaded registry schema\n */\n private async loadFromPath(path: string): Promise<RegistrySchema> {\n const fullPath = path.startsWith('/') ? path : `${this.options.baseDir}/${path}`;\n\n // Check if running in Node.js-like environment with fs access\n if (typeof process !== 'undefined' && (process.versions?.node || process.versions?.bun)) {\n // Dynamic import for Node.js fs module\n const fs = await import('node:fs/promises');\n const content = await fs.readFile(fullPath, 'utf-8');\n return JSON.parse(content) as RegistrySchema;\n }\n\n // In browser/Deno environment, try to fetch if it's a URL\n if (path.startsWith('http://') || path.startsWith('https://')) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(`Failed to load registry from ${path}: ${response.statusText}`);\n }\n return response.json();\n }\n\n // For browser environment with bundled registries, use custom loader\n throw new Error(\n `Cannot load local file \"${fullPath}\" in browser environment. ` +\n `Register a custom loader with manager.registerLoader() or use a remote URL.`\n );\n }\n\n /**\n * Load registry from remote URL.\n */\n private async loadFromRemote(config: RemoteRegistryConfig): Promise<RegistrySchema> {\n const response = await fetch(config.url, {\n headers: config.headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to load registry from ${config.url}: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Cache a loaded registry.\n */\n private cacheRegistry(name: string, registry: RegistrySchema): void {\n this.registries.set(name, registry);\n this.cache.set(name, {\n data: registry,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Merge two registries (base + extension).\n */\n private mergeRegistries(base: RegistrySchema, extension: RegistrySchema): RegistrySchema {\n return {\n ...base,\n ...extension,\n components: { ...base.components, ...extension.components },\n blocks: { ...base.blocks, ...extension.blocks },\n themes: { ...base.themes, ...extension.themes },\n };\n }\n\n /**\n * Clear registry cache.\n */\n clearCache(name?: string): void {\n if (name) {\n this.cache.delete(name);\n } else {\n this.cache.clear();\n }\n }\n\n // ===========================================================================\n // COMPONENT OPERATIONS\n // ===========================================================================\n\n /**\n * Get a component definition by name.\n */\n async getComponent(name: string, registryName?: string): Promise<ComponentDefinition | null> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.components[name] ?? null;\n }\n\n /**\n * Get all components from a registry.\n */\n async getComponents(registryName?: string): Promise<Record<string, ComponentDefinition>> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.components;\n }\n\n /**\n * Search for components.\n */\n async searchComponents(options: SearchOptions, registryName?: string): Promise<ComponentDefinition[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n let results = Object.values(registry.components);\n\n // Filter by category\n if (options.category) {\n results = results.filter((c) => c.category === options.category);\n }\n\n // Filter by query\n if (options.query) {\n const query = options.query.toLowerCase();\n results = results.filter(\n (c) =>\n c.name.toLowerCase().includes(query) ||\n c.displayName?.toLowerCase().includes(query) ||\n c.description?.toLowerCase().includes(query)\n );\n }\n\n // Limit results\n if (options.limit && options.limit > 0) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Get component categories.\n */\n async getComponentCategories(registryName?: string): Promise<string[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n const categories = new Set<string>();\n\n for (const component of Object.values(registry.components)) {\n categories.add(component.category);\n }\n\n return Array.from(categories).sort();\n }\n\n // ===========================================================================\n // BLOCK OPERATIONS\n // ===========================================================================\n\n /**\n * Get a block definition by name.\n */\n async getBlock(name: string, registryName?: string): Promise<BlockDefinition | null> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.blocks[name] ?? null;\n }\n\n /**\n * Get all blocks from a registry.\n */\n async getBlocks(registryName?: string): Promise<Record<string, BlockDefinition>> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.blocks;\n }\n\n /**\n * Search for blocks.\n */\n async searchBlocks(options: SearchOptions, registryName?: string): Promise<BlockDefinition[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n let results = Object.values(registry.blocks);\n\n // Filter by category\n if (options.category) {\n results = results.filter((b) => b.category === options.category);\n }\n\n // Filter by query\n if (options.query) {\n const query = options.query.toLowerCase();\n results = results.filter(\n (b) =>\n b.name.toLowerCase().includes(query) ||\n b.displayName?.toLowerCase().includes(query) ||\n b.description?.toLowerCase().includes(query)\n );\n }\n\n // Limit results\n if (options.limit && options.limit > 0) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Get block categories.\n */\n async getBlockCategories(registryName?: string): Promise<string[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n const categories = new Set<string>();\n\n for (const block of Object.values(registry.blocks)) {\n categories.add(block.category);\n }\n\n return Array.from(categories).sort();\n }\n\n // ===========================================================================\n // DEPENDENCY RESOLUTION\n // ===========================================================================\n\n /**\n * Resolve all dependencies for a component.\n */\n async resolveComponentDependencies(name: string, registryName?: string): Promise<ResolvedItem> {\n const registry = registryName ?? this.options.defaultRegistry;\n const component = await this.getComponent(name, registry);\n\n if (!component) {\n throw new Error(`Component \"${name}\" not found in registry \"${registry}\"`);\n }\n\n const dependencies: ResolvedItem[] = [];\n\n // Resolve component dependencies\n for (const depName of component.dependencies.components) {\n const resolved = await this.resolveComponentDependencies(depName, registry);\n dependencies.push(resolved);\n }\n\n return {\n definition: component,\n registry,\n dependencies,\n };\n }\n\n /**\n * Resolve all dependencies for a block.\n */\n async resolveBlockDependencies(name: string, registryName?: string): Promise<ResolvedItem> {\n const registry = registryName ?? this.options.defaultRegistry;\n const block = await this.getBlock(name, registry);\n\n if (!block) {\n throw new Error(`Block \"${name}\" not found in registry \"${registry}\"`);\n }\n\n const dependencies: ResolvedItem[] = [];\n\n // Resolve component dependencies\n for (const compName of block.dependencies.components) {\n const resolved = await this.resolveComponentDependencies(compName, registry);\n dependencies.push(resolved);\n }\n\n // Resolve block dependencies\n for (const blockName of block.dependencies.blocks) {\n const resolved = await this.resolveBlockDependencies(blockName, registry);\n dependencies.push(resolved);\n }\n\n return {\n definition: block,\n registry,\n dependencies,\n };\n }\n\n /**\n * Get flat list of all npm dependencies for resolved items.\n */\n getNpmDependencies(resolved: ResolvedItem): string[] {\n const deps = new Set<string>();\n\n function collectDeps(item: ResolvedItem): void {\n // Add direct npm dependencies\n const definition = item.definition as ComponentDefinition | BlockDefinition;\n if ('dependencies' in definition) {\n for (const dep of definition.dependencies.npm) {\n deps.add(dep);\n }\n }\n\n // Recurse into dependencies\n for (const child of item.dependencies) {\n collectDeps(child);\n }\n }\n\n collectDeps(resolved);\n return Array.from(deps).sort();\n }\n\n /**\n * Get flat list of all file paths for resolved items.\n */\n getFilePaths(resolved: ResolvedItem): string[] {\n const paths = new Set<string>();\n\n function collectPaths(item: ResolvedItem): void {\n // Add direct file paths\n const definition = item.definition as ComponentDefinition | BlockDefinition;\n for (const file of definition.files) {\n paths.add(file.path);\n }\n\n // Recurse into dependencies\n for (const child of item.dependencies) {\n collectPaths(child);\n }\n }\n\n collectPaths(resolved);\n return Array.from(paths).sort();\n }\n\n // ===========================================================================\n // VERSION CHECKING\n // ===========================================================================\n\n /**\n * Check if a component version is compatible.\n */\n async checkComponentVersion(name: string, requiredVersion: string, registryName?: string): Promise<boolean> {\n const component = await this.getComponent(name, registryName);\n if (!component) return false;\n\n return this.isVersionCompatible(component.version, requiredVersion);\n }\n\n /**\n * Check semver version compatibility.\n * Simple implementation - considers major.minor compatibility.\n */\n private isVersionCompatible(actual: string, required: string): boolean {\n const [actualMajor, actualMinor] = actual.split('.').map(Number);\n const [requiredMajor, requiredMinor] = required.split('.').map(Number);\n\n // Major version must match\n if (actualMajor !== requiredMajor) return false;\n\n // Minor version must be >= required\n return actualMinor >= requiredMinor;\n }\n\n // ===========================================================================\n // REGISTRY INFO\n // ===========================================================================\n\n /**\n * Get registry metadata.\n */\n async getRegistryInfo(registryName?: string): Promise<{\n name: string;\n version: string;\n description?: string;\n componentCount: number;\n blockCount: number;\n themeCount: number;\n }> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n\n return {\n name: registry.name,\n version: registry.version,\n description: registry.description,\n componentCount: Object.keys(registry.components).length,\n blockCount: Object.keys(registry.blocks).length,\n themeCount: Object.keys(registry.themes).length,\n };\n }\n\n /**\n * Get list of loaded registries.\n */\n getLoadedRegistries(): string[] {\n return Array.from(this.registries.keys());\n }\n}\n\n// =============================================================================\n// DEFAULT INSTANCE\n// =============================================================================\n\n/**\n * Default registry manager instance.\n */\nexport const registry = new RegistryManager();\n\n/**\n * Create a new registry manager with custom options.\n */\nexport function createRegistryManager(options?: RegistryManagerOptions): RegistryManager {\n return new RegistryManager(options);\n}\n","/**\n * Component/Block Installer\n *\n * Handles installation of Prism components and blocks to target projects.\n * Manages file copying, dependency resolution, and lockfile tracking.\n *\n * Key Features:\n * - Atomic installation with rollback on failure\n * - Automatic dependency installation\n * - Template variable substitution\n * - Lockfile tracking for updates\n *\n * @module registry/installer\n */\n\nimport { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\nimport type { ComponentDefinition, InstalledComponent, InstalledBlock, PrismLockfile } from '../types/registry.js';\nimport type { BlockDefinition } from '../types/blocks.js';\nimport { RegistryManager, type ResolvedItem } from './manager.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface InstallerOptions {\n /** Target directory for components */\n componentsDir?: string;\n /** Target directory for blocks */\n blocksDir?: string;\n /** Target directory for hooks */\n hooksDir?: string;\n /** Overwrite existing files */\n overwrite?: boolean;\n /** Dry run mode (don't write files) */\n dryRun?: boolean;\n /** Skip dependencies */\n skipDependencies?: boolean;\n /** Template variables for substitution */\n templateVars?: Record<string, string>;\n}\n\nexport interface InstallResult {\n /** Whether installation was successful */\n success: boolean;\n /** Installed files */\n files: string[];\n /** npm dependencies to install */\n npmDependencies: string[];\n /** Errors encountered */\n errors: string[];\n /** Warnings */\n warnings: string[];\n}\n\ninterface FileOperation {\n type: 'write' | 'mkdir';\n path: string;\n content?: string;\n}\n\n// =============================================================================\n// INSTALLER\n// =============================================================================\n\n/**\n * Prism component and block installer.\n *\n * @example\n * ```typescript\n * const installer = new PrismInstaller({\n * componentsDir: 'src/components',\n * blocksDir: 'src/blocks',\n * });\n *\n * // Install a component\n * const result = await installer.installComponent('button');\n *\n * // Install a block with all dependencies\n * const blockResult = await installer.installBlock('dashboard-layout');\n * ```\n */\nexport class PrismInstaller {\n private readonly options: Required<InstallerOptions>;\n private readonly registryManager: RegistryManager;\n private lockfile: PrismLockfile | null = null;\n private lockfilePath: string;\n\n constructor(registryManager: RegistryManager, options: InstallerOptions = {}) {\n this.registryManager = registryManager;\n this.options = {\n componentsDir: options.componentsDir ?? 'src/components/prism',\n blocksDir: options.blocksDir ?? 'src/blocks',\n hooksDir: options.hooksDir ?? 'src/hooks',\n overwrite: options.overwrite ?? false,\n dryRun: options.dryRun ?? false,\n skipDependencies: options.skipDependencies ?? false,\n templateVars: options.templateVars ?? {},\n };\n this.lockfilePath = path.join(process.cwd(), 'prism.lock.json');\n }\n\n // ===========================================================================\n // COMPONENT INSTALLATION\n // ===========================================================================\n\n /**\n * Install a component and its dependencies.\n */\n async installComponent(name: string, registryName?: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n // Resolve component and dependencies\n const resolved = await this.registryManager.resolveComponentDependencies(name, registryName);\n\n // Get all items to install (flattened)\n const itemsToInstall = this.options.skipDependencies ? [resolved] : this.flattenDependencies(resolved);\n\n // Check for existing installations\n await this.loadLockfile();\n const existingComponents = new Set(Object.keys(this.lockfile?.components ?? {}));\n\n // Filter out already installed components (unless overwrite is enabled)\n const filteredItems = this.options.overwrite\n ? itemsToInstall\n : itemsToInstall.filter((item) => {\n const def = item.definition as ComponentDefinition;\n if (existingComponents.has(def.name)) {\n result.warnings.push(\n `Component \"${def.name}\" is already installed, skipping (use --overwrite to replace)`\n );\n return false;\n }\n return true;\n });\n\n // Collect all file operations\n const operations: FileOperation[] = [];\n const installedComponents: InstalledComponent[] = [];\n\n for (const item of filteredItems) {\n const component = item.definition as ComponentDefinition;\n const componentOps = await this.prepareComponentFiles(component, item.registry);\n operations.push(...componentOps);\n\n installedComponents.push({\n name: component.name,\n version: component.version,\n registry: item.registry,\n installedAt: new Date().toISOString(),\n files: componentOps.filter((op) => op.type === 'write').map((op) => op.path),\n });\n }\n\n // Collect npm dependencies\n result.npmDependencies = this.registryManager.getNpmDependencies(resolved);\n\n // Execute operations (or simulate in dry run)\n if (this.options.dryRun) {\n result.files = operations.filter((op) => op.type === 'write').map((op) => op.path);\n result.success = true;\n } else {\n await this.executeOperations(operations);\n result.files = operations.filter((op) => op.type === 'write').map((op) => op.path);\n\n // Update lockfile\n for (const component of installedComponents) {\n this.lockfile!.components[component.name] = component;\n }\n await this.saveLockfile();\n\n result.success = true;\n }\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Prepare file operations for a component.\n */\n private async prepareComponentFiles(component: ComponentDefinition, _registry: string): Promise<FileOperation[]> {\n const operations: FileOperation[] = [];\n const componentDir = path.join(this.options.componentsDir, component.name);\n\n // Create component directory\n operations.push({ type: 'mkdir', path: componentDir });\n\n // Prepare each file\n for (const file of component.files) {\n const targetPath = path.join(componentDir, path.basename(file.path));\n const content = await this.fetchFileContent(file.path);\n const processedContent = this.processTemplate(content);\n\n operations.push({\n type: 'write',\n path: targetPath,\n content: processedContent,\n });\n }\n\n return operations;\n }\n\n // ===========================================================================\n // BLOCK INSTALLATION\n // ===========================================================================\n\n /**\n * Install a block and its dependencies.\n */\n async installBlock(name: string, registryName?: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n // Resolve block and dependencies\n const resolved = await this.registryManager.resolveBlockDependencies(name, registryName);\n\n // Get all items to install (flattened)\n const allItems = this.options.skipDependencies ? [resolved] : this.flattenDependencies(resolved);\n\n // Separate blocks and components by checking for block-specific properties\n // BlockDefinition has 'defaultConfig' which ComponentDefinition doesn't have\n const blocks = allItems.filter((item) => {\n const def = item.definition;\n // Block has 'defaultConfig' and 'dependencies.blocks', Component has 'dependencies.components'\n return 'defaultConfig' in def && 'dependencies' in def && 'blocks' in (def as BlockDefinition).dependencies;\n });\n const components = allItems.filter((item) => !blocks.includes(item));\n\n // Check for existing installations\n await this.loadLockfile();\n\n // Install component dependencies first\n for (const item of components) {\n const component = item.definition as ComponentDefinition;\n const existingComponent = this.lockfile?.components[component.name];\n\n if (existingComponent && !this.options.overwrite) {\n result.warnings.push(`Component \"${component.name}\" is already installed, skipping`);\n continue;\n }\n\n const componentResult = await this.installComponent(component.name, item.registry);\n result.files.push(...componentResult.files);\n result.errors.push(...componentResult.errors);\n result.warnings.push(...componentResult.warnings);\n }\n\n // Install blocks\n const operations: FileOperation[] = [];\n const installedBlocks: InstalledBlock[] = [];\n\n for (const item of blocks) {\n const block = item.definition as BlockDefinition;\n const existingBlock = this.lockfile?.blocks[block.name];\n\n if (existingBlock && !this.options.overwrite) {\n result.warnings.push(`Block \"${block.name}\" is already installed, skipping`);\n continue;\n }\n\n const blockOps = await this.prepareBlockFiles(block, item.registry);\n operations.push(...blockOps);\n\n installedBlocks.push({\n name: block.name,\n version: block.version,\n registry: item.registry,\n installedAt: new Date().toISOString(),\n files: blockOps.filter((op) => op.type === 'write').map((op) => op.path),\n config: block.defaultConfig,\n });\n }\n\n // Collect npm dependencies\n result.npmDependencies = this.registryManager.getNpmDependencies(resolved);\n\n // Execute operations\n if (this.options.dryRun) {\n result.files.push(...operations.filter((op) => op.type === 'write').map((op) => op.path));\n result.success = true;\n } else {\n await this.executeOperations(operations);\n result.files.push(...operations.filter((op) => op.type === 'write').map((op) => op.path));\n\n // Update lockfile\n for (const block of installedBlocks) {\n this.lockfile!.blocks[block.name] = block;\n }\n await this.saveLockfile();\n\n result.success = true;\n }\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Prepare file operations for a block.\n */\n private async prepareBlockFiles(block: BlockDefinition, _registry: string): Promise<FileOperation[]> {\n const operations: FileOperation[] = [];\n const blockDir = path.join(this.options.blocksDir, block.name);\n\n // Create block directory\n operations.push({ type: 'mkdir', path: blockDir });\n\n // Prepare each file\n for (const file of block.files) {\n const targetPath = path.join(blockDir, file.path);\n const targetDir = path.dirname(targetPath);\n\n // Create subdirectory if needed\n if (targetDir !== blockDir) {\n operations.push({ type: 'mkdir', path: targetDir });\n }\n\n const content = await this.fetchFileContent(file.path);\n const processedContent = this.processTemplate(content);\n\n operations.push({\n type: 'write',\n path: targetPath,\n content: processedContent,\n });\n }\n\n return operations;\n }\n\n // ===========================================================================\n // UNINSTALLATION\n // ===========================================================================\n\n /**\n * Uninstall a component.\n */\n async uninstallComponent(name: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n await this.loadLockfile();\n const installed = this.lockfile?.components[name];\n\n if (!installed) {\n result.errors.push(`Component \"${name}\" is not installed`);\n return result;\n }\n\n // Check if any other components depend on this one\n const dependents = await this.findDependents(name, 'component');\n if (dependents.length > 0) {\n result.errors.push(`Cannot uninstall \"${name}\" because it is used by: ${dependents.join(', ')}`);\n return result;\n }\n\n // Delete files\n if (!this.options.dryRun) {\n for (const filePath of installed.files) {\n await fs.unlink(filePath).catch(() => {\n result.warnings.push(`Could not delete file: ${filePath}`);\n });\n }\n\n // Try to remove component directory if empty\n const componentDir = path.dirname(installed.files[0]);\n await fs.rmdir(componentDir).catch(() => {\n // Directory not empty or doesn't exist\n });\n\n // Update lockfile\n delete this.lockfile!.components[name];\n await this.saveLockfile();\n }\n\n result.files = installed.files;\n result.success = true;\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Uninstall a block.\n */\n async uninstallBlock(name: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n await this.loadLockfile();\n const installed = this.lockfile?.blocks[name];\n\n if (!installed) {\n result.errors.push(`Block \"${name}\" is not installed`);\n return result;\n }\n\n // Check if any other blocks depend on this one\n const dependents = await this.findDependents(name, 'block');\n if (dependents.length > 0) {\n result.errors.push(`Cannot uninstall \"${name}\" because it is used by: ${dependents.join(', ')}`);\n return result;\n }\n\n // Delete files\n if (!this.options.dryRun) {\n for (const filePath of installed.files) {\n await fs.unlink(filePath).catch(() => {\n result.warnings.push(`Could not delete file: ${filePath}`);\n });\n }\n\n // Try to remove block directory\n const blockDir = path.dirname(installed.files[0]);\n await fs.rm(blockDir, { recursive: true }).catch(() => {\n result.warnings.push(`Could not remove directory: ${blockDir}`);\n });\n\n // Update lockfile\n delete this.lockfile!.blocks[name];\n await this.saveLockfile();\n }\n\n result.files = installed.files;\n result.success = true;\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n // ===========================================================================\n // HELPERS\n // ===========================================================================\n\n /**\n * Flatten dependency tree into unique list.\n */\n private flattenDependencies(resolved: ResolvedItem): ResolvedItem[] {\n const seen = new Set<string>();\n const result: ResolvedItem[] = [];\n\n function traverse(item: ResolvedItem): void {\n const key = `${item.registry}:${item.definition.name}`;\n if (seen.has(key)) return;\n seen.add(key);\n\n // Process dependencies first (for proper install order)\n for (const dep of item.dependencies) {\n traverse(dep);\n }\n\n result.push(item);\n }\n\n traverse(resolved);\n return result;\n }\n\n /**\n * Fetch file content from registry.\n * Supports local files (prefixed with file:// or absolute paths) and remote URLs.\n */\n private async fetchFileContent(filePath: string): Promise<string> {\n // Handle local file paths\n if (filePath.startsWith('file://') || filePath.startsWith('/') || /^[a-zA-Z]:/.test(filePath)) {\n const actualPath = filePath.replace('file://', '');\n try {\n const content = await fs.readFile(actualPath, 'utf-8');\n return content;\n } catch (error) {\n throw new Error(\n `Failed to read local file \"${actualPath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n // Handle relative paths (resolve against baseDir from registry manager options)\n if (!filePath.startsWith('http://') && !filePath.startsWith('https://')) {\n const resolvedPath = path.resolve(process.cwd(), filePath);\n try {\n const content = await fs.readFile(resolvedPath, 'utf-8');\n return content;\n } catch (error) {\n throw new Error(\n `Failed to read file \"${resolvedPath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n // Handle remote URLs\n try {\n const response = await fetch(filePath);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n return await response.text();\n } catch (error) {\n throw new Error(\n `Failed to fetch remote file \"${filePath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n /**\n * Process template variables in content.\n */\n private processTemplate(content: string): string {\n let result = content;\n\n for (const [key, value] of Object.entries(this.options.templateVars)) {\n result = result.replace(new RegExp(`{{${key}}}`, 'g'), value);\n }\n\n return result;\n }\n\n /**\n * Execute file operations.\n */\n private async executeOperations(operations: FileOperation[]): Promise<void> {\n // Sort operations: directories first, then files\n const sorted = [...operations].sort((a, b) => {\n if (a.type === 'mkdir' && b.type !== 'mkdir') return -1;\n if (a.type !== 'mkdir' && b.type === 'mkdir') return 1;\n return 0;\n });\n\n for (const op of sorted) {\n if (op.type === 'mkdir') {\n await fs.mkdir(op.path, { recursive: true });\n } else if (op.type === 'write' && op.content !== undefined) {\n // Check if file exists and we shouldn't overwrite\n if (!this.options.overwrite) {\n try {\n await fs.access(op.path);\n continue; // File exists, skip\n } catch {\n // File doesn't exist, proceed\n }\n }\n await fs.writeFile(op.path, op.content, 'utf-8');\n }\n }\n }\n\n /**\n * Find items that depend on a given component/block.\n */\n private async findDependents(name: string, type: 'component' | 'block'): Promise<string[]> {\n const dependents: string[] = [];\n\n if (!this.lockfile) return dependents;\n\n // Check all installed blocks for dependencies\n for (const [blockName, _block] of Object.entries(this.lockfile.blocks)) {\n const blockDef = await this.registryManager.getBlock(blockName);\n if (!blockDef) continue;\n\n if (type === 'component' && blockDef.dependencies.components.includes(name)) {\n dependents.push(blockName);\n }\n if (type === 'block' && blockDef.dependencies.blocks.includes(name)) {\n dependents.push(blockName);\n }\n }\n\n // Check components for component dependencies\n if (type === 'component') {\n for (const [compName, _comp] of Object.entries(this.lockfile.components)) {\n const compDef = await this.registryManager.getComponent(compName);\n if (!compDef) continue;\n\n if (compDef.dependencies.components.includes(name)) {\n dependents.push(compName);\n }\n }\n }\n\n return dependents;\n }\n\n // ===========================================================================\n // LOCKFILE MANAGEMENT\n // ===========================================================================\n\n /**\n * Load lockfile from disk.\n */\n private async loadLockfile(): Promise<void> {\n if (this.lockfile) return;\n\n try {\n const content = await fs.readFile(this.lockfilePath, 'utf-8');\n this.lockfile = JSON.parse(content);\n } catch {\n // Create new lockfile if it doesn't exist\n this.lockfile = {\n version: '1.0.0',\n components: {},\n blocks: {},\n themes: [],\n };\n }\n }\n\n /**\n * Save lockfile to disk.\n */\n private async saveLockfile(): Promise<void> {\n if (!this.lockfile) return;\n\n await fs.writeFile(this.lockfilePath, JSON.stringify(this.lockfile, null, 2), 'utf-8');\n }\n\n /**\n * Get current lockfile.\n */\n async getLockfile(): Promise<PrismLockfile> {\n await this.loadLockfile();\n return this.lockfile!;\n }\n\n /**\n * List installed components.\n */\n async listInstalled(): Promise<{\n components: InstalledComponent[];\n blocks: InstalledBlock[];\n }> {\n await this.loadLockfile();\n return {\n components: Object.values(this.lockfile!.components),\n blocks: Object.values(this.lockfile!.blocks),\n };\n }\n}\n\n// =============================================================================\n// FACTORY\n// =============================================================================\n\n/**\n * Create a new installer instance.\n */\nexport function createInstaller(registryManager: RegistryManager, options?: InstallerOptions): PrismInstaller {\n return new PrismInstaller(registryManager, options);\n}\n","/**\n * Prism Registry Module\n *\n * Component and block registry system for the Prism design framework.\n * Enables shadcn/ui-style copy-paste installation with dependency resolution.\n *\n * @module registry\n */\n\n// =============================================================================\n// REGISTRY MANAGER\n// =============================================================================\n\nexport { RegistryManager, registry, createRegistryManager } from './manager.js';\n\nexport type { RegistryManagerOptions, SearchOptions, ResolvedItem } from './manager.js';\n\n// =============================================================================\n// INSTALLER\n// =============================================================================\n\nexport { PrismInstaller, createInstaller } from './installer.js';\n\nexport type { InstallerOptions, InstallResult } from './installer.js';\n\n// =============================================================================\n// DEFAULT REGISTRY SCHEMA\n// =============================================================================\n\nimport type { RegistrySchema } from '../types/registry.js';\n\n/**\n * Default Prism registry schema.\n * Defines the structure for the base component and block registry.\n */\nexport const defaultRegistrySchema: RegistrySchema = {\n $schema: 'https://prism.omnitron.dev/registry/v1/schema.json',\n name: 'prism',\n version: '1.0.0',\n description: 'Official Prism Design System Registry',\n baseUrl: 'https://registry.prism.omnitron.dev',\n components: {\n // Input Components\n button: {\n name: 'button',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Button',\n description: 'Primary action button with multiple variants',\n files: [\n { path: 'Button.tsx', type: 'component' },\n { path: 'Button.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n docs: 'https://docs.prism.omnitron.dev/components/button',\n },\n 'icon-button': {\n name: 'icon-button',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Icon Button',\n description: 'Compact button for icon-only actions',\n files: [\n { path: 'IconButton.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n 'text-field': {\n name: 'text-field',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Text Field',\n description: 'Text input with label and helper text',\n files: [\n { path: 'TextField.tsx', type: 'component' },\n { path: 'TextField.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n select: {\n name: 'select',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Select',\n description: 'Dropdown selection component',\n files: [\n { path: 'Select.tsx', type: 'component' },\n { path: 'Select.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n checkbox: {\n name: 'checkbox',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Checkbox',\n description: 'Checkbox input for boolean values',\n files: [\n { path: 'Checkbox.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n switch: {\n name: 'switch',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Switch',\n description: 'Toggle switch for on/off states',\n files: [\n { path: 'Switch.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Data Display\n avatar: {\n name: 'avatar',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Avatar',\n description: 'User avatar with image or initials',\n files: [\n { path: 'Avatar.tsx', type: 'component' },\n { path: 'AvatarGroup.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n badge: {\n name: 'badge',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Badge',\n description: 'Badge for notifications and status',\n files: [\n { path: 'Badge.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n chip: {\n name: 'chip',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Chip',\n description: 'Compact element for tags and selections',\n files: [\n { path: 'Chip.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n tooltip: {\n name: 'tooltip',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Tooltip',\n description: 'Informative tooltip on hover',\n files: [\n { path: 'Tooltip.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Feedback\n alert: {\n name: 'alert',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Alert',\n description: 'Alert messages with severity levels',\n files: [\n { path: 'Alert.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n snackbar: {\n name: 'snackbar',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Snackbar',\n description: 'Brief notification messages',\n files: [\n { path: 'Snackbar.tsx', type: 'component' },\n { path: 'SnackbarProvider.tsx', type: 'component' },\n { path: 'useSnackbar.ts', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'notistack'],\n components: [],\n },\n hasVariants: false,\n },\n dialog: {\n name: 'dialog',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Dialog',\n description: 'Modal dialog with actions',\n files: [\n { path: 'Dialog.tsx', type: 'component' },\n { path: 'ConfirmDialog.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: ['button'],\n },\n hasVariants: false,\n },\n progress: {\n name: 'progress',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Progress',\n description: 'Progress indicators (linear and circular)',\n files: [\n { path: 'LinearProgress.tsx', type: 'component' },\n { path: 'CircularProgress.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Surfaces\n card: {\n name: 'card',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Card',\n description: 'Content card with header, content, and actions',\n files: [\n { path: 'Card.tsx', type: 'component' },\n { path: 'Card.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n paper: {\n name: 'paper',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Paper',\n description: 'Basic surface with elevation',\n files: [\n { path: 'Paper.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n accordion: {\n name: 'accordion',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Accordion',\n description: 'Expandable content panels',\n files: [\n { path: 'Accordion.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Navigation\n tabs: {\n name: 'tabs',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Tabs',\n description: 'Tabbed navigation component',\n files: [\n { path: 'Tabs.tsx', type: 'component' },\n { path: 'TabPanel.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n breadcrumbs: {\n name: 'breadcrumbs',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Breadcrumbs',\n description: 'Navigation breadcrumb trail',\n files: [\n { path: 'Breadcrumbs.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n menu: {\n name: 'menu',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Menu',\n description: 'Dropdown menu for actions',\n files: [\n { path: 'Menu.tsx', type: 'component' },\n { path: 'MenuItem.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Layout\n stack: {\n name: 'stack',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Stack',\n description: 'Vertical/horizontal flex layout',\n files: [\n { path: 'Stack.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n grid: {\n name: 'grid',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Grid',\n description: 'Responsive grid layout',\n files: [\n { path: 'Grid.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n container: {\n name: 'container',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Container',\n description: 'Centered content container',\n files: [\n { path: 'Container.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n divider: {\n name: 'divider',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Divider',\n description: 'Visual separator',\n files: [\n { path: 'Divider.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Data\n 'data-table': {\n name: 'data-table',\n version: '1.0.0',\n category: 'data',\n displayName: 'Data Table',\n description: 'Full-featured data table with sorting, filtering, pagination',\n files: [\n { path: 'DataTable.tsx', type: 'component' },\n { path: 'DataTable.types.ts', type: 'types' },\n { path: 'DataTableToolbar.tsx', type: 'component' },\n { path: 'DataTablePagination.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', '@tanstack/react-table'],\n components: ['button', 'text-field', 'select', 'checkbox', 'menu'],\n },\n hasVariants: true,\n docs: 'https://docs.prism.omnitron.dev/components/data-table',\n },\n table: {\n name: 'table',\n version: '1.0.0',\n category: 'data',\n displayName: 'Table',\n description: 'Basic table component',\n files: [\n { path: 'Table.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n list: {\n name: 'list',\n version: '1.0.0',\n category: 'data',\n displayName: 'List',\n description: 'Vertical list of items',\n files: [\n { path: 'List.tsx', type: 'component' },\n { path: 'ListItem.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n },\n blocks: {\n // Dashboard blocks\n 'dashboard-layout': {\n name: 'dashboard-layout',\n version: '1.0.0',\n category: 'layouts',\n displayName: 'Dashboard Layout',\n description: 'Complete dashboard layout with sidebar and header',\n files: [\n { path: 'DashboardLayout.tsx', type: 'component' },\n { path: 'DashboardLayout.types.ts', type: 'type' },\n { path: 'Sidebar.tsx', type: 'component' },\n { path: 'Header.tsx', type: 'component' },\n { path: 'NavSection.tsx', type: 'component' },\n { path: 'NavItem.tsx', type: 'component' },\n { path: 'useDashboard.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'framer-motion'],\n components: ['avatar', 'menu', 'icon-button', 'tooltip'],\n blocks: [],\n },\n defaultConfig: {\n sidebarWidth: 280,\n headerHeight: 64,\n collapsedWidth: 72,\n },\n docs: 'https://docs.prism.omnitron.dev/blocks/dashboard-layout',\n },\n 'auth-forms': {\n name: 'auth-forms',\n version: '1.0.0',\n category: 'auth',\n displayName: 'Authentication Forms',\n description: 'Login, register, forgot password, and verify forms',\n files: [\n { path: 'LoginForm.tsx', type: 'component' },\n { path: 'RegisterForm.tsx', type: 'component' },\n { path: 'ForgotPasswordForm.tsx', type: 'component' },\n { path: 'VerifyCodeForm.tsx', type: 'component' },\n { path: 'auth.schema.ts', type: 'schema' },\n { path: 'useAuthForm.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'react-hook-form', '@hookform/resolvers', 'zod'],\n components: ['button', 'text-field', 'checkbox', 'alert'],\n blocks: [],\n },\n defaultConfig: {\n showSocialLogin: true,\n showRememberMe: true,\n },\n },\n 'settings-panel': {\n name: 'settings-panel',\n version: '1.0.0',\n category: 'settings',\n displayName: 'Settings Panel',\n description: 'Theme settings panel with live preview',\n files: [\n { path: 'SettingsPanel.tsx', type: 'component' },\n { path: 'SettingsDrawer.tsx', type: 'component' },\n { path: 'ThemePreview.tsx', type: 'component' },\n { path: 'useSettings.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'framer-motion'],\n components: ['button', 'switch', 'select', 'icon-button'],\n blocks: [],\n },\n defaultConfig: {\n position: 'right',\n },\n },\n 'user-profile': {\n name: 'user-profile',\n version: '1.0.0',\n category: 'data',\n displayName: 'User Profile',\n description: 'User profile page with avatar, info, and settings',\n files: [\n { path: 'ProfilePage.tsx', type: 'component' },\n { path: 'ProfileHeader.tsx', type: 'component' },\n { path: 'ProfileTabs.tsx', type: 'component' },\n { path: 'AccountTab.tsx', type: 'component' },\n { path: 'SecurityTab.tsx', type: 'component' },\n { path: 'NotificationsTab.tsx', type: 'component' },\n { path: 'useProfile.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'react-hook-form'],\n components: ['avatar', 'button', 'tabs', 'card', 'text-field', 'switch'],\n blocks: [],\n },\n defaultConfig: {},\n },\n 'data-grid': {\n name: 'data-grid',\n version: '1.0.0',\n category: 'data',\n displayName: 'Data Grid',\n description: 'Advanced data grid with server-side features',\n files: [\n { path: 'DataGrid.tsx', type: 'component' },\n { path: 'DataGrid.types.ts', type: 'type' },\n { path: 'GridToolbar.tsx', type: 'component' },\n { path: 'GridFilters.tsx', type: 'component' },\n { path: 'GridExport.tsx', type: 'component' },\n { path: 'useDataGrid.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', '@tanstack/react-table', '@tanstack/react-virtual'],\n components: ['button', 'text-field', 'select', 'checkbox', 'menu', 'chip'],\n blocks: [],\n },\n defaultConfig: {\n pageSize: 25,\n enableColumnResize: true,\n enableColumnReorder: true,\n },\n },\n },\n themes: {},\n};\n","/**\n * Prism CLI - Add Command\n *\n * Add components or blocks to your project.\n *\n * @module cli/commands/add\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log } from '../constants.js';\nimport { loadConfig, getComponentPath, getBlockPath, type PrismConfig } from '../config.js';\nimport { defaultRegistrySchema } from '../../registry/index.js';\nimport type { ComponentDefinition } from '../../types/registry.js';\n\ninterface AddOptions {\n cwd?: string;\n yes?: boolean;\n overwrite?: boolean;\n all?: boolean;\n path?: string;\n install?: boolean;\n}\n\ninterface AddResult {\n name: string;\n success: boolean;\n error?: string;\n npmDeps?: string[];\n}\n\n/**\n * Create the add command.\n */\nexport function addCommand(): Command {\n const command = new Command('add');\n\n command\n .description('Add components or blocks to your project')\n .argument('[items...]', 'Components or blocks to add')\n .option('-y, --yes', 'Skip confirmation prompts')\n .option('-o, --overwrite', 'Overwrite existing files')\n .option('-a, --all', 'Add all available components')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .option('-p, --path <path>', 'Custom output path')\n .option('-i, --install', 'Auto-install npm dependencies')\n .action(async (items: string[], options: AddOptions) => {\n await runAdd(items, options);\n });\n\n return command;\n}\n\n/**\n * Run the add command.\n */\nasync function runAdd(items: string[], options: AddOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n log.error('No prism.config.json found. Run `prism init` first.');\n process.exit(1);\n }\n\n // Determine what to add\n let itemsToAdd: string[] = items;\n\n if (options.all) {\n itemsToAdd = [\n ...Object.keys(defaultRegistrySchema.components),\n ...Object.keys(defaultRegistrySchema.blocks).map((b) => `block:${b}`),\n ];\n }\n\n if (itemsToAdd.length === 0) {\n log.error('No items specified. Use `prism add <component>` or `prism add --all`');\n log.info('Run `prism list` to see available components.');\n process.exit(1);\n }\n\n console.log('');\n log.info(`Adding ${itemsToAdd.length} item(s)...`);\n console.log('');\n\n const results: AddResult[] = [];\n const allNpmDeps = new Set<string>();\n\n for (const item of itemsToAdd) {\n try {\n const result = await addItem(item, config, options);\n results.push(result);\n // Collect npm dependencies\n if (result.npmDeps) {\n for (const dep of result.npmDeps) {\n allNpmDeps.add(dep);\n }\n }\n } catch (error) {\n results.push({\n name: item,\n success: false,\n error: (error as Error).message,\n });\n }\n }\n\n // Summary\n console.log('');\n const successCount = results.filter((r) => r.success).length;\n const failCount = results.filter((r) => !r.success).length;\n\n if (successCount > 0) {\n log.success(`Added ${successCount} item(s) successfully.`);\n }\n if (failCount > 0) {\n log.error(`Failed to add ${failCount} item(s).`);\n for (const result of results.filter((r) => !r.success)) {\n log.muted(` - ${result.name}: ${result.error}`);\n }\n }\n\n // Display npm dependencies to install\n if (allNpmDeps.size > 0) {\n console.log('');\n log.info('Required npm dependencies:');\n const depsArray = Array.from(allNpmDeps).sort();\n for (const dep of depsArray) {\n log.muted(` - ${dep}`);\n }\n console.log('');\n log.info('Install with:');\n log.muted(` npm install ${depsArray.join(' ')}`);\n log.muted(` # or`);\n log.muted(` pnpm add ${depsArray.join(' ')}`);\n\n // Auto-install if requested\n if ((options.install || options.yes) && allNpmDeps.size > 0) {\n const pm = detectPackageManager(cwd);\n const installCmd = pm === 'pnpm' ? 'pnpm add' : pm === 'yarn' ? 'yarn add' : 'npm install';\n log.info(`Installing dependencies with ${pm}...`);\n try {\n const { execSync } = await import('node:child_process');\n execSync(`${installCmd} ${depsArray.join(' ')}`, {\n cwd,\n stdio: 'inherit',\n });\n log.success('Dependencies installed successfully.');\n } catch {\n log.warning('Auto-install failed. Please install dependencies manually.');\n }\n }\n }\n console.log('');\n}\n\n/**\n * Detect the package manager used in the project.\n */\nfunction detectPackageManager(cwd: string): 'pnpm' | 'yarn' | 'npm' {\n if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (fs.existsSync(path.join(cwd, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\n/**\n * Add a single item (component or block).\n */\nasync function addItem(item: string, config: PrismConfig, options: AddOptions): Promise<AddResult> {\n // Check if it's a block (prefixed with \"block:\")\n const isBlock = item.startsWith('block:');\n const itemName = isBlock ? item.slice(6) : item;\n\n // Look up the item in the registry\n const registry = isBlock ? defaultRegistrySchema.blocks : defaultRegistrySchema.components;\n\n const definition = registry[itemName] as ComponentDefinition | undefined;\n if (!definition) {\n return {\n name: item,\n success: false,\n error: `Not found in registry. Run 'prism list' to see available items.`,\n };\n }\n\n // Determine output path\n const outputPath = options.path\n ? path.join(config.rootDir, options.path, itemName)\n : isBlock\n ? getBlockPath(itemName, config)\n : getComponentPath(itemName, config);\n\n // Check if already exists\n if (fs.existsSync(outputPath) && !options.overwrite) {\n return {\n name: item,\n success: false,\n error: `Already exists at ${path.relative(config.rootDir, outputPath)}. Use --overwrite to replace.`,\n };\n }\n\n // Create directory\n await fs.promises.mkdir(outputPath, { recursive: true });\n\n // Generate files based on registry definition\n for (const file of definition.files) {\n const filePath = path.join(outputPath, file.path);\n const content = generateFileContent(itemName, file.path, file.type, definition, isBlock);\n await fs.promises.writeFile(filePath, content, 'utf-8');\n }\n\n log.success(`Added ${itemName} → ${path.relative(config.rootDir, outputPath)}/`);\n\n // Update lockfile\n await updateLockfile(config.rootDir, itemName, definition.version, isBlock);\n\n // Collect npm dependencies\n const npmDeps: string[] = [];\n if ('dependencies' in definition && definition.dependencies?.npm) {\n npmDeps.push(...definition.dependencies.npm);\n }\n\n return { name: item, success: true, npmDeps };\n}\n\n/**\n * Update the lockfile after adding an item.\n */\nasync function updateLockfile(rootDir: string, name: string, version: string, isBlock: boolean): Promise<void> {\n const lockfilePath = path.join(rootDir, 'prism.lock.json');\n\n let lockfile: {\n version: string;\n components: Record<string, { name: string; version: string; installedAt: string }>;\n blocks: Record<string, { name: string; version: string; installedAt: string }>;\n } = {\n version: '1',\n components: {},\n blocks: {},\n };\n\n // Load existing lockfile if present\n if (fs.existsSync(lockfilePath)) {\n try {\n lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n } catch {\n // Use default lockfile on parse error\n }\n }\n\n // Add the new item\n const entry = {\n name,\n version,\n installedAt: new Date().toISOString(),\n };\n\n if (isBlock) {\n lockfile.blocks[name] = entry;\n } else {\n lockfile.components[name] = entry;\n }\n\n // Write lockfile\n await fs.promises.writeFile(lockfilePath, JSON.stringify(lockfile, null, 2) + '\\n', 'utf-8');\n}\n\n// =============================================================================\n// TEMPLATE GENERATORS\n// =============================================================================\n\n/**\n * Convert kebab-case to PascalCase.\n */\nexport function toPascalCase(name: string): string {\n return name\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\n/**\n * Convert kebab-case to camelCase.\n */\nfunction toCamelCase(name: string): string {\n const pascal = toPascalCase(name);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Generate file content based on type.\n */\nexport function generateFileContent(\n name: string,\n fileName: string,\n fileType: string,\n definition: ComponentDefinition,\n isBlock: boolean\n): string {\n const pascalName = toPascalCase(name);\n const camelName = toCamelCase(name);\n\n // Barrel export (index.ts)\n if (fileName === 'index.ts') {\n return generateBarrelExport(definition, pascalName);\n }\n\n // Type definitions\n if (fileType === 'types' || fileName.endsWith('.types.ts')) {\n return generateTypeDefinitions(name, pascalName, definition);\n }\n\n // Hook file\n if (fileType === 'hook' || fileName.startsWith('use')) {\n const hookName = fileName.replace('.ts', '');\n return generateHook(hookName, pascalName, definition, isBlock);\n }\n\n // Schema file (for forms)\n if (fileType === 'schema' || fileName.endsWith('.schema.ts')) {\n return generateSchema(name, pascalName, definition);\n }\n\n // Component file\n return generateComponent(name, pascalName, camelName, fileName, definition, isBlock);\n}\n\n/**\n * Generate barrel export file.\n */\nfunction generateBarrelExport(definition: ComponentDefinition, pascalName: string): string {\n const exports: string[] = [];\n\n for (const file of definition.files) {\n if (file.path === 'index.ts') continue;\n\n const moduleName = file.path.replace(/\\.tsx?$/, '.js');\n\n if (file.type === 'types' || file.path.endsWith('.types.ts')) {\n exports.push(`export type * from './${moduleName}';`);\n } else {\n exports.push(`export * from './${moduleName}';`);\n }\n }\n\n return `/**\n * ${definition.displayName || pascalName}\n *\n * ${definition.description || ''}\n *\n * @module components/${definition.name}\n */\n\n${exports.join('\\n')}\n`;\n}\n\n/**\n * Generate TypeScript type definitions.\n */\nfunction generateTypeDefinitions(name: string, pascalName: string, definition: ComponentDefinition): string {\n const muiComponent = getMuiComponent(name);\n\n return `/**\n * ${pascalName} Type Definitions\n *\n * @module components/${name}\n */\n\nimport type { ${muiComponent}Props as Mui${muiComponent}Props } from '@mui/material/${muiComponent}';\n\n/**\n * Props for the ${pascalName} component.\n * Extends MUI ${muiComponent} with Prism-specific options.\n */\nexport interface ${pascalName}Props extends Mui${muiComponent}Props {\n /**\n * Additional CSS class name.\n */\n className?: string;\n}\n\n/**\n * Ref type for ${pascalName} component.\n */\nexport type ${pascalName}Ref = HTMLDivElement;\n`;\n}\n\n/**\n * Generate React hook.\n */\nfunction generateHook(hookName: string, pascalName: string, definition: ComponentDefinition, isBlock: boolean): string {\n const camelHook = toCamelCase(hookName);\n\n if (isBlock) {\n return generateBlockHook(hookName, pascalName, definition);\n }\n\n return `/**\n * ${hookName} Hook\n *\n * Custom hook for ${definition.displayName || pascalName} component logic.\n *\n * @module components/${definition.name}\n */\n\nimport { useState, useCallback, useMemo } from 'react';\n\n/**\n * Options for ${camelHook} hook.\n */\nexport interface ${toPascalCase(hookName)}Options {\n /**\n * Initial state value.\n */\n initialValue?: boolean;\n}\n\n/**\n * Return type for ${camelHook} hook.\n */\nexport interface ${toPascalCase(hookName)}Return {\n /**\n * Current state value.\n */\n value: boolean;\n /**\n * Set value to true.\n */\n onOpen: () => void;\n /**\n * Set value to false.\n */\n onClose: () => void;\n /**\n * Toggle the value.\n */\n onToggle: () => void;\n}\n\n/**\n * Hook for managing ${definition.displayName || pascalName} state.\n *\n * @param options - Hook options\n * @returns State and handlers\n *\n * @example\n * \\`\\`\\`tsx\n * function Example() {\n * const { value, onOpen, onClose, onToggle } = ${camelHook}();\n *\n * return (\n * <button onClick={onToggle}>\n * {value ? 'Open' : 'Closed'}\n * </button>\n * );\n * }\n * \\`\\`\\`\n */\nexport function ${camelHook}(options: ${toPascalCase(hookName)}Options = {}): ${toPascalCase(hookName)}Return {\n const { initialValue = false } = options;\n\n const [value, setValue] = useState(initialValue);\n\n const onOpen = useCallback(() => setValue(true), []);\n const onClose = useCallback(() => setValue(false), []);\n const onToggle = useCallback(() => setValue((prev) => !prev), []);\n\n return useMemo(\n () => ({ value, onOpen, onClose, onToggle }),\n [value, onOpen, onClose, onToggle]\n );\n}\n`;\n}\n\n/**\n * Generate block-specific hook.\n */\nfunction generateBlockHook(hookName: string, pascalName: string, definition: ComponentDefinition): string {\n const camelHook = toCamelCase(hookName);\n\n return `/**\n * ${hookName} Hook\n *\n * State management hook for ${definition.displayName || pascalName} block.\n *\n * @module blocks/${definition.name}\n */\n\nimport { useState, useCallback, useMemo, useContext, createContext } from 'react';\nimport type { ReactNode } from 'react';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * State for ${pascalName} block.\n */\nexport interface ${pascalName}State {\n /**\n * Whether the sidebar/panel is open.\n */\n isOpen: boolean;\n /**\n * Whether the sidebar/panel is collapsed.\n */\n isCollapsed: boolean;\n}\n\n/**\n * Actions for ${pascalName} block.\n */\nexport interface ${pascalName}Actions {\n /**\n * Open the sidebar/panel.\n */\n open: () => void;\n /**\n * Close the sidebar/panel.\n */\n close: () => void;\n /**\n * Toggle open state.\n */\n toggle: () => void;\n /**\n * Collapse the sidebar.\n */\n collapse: () => void;\n /**\n * Expand the sidebar.\n */\n expand: () => void;\n /**\n * Toggle collapsed state.\n */\n toggleCollapse: () => void;\n}\n\n/**\n * Context value for ${pascalName}.\n */\nexport interface ${pascalName}ContextValue extends ${pascalName}State, ${pascalName}Actions {}\n\n/**\n * Options for ${camelHook} hook.\n */\nexport interface ${toPascalCase(hookName)}Options {\n /**\n * Initial open state.\n */\n defaultOpen?: boolean;\n /**\n * Initial collapsed state.\n */\n defaultCollapsed?: boolean;\n}\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst ${pascalName}Context = createContext<${pascalName}ContextValue | null>(null);\n\n/**\n * Provider props.\n */\nexport interface ${pascalName}ProviderProps extends ${toPascalCase(hookName)}Options {\n children: ReactNode;\n}\n\n/**\n * Provider component for ${pascalName} context.\n */\nexport function ${pascalName}Provider({\n children,\n defaultOpen = true,\n defaultCollapsed = false,\n}: ${pascalName}ProviderProps) {\n const value = ${camelHook}({ defaultOpen, defaultCollapsed });\n\n return (\n <${pascalName}Context.Provider value={value}>\n {children}\n </${pascalName}Context.Provider>\n );\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\n/**\n * Hook for managing ${definition.displayName || pascalName} state.\n *\n * @param options - Hook options\n * @returns State and actions\n *\n * @example\n * \\`\\`\\`tsx\n * function ${pascalName}() {\n * const { isOpen, isCollapsed, toggle, toggleCollapse } = ${camelHook}();\n *\n * return (\n * <div>\n * <button onClick={toggle}>Toggle Open</button>\n * <button onClick={toggleCollapse}>Toggle Collapse</button>\n * </div>\n * );\n * }\n * \\`\\`\\`\n */\nexport function ${camelHook}(\n options: ${toPascalCase(hookName)}Options = {}\n): ${pascalName}ContextValue {\n const context = useContext(${pascalName}Context);\n\n const { defaultOpen = true, defaultCollapsed = false } = options;\n\n const [isOpen, setIsOpen] = useState(context?.isOpen ?? defaultOpen);\n const [isCollapsed, setIsCollapsed] = useState(context?.isCollapsed ?? defaultCollapsed);\n\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((prev) => !prev), []);\n\n const collapse = useCallback(() => setIsCollapsed(true), []);\n const expand = useCallback(() => setIsCollapsed(false), []);\n const toggleCollapse = useCallback(() => setIsCollapsed((prev) => !prev), []);\n\n return useMemo(\n () => ({\n isOpen,\n isCollapsed,\n open,\n close,\n toggle,\n collapse,\n expand,\n toggleCollapse,\n }),\n [isOpen, isCollapsed, open, close, toggle, collapse, expand, toggleCollapse]\n );\n}\n\n/**\n * Hook to consume ${pascalName} context.\n * Must be used within a ${pascalName}Provider.\n */\nexport function use${pascalName}Context(): ${pascalName}ContextValue {\n const context = useContext(${pascalName}Context);\n\n if (!context) {\n throw new Error('use${pascalName}Context must be used within a ${pascalName}Provider');\n }\n\n return context;\n}\n`;\n}\n\n/**\n * Generate Zod schema for forms.\n */\nfunction generateSchema(name: string, pascalName: string, definition: ComponentDefinition): string {\n return `/**\n * ${pascalName} Schema\n *\n * Zod validation schemas for ${definition.displayName || pascalName} forms.\n *\n * @module blocks/${definition.name}\n */\n\nimport { z } from 'zod';\n\n/**\n * Login form schema.\n */\nexport const loginSchema = z.object({\n email: z\n .string()\n .min(1, 'Email is required')\n .email('Invalid email address'),\n password: z\n .string()\n .min(1, 'Password is required')\n .min(8, 'Password must be at least 8 characters'),\n rememberMe: z.boolean().optional(),\n});\n\n/**\n * Login form values type.\n */\nexport type LoginFormValues = z.infer<typeof loginSchema>;\n\n/**\n * Register form schema.\n */\nexport const registerSchema = z\n .object({\n firstName: z.string().min(1, 'First name is required'),\n lastName: z.string().min(1, 'Last name is required'),\n email: z\n .string()\n .min(1, 'Email is required')\n .email('Invalid email address'),\n password: z\n .string()\n .min(1, 'Password is required')\n .min(8, 'Password must be at least 8 characters'),\n confirmPassword: z.string().min(1, 'Please confirm your password'),\n acceptTerms: z.literal(true, {\n errorMap: () => ({ message: 'You must accept the terms' }),\n }),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n });\n\n/**\n * Register form values type.\n */\nexport type RegisterFormValues = z.infer<typeof registerSchema>;\n\n/**\n * Forgot password form schema.\n */\nexport const forgotPasswordSchema = z.object({\n email: z\n .string()\n .min(1, 'Email is required')\n .email('Invalid email address'),\n});\n\n/**\n * Forgot password form values type.\n */\nexport type ForgotPasswordFormValues = z.infer<typeof forgotPasswordSchema>;\n\n/**\n * Verify code form schema.\n */\nexport const verifyCodeSchema = z.object({\n code: z\n .string()\n .min(1, 'Code is required')\n .length(6, 'Code must be 6 digits'),\n});\n\n/**\n * Verify code form values type.\n */\nexport type VerifyCodeFormValues = z.infer<typeof verifyCodeSchema>;\n`;\n}\n\n/**\n * Generate React component.\n */\nfunction generateComponent(\n name: string,\n pascalName: string,\n camelName: string,\n fileName: string,\n definition: ComponentDefinition,\n isBlock: boolean\n): string {\n const componentName = fileName.replace(/\\.tsx$/, '');\n const componentPascal = toPascalCase(componentName.replace(pascalName, '')) || pascalName;\n const muiComponent = getMuiComponent(name);\n\n if (isBlock) {\n return generateBlockComponent(name, componentName, componentPascal, definition);\n }\n\n return `'use client';\n\n/**\n * ${componentPascal} Component\n *\n * ${definition.description || ''}\n *\n * @module components/${definition.name}\n * @see https://mui.com/material-ui/react-${name}/\n */\n\nimport Mui${muiComponent} from '@mui/material/${muiComponent}';\nimport type { ${muiComponent}Props as Mui${muiComponent}Props } from '@mui/material/${muiComponent}';\nimport { clsx } from 'clsx';\n\n/**\n * Props for the ${componentPascal} component.\n */\nexport interface ${componentPascal}Props extends Mui${muiComponent}Props {\n /**\n * Additional CSS class name.\n */\n className?: string;\n}\n\n/**\n * ${definition.displayName || componentPascal} component.\n *\n * A wrapper around MUI ${muiComponent} with Prism design system styling.\n *\n * @example\n * \\`\\`\\`tsx\n * <${componentPascal} variant=\"contained\" color=\"primary\">\n * Click me\n * </${componentPascal}>\n * \\`\\`\\`\n */\n// React 19 passes ref through props directly — a plain function\n// component is sufficient and keeps the call site free of the\n// extra displayName line that forwardRef demanded for DevTools.\nexport function ${componentPascal}({ className, ...props }: ${componentPascal}Props) {\n return (\n <Mui${muiComponent}\n className={clsx('prism-${name}', className)}\n {...props}\n />\n );\n}\n`;\n}\n\n/**\n * Generate block component.\n */\nfunction generateBlockComponent(\n name: string,\n componentName: string,\n componentPascal: string,\n definition: ComponentDefinition\n): string {\n return `'use client';\n\n/**\n * ${componentPascal} Component\n *\n * ${definition.description || ''}\n *\n * @module blocks/${definition.name}\n */\n\nimport type { ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport type { BoxProps } from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\nimport { clsx } from 'clsx';\n\n/**\n * Props for the ${componentPascal} component.\n */\nexport interface ${componentPascal}Props extends Omit<BoxProps, 'children'> {\n /**\n * Content to render inside the component.\n */\n children?: ReactNode;\n /**\n * Additional CSS class name.\n */\n className?: string;\n}\n\n/**\n * Styled root component.\n */\nconst ${componentPascal}Root = styled(Box)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n backgroundColor: theme.palette.background.default,\n}));\n\n/**\n * ${definition.displayName || componentPascal} component.\n *\n * @example\n * \\`\\`\\`tsx\n * <${componentPascal}>\n * <Header />\n * <Sidebar />\n * <Main />\n * </${componentPascal}>\n * \\`\\`\\`\n */\n// React 19 passes ref through props directly. No forwardRef\n// wrapper, no displayName follow-up needed — the function name\n// is what DevTools reads.\nexport function ${componentPascal}({ className, children, ...props }: ${componentPascal}Props) {\n return (\n <${componentPascal}Root\n className={clsx('prism-${name}', className)}\n {...props}\n >\n {children}\n </${componentPascal}Root>\n );\n}\n`;\n}\n\n/**\n * Get the MUI component name for a Prism component.\n */\nfunction getMuiComponent(name: string): string {\n const mapping: Record<string, string> = {\n button: 'Button',\n 'icon-button': 'IconButton',\n 'text-field': 'TextField',\n select: 'Select',\n checkbox: 'Checkbox',\n switch: 'Switch',\n avatar: 'Avatar',\n badge: 'Badge',\n chip: 'Chip',\n tooltip: 'Tooltip',\n alert: 'Alert',\n snackbar: 'Snackbar',\n dialog: 'Dialog',\n progress: 'CircularProgress',\n card: 'Card',\n paper: 'Paper',\n accordion: 'Accordion',\n tabs: 'Tabs',\n breadcrumbs: 'Breadcrumbs',\n menu: 'Menu',\n stack: 'Stack',\n grid: 'Grid',\n container: 'Container',\n divider: 'Divider',\n 'data-table': 'Table',\n table: 'Table',\n list: 'List',\n };\n\n return mapping[name] || toPascalCase(name);\n}\n","/**\n * Prism CLI\n *\n * Command-line interface for the Prism design system.\n * Provides shadcn/ui-style component installation and management.\n *\n * @module @omnitron-dev/prism/cli\n */\n\nimport { Command } from 'commander';\nimport { addCommand } from './commands/add.js';\nimport { initCommand } from './commands/init.js';\nimport { listCommand } from './commands/list.js';\nimport { diffCommand } from './commands/diff.js';\nimport { updateCommand } from './commands/update.js';\nimport { removeCommand } from './commands/remove.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { PRISM_VERSION } from './constants.js';\n\n/**\n * Create and configure the Prism CLI.\n */\nexport function createCli(): Command {\n const program = new Command();\n\n program\n .name('prism')\n .description('Prism Design System CLI - Component installation and management')\n .version(PRISM_VERSION, '-v, --version', 'Display the current version');\n\n // Add commands\n program.addCommand(initCommand());\n program.addCommand(addCommand());\n program.addCommand(removeCommand());\n program.addCommand(listCommand());\n program.addCommand(diffCommand());\n program.addCommand(updateCommand());\n program.addCommand(doctorCommand());\n\n return program;\n}\n\n/**\n * Run the CLI with process arguments.\n */\nexport async function cli(): Promise<void> {\n const program = createCli();\n await program.parseAsync(process.argv);\n}\n\n// Export for programmatic use\nexport { addCommand } from './commands/add.js';\nexport { removeCommand } from './commands/remove.js';\nexport { initCommand } from './commands/init.js';\nexport { listCommand } from './commands/list.js';\nexport { diffCommand } from './commands/diff.js';\nexport { updateCommand } from './commands/update.js';\nexport { doctorCommand } from './commands/doctor.js';\nexport { PRISM_VERSION, DEFAULT_CONFIG } from './constants.js';\nexport type { PrismConfig, PrismConfigSchema } from './config.js';\n","/**\n * Prism CLI - Init Command\n *\n * Initialize a new Prism project with configuration.\n *\n * @module cli/commands/init\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as readline from 'node:readline';\nimport {\n CONFIG_FILE_NAME,\n DEFAULT_CONFIG,\n DEFAULT_COMPONENTS_DIR,\n DEFAULT_BLOCKS_DIR,\n DEFAULT_HOOKS_DIR,\n DEFAULT_UTILS_DIR,\n log,\n} from '../constants.js';\nimport { findConfigFile, saveConfig, type PrismConfigSchema } from '../config.js';\n\n/**\n * Prompt user for input.\n */\nasync function prompt(question: string, defaultValue?: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const displayQuestion = defaultValue ? `${question} (${defaultValue}): ` : `${question}: `;\n\n rl.question(displayQuestion, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultValue || '');\n });\n });\n}\n\n/**\n * Prompt user for yes/no confirmation.\n */\nasync function confirm(question: string, defaultValue: boolean = true): Promise<boolean> {\n const hint = defaultValue ? '(Y/n)' : '(y/N)';\n const answer = await prompt(`${question} ${hint}`);\n\n if (!answer) {\n return defaultValue;\n }\n\n return ['y', 'yes', 'да'].includes(answer.toLowerCase());\n}\n\ninterface InitOptions {\n yes?: boolean;\n defaults?: boolean;\n cwd?: string;\n}\n\n/**\n * Create the init command.\n */\nexport function initCommand(): Command {\n const command = new Command('init');\n\n command\n .description('Initialize Prism in your project')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('-d, --defaults', 'Use default configuration')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (options: InitOptions) => {\n await runInit(options);\n });\n\n return command;\n}\n\n/**\n * Run the init command.\n */\nasync function runInit(options: InitOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n console.log('');\n log.info('Initializing Prism...');\n console.log('');\n\n // Check for existing config\n const existingConfig = findConfigFile(cwd);\n if (existingConfig) {\n log.warning(`Config already exists at ${existingConfig}`);\n const overwrite = options.yes || (await confirm('Overwrite existing configuration?', false));\n if (!overwrite) {\n log.info('Initialization cancelled.');\n return;\n }\n }\n\n let config: PrismConfigSchema;\n\n if (options.yes || options.defaults) {\n // Use defaults\n config = { ...DEFAULT_CONFIG };\n } else {\n // Interactive prompts\n config = await interactiveInit(cwd);\n }\n\n // Create directories\n const dirs = [\n path.join(cwd, DEFAULT_COMPONENTS_DIR),\n path.join(cwd, DEFAULT_BLOCKS_DIR),\n path.join(cwd, DEFAULT_HOOKS_DIR),\n path.join(cwd, DEFAULT_UTILS_DIR),\n ];\n\n for (const dir of dirs) {\n if (!fs.existsSync(dir)) {\n await fs.promises.mkdir(dir, { recursive: true });\n log.success(`Created ${path.relative(cwd, dir)}/`);\n }\n }\n\n // Save config\n const configPath = path.join(cwd, CONFIG_FILE_NAME);\n await saveConfig(config, configPath);\n log.success(`Created ${CONFIG_FILE_NAME}`);\n\n console.log('');\n log.success('Prism initialized successfully!');\n console.log('');\n log.info('Next steps:');\n console.log(' 1. Run `prism add button` to add your first component');\n console.log(' 2. Run `prism list` to see available components');\n console.log(' 3. Visit https://prism.omnitron.dev/docs for documentation');\n console.log('');\n}\n\n/**\n * Interactive initialization with prompts.\n */\nasync function interactiveInit(cwd: string): Promise<PrismConfigSchema> {\n console.log('This will guide you through configuring Prism for your project.\\n');\n\n // Style\n const styleAnswer = await prompt('Which style would you like to use? (default/new-york)', 'default');\n const style = styleAnswer === 'new-york' ? 'new-york' : 'default';\n\n // Components alias\n const componentsAlias = await prompt('Where should components be installed?', '@/components/ui');\n\n // Blocks alias\n const blocksAlias = await prompt('Where should blocks be installed?', '@/blocks');\n\n // Hooks alias\n const hooksAlias = await prompt('Where should hooks be installed?', '@/hooks');\n\n // Utils alias\n const utilsAlias = await prompt('Where should utils be installed?', '@/utils');\n\n // Check for Tailwind config\n const tailwindConfigPath = path.join(cwd, 'tailwind.config.js');\n const tailwindTsConfigPath = path.join(cwd, 'tailwind.config.ts');\n const hasTailwind = fs.existsSync(tailwindConfigPath) || fs.existsSync(tailwindTsConfigPath);\n\n let tailwindConfig: PrismConfigSchema['tailwind'];\n\n if (hasTailwind) {\n const useTailwind = await confirm('Tailwind CSS detected. Configure CSS variables?', true);\n if (useTailwind) {\n const cssFile = await prompt('Where is your global CSS file?', 'src/index.css');\n const baseColor = await prompt('What base color would you like?', 'slate');\n\n tailwindConfig = {\n config: fs.existsSync(tailwindTsConfigPath) ? 'tailwind.config.ts' : 'tailwind.config.js',\n css: cssFile,\n baseColor,\n cssVariables: true,\n };\n }\n }\n\n return {\n $schema: 'https://prism.omnitron.dev/schema.json',\n style,\n tailwind: tailwindConfig,\n aliases: {\n components: componentsAlias,\n blocks: blocksAlias,\n hooks: hooksAlias,\n utils: utilsAlias,\n },\n registries: DEFAULT_CONFIG.registries,\n };\n}\n","/**\n * Prism CLI - List Command\n *\n * List available components and blocks from the registry.\n *\n * @module cli/commands/list\n */\n\nimport { Command } from 'commander';\nimport { COLORS, log, COMPONENT_CATEGORIES, BLOCK_CATEGORIES } from '../constants.js';\nimport { defaultRegistrySchema } from '../../registry/index.js';\n\ninterface ListOptions {\n components?: boolean;\n blocks?: boolean;\n category?: string;\n json?: boolean;\n}\n\n/**\n * Create the list command.\n */\nexport function listCommand(): Command {\n const command = new Command('list');\n\n command\n .description('List available components and blocks')\n .option('-c, --components', 'List only components')\n .option('-b, --blocks', 'List only blocks')\n .option('--category <category>', 'Filter by category')\n .option('--json', 'Output as JSON')\n .action(async (options: ListOptions) => {\n await runList(options);\n });\n\n return command;\n}\n\n/**\n * Run the list command.\n */\nasync function runList(options: ListOptions): Promise<void> {\n const showComponents = options.components || (!options.components && !options.blocks);\n const showBlocks = options.blocks || (!options.components && !options.blocks);\n\n if (options.json) {\n const output = {\n ...(showComponents && { components: defaultRegistrySchema.components }),\n ...(showBlocks && { blocks: defaultRegistrySchema.blocks }),\n };\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n\n console.log('');\n\n if (showComponents) {\n log.info('Available Components:');\n console.log('');\n listItems(defaultRegistrySchema.components, options.category, COMPONENT_CATEGORIES);\n }\n\n if (showBlocks) {\n if (showComponents) console.log('');\n log.info('Available Blocks:');\n console.log('');\n listItems(defaultRegistrySchema.blocks, options.category, BLOCK_CATEGORIES);\n }\n\n console.log('');\n log.muted('Use `prism add <name>` to add a component to your project.');\n log.muted('Use `prism add block:<name>` to add a block to your project.');\n console.log('');\n}\n\n/**\n * List items grouped by category.\n */\nfunction listItems(\n items: Record<string, { name: string; displayName?: string; category: string; description?: string }>,\n filterCategory: string | undefined,\n categoryOrder: readonly string[]\n): void {\n // Group by category\n const byCategory: Record<string, (typeof items)[string][]> = {};\n\n for (const item of Object.values(items)) {\n if (filterCategory && item.category !== filterCategory) {\n continue;\n }\n\n if (!byCategory[item.category]) {\n byCategory[item.category] = [];\n }\n byCategory[item.category].push(item);\n }\n\n // Sort categories\n const sortedCategories = Object.keys(byCategory).sort((a, b) => {\n const aIndex = categoryOrder.indexOf(a as (typeof categoryOrder)[number]);\n const bIndex = categoryOrder.indexOf(b as (typeof categoryOrder)[number]);\n if (aIndex === -1 && bIndex === -1) return a.localeCompare(b);\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n return aIndex - bIndex;\n });\n\n for (const category of sortedCategories) {\n const categoryItems = byCategory[category];\n const categoryTitle = category\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n\n console.log(` ${COLORS.primary}${categoryTitle}${COLORS.reset}`);\n\n for (const item of categoryItems.sort((a, b) => a.name.localeCompare(b.name))) {\n const displayName = item.displayName || item.name;\n const description = item.description ? ` - ${item.description}` : '';\n console.log(\n ` ${COLORS.muted}•${COLORS.reset} ${item.name} ${COLORS.muted}(${displayName})${description}${COLORS.reset}`\n );\n }\n\n console.log('');\n }\n}\n","/**\n * Prism CLI - Diff Command\n *\n * Show differences between local and registry versions.\n *\n * @module cli/commands/diff\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log, COLORS } from '../constants.js';\nimport { loadConfig, getComponentPath, getBlockPath, type PrismConfig } from '../config.js';\nimport { defaultRegistrySchema } from '../../registry/index.js';\n\ninterface DiffOptions {\n cwd?: string;\n}\n\n/**\n * Create the diff command.\n */\nexport function diffCommand(): Command {\n const command = new Command('diff');\n\n command\n .description('Show differences between local and registry versions')\n .argument('[items...]', 'Components or blocks to diff (default: all installed)')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (items: string[], options: DiffOptions) => {\n await runDiff(items, options);\n });\n\n return command;\n}\n\n/**\n * Run the diff command.\n */\nasync function runDiff(items: string[], options: DiffOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n log.error('No prism.config.json found. Run `prism init` first.');\n process.exit(1);\n }\n\n console.log('');\n log.info('Checking for updates...');\n console.log('');\n\n // Find installed items\n const installedItems = await findInstalledItems(config, items);\n\n if (installedItems.length === 0) {\n log.info('No Prism components or blocks found in your project.');\n log.muted('Run `prism add <component>` to add components.');\n return;\n }\n\n // Check each item\n const diffs: { name: string; status: 'up-to-date' | 'outdated' | 'modified' | 'unknown' }[] = [];\n\n for (const item of installedItems) {\n const status = await checkItemStatus(item, config);\n diffs.push({ name: item.name, status });\n }\n\n // Display results\n const upToDate = diffs.filter((d) => d.status === 'up-to-date');\n const outdated = diffs.filter((d) => d.status === 'outdated');\n const modified = diffs.filter((d) => d.status === 'modified');\n const unknown = diffs.filter((d) => d.status === 'unknown');\n\n if (upToDate.length > 0) {\n console.log(`${COLORS.success}Up to date (${upToDate.length}):${COLORS.reset}`);\n for (const item of upToDate) {\n console.log(` ${COLORS.muted}✓${COLORS.reset} ${item.name}`);\n }\n console.log('');\n }\n\n if (modified.length > 0) {\n console.log(`${COLORS.warning}Modified locally (${modified.length}):${COLORS.reset}`);\n for (const item of modified) {\n console.log(` ${COLORS.warning}~${COLORS.reset} ${item.name}`);\n }\n console.log('');\n log.muted('Modified items have local changes. Use --overwrite with update to replace.');\n }\n\n if (outdated.length > 0) {\n console.log(`${COLORS.primary}Updates available (${outdated.length}):${COLORS.reset}`);\n for (const item of outdated) {\n console.log(` ${COLORS.primary}↑${COLORS.reset} ${item.name}`);\n }\n console.log('');\n log.info('Run `prism update` to update outdated components.');\n }\n\n if (unknown.length > 0) {\n console.log(`${COLORS.muted}Unknown (${unknown.length}):${COLORS.reset}`);\n for (const item of unknown) {\n console.log(` ${COLORS.muted}?${COLORS.reset} ${item.name}`);\n }\n console.log('');\n }\n\n console.log('');\n}\n\ninterface InstalledItem {\n name: string;\n type: 'component' | 'block';\n path: string;\n}\n\n/**\n * Find installed Prism items.\n */\nasync function findInstalledItems(config: PrismConfig, filterItems: string[]): Promise<InstalledItem[]> {\n const items: InstalledItem[] = [];\n\n // Check components directory\n const componentsDir = getComponentPath('', config);\n if (fs.existsSync(componentsDir)) {\n const entries = await fs.promises.readdir(componentsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const name = entry.name;\n if (filterItems.length === 0 || filterItems.includes(name)) {\n items.push({\n name,\n type: 'component',\n path: path.join(componentsDir, name),\n });\n }\n }\n }\n }\n\n // Check blocks directory\n const blocksDir = getBlockPath('', config);\n if (fs.existsSync(blocksDir)) {\n const entries = await fs.promises.readdir(blocksDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const name = entry.name;\n if (filterItems.length === 0 || filterItems.includes(name) || filterItems.includes(`block:${name}`)) {\n items.push({\n name,\n type: 'block',\n path: path.join(blocksDir, name),\n });\n }\n }\n }\n }\n\n return items;\n}\n\n/**\n * Check the status of an installed item.\n */\nasync function checkItemStatus(\n item: InstalledItem,\n config: PrismConfig\n): Promise<'up-to-date' | 'outdated' | 'modified' | 'unknown'> {\n // Look up in registry\n const registry = item.type === 'block' ? defaultRegistrySchema.blocks : defaultRegistrySchema.components;\n\n const definition = registry[item.name];\n\n if (!definition) {\n return 'unknown';\n }\n\n // Check for prism.lock.json file to get installed version info\n const lockfilePath = path.join(config.rootDir, 'prism.lock.json');\n let installedVersion: string | undefined;\n\n if (fs.existsSync(lockfilePath)) {\n try {\n const lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n const installed = item.type === 'block' ? lockfile.blocks?.[item.name] : lockfile.components?.[item.name];\n installedVersion = installed?.version;\n } catch {\n // Ignore lockfile errors\n }\n }\n\n // Compare versions\n if (installedVersion && installedVersion !== definition.version) {\n return 'outdated';\n }\n\n // Check if any files were modified by hashing\n const hasModifications = await checkForLocalModifications(item, definition, config);\n\n if (hasModifications) {\n return 'modified';\n }\n\n return 'up-to-date';\n}\n\n/**\n * Check if local files have been modified from the generated templates.\n */\nasync function checkForLocalModifications(\n item: InstalledItem,\n definition: { files: Array<{ path: string }> },\n _config: PrismConfig\n): Promise<boolean> {\n // Check if all expected files exist\n for (const file of definition.files) {\n const filePath = path.join(item.path, file.path);\n if (!fs.existsSync(filePath)) {\n // Missing file = modified (user deleted it)\n return true;\n }\n }\n\n // Check for extra files that weren't in the template\n const localFiles = await fs.promises.readdir(item.path);\n const expectedFiles = new Set(definition.files.map((f) => f.path));\n\n for (const localFile of localFiles) {\n // Ignore common non-generated files\n if (localFile.startsWith('.') || localFile === 'node_modules') {\n continue;\n }\n if (!expectedFiles.has(localFile)) {\n // Extra file added by user\n return true;\n }\n }\n\n return false;\n}\n","/**\n * Prism CLI - Update Command\n *\n * Update installed components and blocks to latest versions.\n *\n * @module cli/commands/update\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log } from '../constants.js';\nimport { loadConfig, getComponentPath, getBlockPath, type PrismConfig } from '../config.js';\nimport { defaultRegistrySchema } from '../../registry/index.js';\n\ninterface UpdateOptions {\n cwd?: string;\n yes?: boolean;\n overwrite?: boolean;\n all?: boolean;\n}\n\n/**\n * Create the update command.\n */\nexport function updateCommand(): Command {\n const command = new Command('update');\n\n command\n .description('Update installed components and blocks')\n .argument('[items...]', 'Components or blocks to update (default: all installed)')\n .option('-y, --yes', 'Skip confirmation prompts')\n .option('-o, --overwrite', 'Overwrite modified files')\n .option('-a, --all', 'Update all installed items')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (items: string[], options: UpdateOptions) => {\n await runUpdate(items, options);\n });\n\n return command;\n}\n\n/**\n * Run the update command.\n */\nasync function runUpdate(items: string[], options: UpdateOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n log.error('No prism.config.json found. Run `prism init` first.');\n process.exit(1);\n }\n\n console.log('');\n log.info('Checking for updates...');\n console.log('');\n\n // Find installed items\n const installedItems = await findInstalledItems(config, items, options.all);\n\n if (installedItems.length === 0) {\n log.info('No Prism components or blocks found to update.');\n return;\n }\n\n // Check for updates\n const toUpdate: { name: string; type: 'component' | 'block'; path: string }[] = [];\n\n for (const item of installedItems) {\n const hasUpdate = await checkForUpdate(item, config);\n if (hasUpdate) {\n toUpdate.push(item);\n }\n }\n\n if (toUpdate.length === 0) {\n log.success('All items are up to date!');\n return;\n }\n\n log.info(`Found ${toUpdate.length} item(s) to update:`);\n for (const item of toUpdate) {\n console.log(` • ${item.name}`);\n }\n console.log('');\n\n // Perform updates\n const results: { name: string; success: boolean; error?: string }[] = [];\n\n for (const item of toUpdate) {\n try {\n await updateItem(item, config, options);\n results.push({ name: item.name, success: true });\n log.success(`Updated ${item.name}`);\n } catch (error) {\n results.push({ name: item.name, success: false, error: (error as Error).message });\n log.error(`Failed to update ${item.name}: ${(error as Error).message}`);\n }\n }\n\n // Summary\n console.log('');\n const successCount = results.filter((r) => r.success).length;\n const failCount = results.filter((r) => !r.success).length;\n\n if (successCount > 0) {\n log.success(`Updated ${successCount} item(s) successfully.`);\n }\n if (failCount > 0) {\n log.error(`Failed to update ${failCount} item(s).`);\n }\n console.log('');\n}\n\ninterface InstalledItem {\n name: string;\n type: 'component' | 'block';\n path: string;\n}\n\n/**\n * Find installed Prism items.\n */\nasync function findInstalledItems(config: PrismConfig, filterItems: string[], all?: boolean): Promise<InstalledItem[]> {\n const items: InstalledItem[] = [];\n\n // Check components directory\n const componentsDir = getComponentPath('', config);\n if (fs.existsSync(componentsDir)) {\n const entries = await fs.promises.readdir(componentsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const name = entry.name;\n if (all || filterItems.length === 0 || filterItems.includes(name)) {\n items.push({\n name,\n type: 'component',\n path: path.join(componentsDir, name),\n });\n }\n }\n }\n }\n\n // Check blocks directory\n const blocksDir = getBlockPath('', config);\n if (fs.existsSync(blocksDir)) {\n const entries = await fs.promises.readdir(blocksDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const name = entry.name;\n if (all || filterItems.length === 0 || filterItems.includes(name) || filterItems.includes(`block:${name}`)) {\n items.push({\n name,\n type: 'block',\n path: path.join(blocksDir, name),\n });\n }\n }\n }\n }\n\n return items;\n}\n\n/**\n * Check if an item has an update available.\n */\nasync function checkForUpdate(item: InstalledItem, config: PrismConfig): Promise<boolean> {\n // Look up in registry\n const registry = item.type === 'block' ? defaultRegistrySchema.blocks : defaultRegistrySchema.components;\n\n const definition = registry[item.name];\n\n if (!definition) {\n return false;\n }\n\n // Check for prism.lock.json file to get installed version info\n const lockfilePath = path.join(config.rootDir, 'prism.lock.json');\n\n if (fs.existsSync(lockfilePath)) {\n try {\n const lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n const installed = item.type === 'block' ? lockfile.blocks?.[item.name] : lockfile.components?.[item.name];\n\n if (installed?.version && installed.version !== definition.version) {\n return true;\n }\n } catch {\n // Ignore lockfile errors, assume update may be needed\n }\n }\n\n return false;\n}\n\n/**\n * Update an item to the latest version.\n */\nasync function updateItem(item: InstalledItem, config: PrismConfig, options: UpdateOptions): Promise<void> {\n // Look up in registry\n const registry = item.type === 'block' ? defaultRegistrySchema.blocks : defaultRegistrySchema.components;\n\n const definition = registry[item.name];\n\n if (!definition) {\n throw new Error('Item not found in registry');\n }\n\n // Backup existing files unless --overwrite\n if (!options.overwrite) {\n const backupDir = path.join(item.path, '.prism-backup');\n await fs.promises.mkdir(backupDir, { recursive: true });\n\n for (const file of definition.files) {\n const filePath = path.join(item.path, file.path);\n if (fs.existsSync(filePath)) {\n const backupPath = path.join(backupDir, file.path);\n await fs.promises.copyFile(filePath, backupPath);\n }\n }\n log.muted(` Backed up ${definition.files.length} file(s) to .prism-backup/`);\n }\n\n // Re-generate files using the template system\n const { generateFileContent } = await import('./add.js');\n\n for (const file of definition.files) {\n const filePath = path.join(item.path, file.path);\n // Cast to ComponentDefinition as the function handles both types\n const content = generateFileContent(\n item.name,\n file.path,\n file.type as string,\n definition as import('../../types/registry.js').ComponentDefinition,\n item.type === 'block'\n );\n await fs.promises.writeFile(filePath, content, 'utf-8');\n }\n\n log.muted(` Updated ${definition.files.length} file(s) in ${path.relative(config.rootDir, item.path)}/`);\n\n // Update lockfile\n const lockfilePath = path.join(config.rootDir, 'prism.lock.json');\n let lockfile: {\n version: string;\n components: Record<string, { name: string; version: string; installedAt: string }>;\n blocks: Record<string, { name: string; version: string; installedAt: string }>;\n } = {\n version: '1',\n components: {},\n blocks: {},\n };\n\n if (fs.existsSync(lockfilePath)) {\n try {\n lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n } catch {\n // Use default lockfile\n }\n }\n\n const entry = {\n name: item.name,\n version: definition.version,\n installedAt: new Date().toISOString(),\n };\n\n if (item.type === 'block') {\n lockfile.blocks[item.name] = entry;\n } else {\n lockfile.components[item.name] = entry;\n }\n\n await fs.promises.writeFile(lockfilePath, JSON.stringify(lockfile, null, 2), 'utf-8');\n}\n","/**\n * Prism CLI - Remove Command\n *\n * Remove components or blocks from your project.\n *\n * @module cli/commands/remove\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log } from '../constants.js';\nimport { loadConfig, getComponentPath, getBlockPath, type PrismConfig } from '../config.js';\n\ninterface RemoveOptions {\n cwd?: string;\n yes?: boolean;\n force?: boolean;\n}\n\n/**\n * Create the remove command.\n */\nexport function removeCommand(): Command {\n const command = new Command('remove');\n\n command\n .description('Remove components or blocks from your project')\n .argument('<items...>', 'Components or blocks to remove')\n .option('-y, --yes', 'Skip confirmation prompts')\n .option('-f, --force', 'Force removal even if files have been modified')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (items: string[], options: RemoveOptions) => {\n await runRemove(items, options);\n });\n\n return command;\n}\n\n/**\n * Run the remove command.\n */\nasync function runRemove(items: string[], options: RemoveOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n // Load config\n const config = await loadConfig(cwd);\n if (!config) {\n log.error('No prism.config.json found. Run `prism init` first.');\n process.exit(1);\n }\n\n if (items.length === 0) {\n log.error('No items specified. Use `prism remove <component>` or `prism remove block:<name>`');\n process.exit(1);\n }\n\n console.log('');\n log.info(`Removing ${items.length} item(s)...`);\n console.log('');\n\n const results: { name: string; success: boolean; error?: string }[] = [];\n\n for (const item of items) {\n try {\n const result = await removeItem(item, config, options);\n results.push(result);\n } catch (error) {\n results.push({\n name: item,\n success: false,\n error: (error as Error).message,\n });\n }\n }\n\n // Summary\n console.log('');\n const successCount = results.filter((r) => r.success).length;\n const failCount = results.filter((r) => !r.success).length;\n\n if (successCount > 0) {\n log.success(`Removed ${successCount} item(s) successfully.`);\n }\n\n if (failCount > 0) {\n log.error(`Failed to remove ${failCount} item(s):`);\n for (const result of results.filter((r) => !r.success)) {\n log.muted(` - ${result.name}: ${result.error}`);\n }\n process.exit(1);\n }\n}\n\n/**\n * Remove a single item (component or block).\n */\nasync function removeItem(\n item: string,\n config: PrismConfig,\n options: RemoveOptions\n): Promise<{ name: string; success: boolean; error?: string }> {\n const isBlock = item.startsWith('block:');\n const name = isBlock ? item.replace('block:', '') : item;\n\n // Get the installed path\n const itemPath = isBlock ? getBlockPath(name, config) : getComponentPath(name, config);\n\n // Check if it exists\n if (!fs.existsSync(itemPath)) {\n return {\n name: item,\n success: false,\n error: `Not installed at ${path.relative(config.rootDir, itemPath)}`,\n };\n }\n\n // Remove the directory\n try {\n await fs.promises.rm(itemPath, { recursive: true, force: true });\n log.success(`Removed ${name} from ${path.relative(config.rootDir, itemPath)}/`);\n\n // Update lockfile\n await updateLockfile(config.rootDir, name, isBlock);\n\n return { name: item, success: true };\n } catch (error) {\n return {\n name: item,\n success: false,\n error: `Failed to remove: ${(error as Error).message}`,\n };\n }\n}\n\n/**\n * Update the lockfile after removing an item.\n */\nasync function updateLockfile(rootDir: string, name: string, isBlock: boolean): Promise<void> {\n const lockfilePath = path.join(rootDir, 'prism.lock.json');\n\n if (!fs.existsSync(lockfilePath)) {\n return;\n }\n\n try {\n const lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8')) as {\n version: string;\n components: Record<string, unknown>;\n blocks: Record<string, unknown>;\n };\n\n if (isBlock) {\n delete lockfile.blocks[name];\n } else {\n delete lockfile.components[name];\n }\n\n await fs.promises.writeFile(lockfilePath, JSON.stringify(lockfile, null, 2) + '\\n', 'utf-8');\n log.muted(` Updated prism.lock.json`);\n } catch {\n log.warning(' Could not update lockfile');\n }\n}\n","/**\n * Prism CLI - Doctor Command\n *\n * Diagnose project configuration and environment.\n *\n * @module cli/commands/doctor\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { log, COLORS } from '../constants.js';\nimport { findConfigFile, loadConfig, resolveAlias, type PrismConfig } from '../config.js';\n\ninterface DoctorOptions {\n cwd?: string;\n}\n\ninterface CheckResult {\n name: string;\n status: 'pass' | 'warn' | 'fail';\n message: string;\n}\n\n/**\n * Create the doctor command.\n */\nexport function doctorCommand(): Command {\n const command = new Command('doctor');\n\n command\n .description('Diagnose project configuration and environment')\n .option('-c, --cwd <path>', 'Working directory', process.cwd())\n .action(async (options: DoctorOptions) => {\n await runDoctor(options);\n });\n\n return command;\n}\n\n/**\n * Run the doctor command.\n */\nasync function runDoctor(options: DoctorOptions): Promise<void> {\n const cwd = options.cwd || process.cwd();\n\n console.log('');\n log.info('Prism Doctor - Checking project health...');\n console.log('');\n\n const checks: CheckResult[] = [];\n\n // 1. Config file\n checks.push(await checkConfigFile(cwd));\n\n // 2. Package.json\n checks.push(...(await checkPackageJson(cwd)));\n\n // 3. Config directories\n const config = await loadConfig(cwd);\n if (config) {\n checks.push(...checkDirectories(config));\n }\n\n // 4. TypeScript config\n checks.push(await checkTsConfig(cwd));\n\n // 5. Lockfile integrity\n checks.push(await checkLockfile(cwd));\n\n // Display results\n console.log('');\n const passCount = checks.filter((c) => c.status === 'pass').length;\n const warnCount = checks.filter((c) => c.status === 'warn').length;\n const failCount = checks.filter((c) => c.status === 'fail').length;\n\n for (const check of checks) {\n const icon =\n check.status === 'pass'\n ? `${COLORS.success}✓${COLORS.reset}`\n : check.status === 'warn'\n ? `${COLORS.warning}⚠${COLORS.reset}`\n : `${COLORS.error}✖${COLORS.reset}`;\n console.log(` ${icon} ${check.name}: ${check.message}`);\n }\n\n console.log('');\n console.log(\n ` ${COLORS.success}${passCount} passed${COLORS.reset}` +\n (warnCount > 0 ? `, ${COLORS.warning}${warnCount} warnings${COLORS.reset}` : '') +\n (failCount > 0 ? `, ${COLORS.error}${failCount} failed${COLORS.reset}` : '')\n );\n console.log('');\n\n if (failCount > 0) {\n process.exit(1);\n }\n}\n\nasync function checkConfigFile(cwd: string): Promise<CheckResult> {\n const configPath = findConfigFile(cwd);\n if (!configPath) {\n return {\n name: 'Config file',\n status: 'fail',\n message: 'prism.config.json not found. Run `prism init` to create one.',\n };\n }\n return {\n name: 'Config file',\n status: 'pass',\n message: `Found at ${path.relative(cwd, configPath)}`,\n };\n}\n\nasync function checkPackageJson(cwd: string): Promise<CheckResult[]> {\n const results: CheckResult[] = [];\n const pkgPath = path.join(cwd, 'package.json');\n\n if (!fs.existsSync(pkgPath)) {\n results.push({\n name: 'package.json',\n status: 'fail',\n message: 'Not found in project root.',\n });\n return results;\n }\n\n try {\n const pkg = JSON.parse(await fs.promises.readFile(pkgPath, 'utf-8'));\n const allDeps = { ...pkg.dependencies, ...pkg.devDependencies, ...pkg.peerDependencies };\n\n const requiredPeers = ['react', 'react-dom', '@mui/material'];\n for (const dep of requiredPeers) {\n if (allDeps[dep]) {\n results.push({\n name: dep,\n status: 'pass',\n message: `${allDeps[dep]}`,\n });\n } else {\n results.push({\n name: dep,\n status: 'fail',\n message: 'Not installed. Required peer dependency.',\n });\n }\n }\n\n const optionalDeps = ['@emotion/react', '@emotion/styled', 'zustand'];\n for (const dep of optionalDeps) {\n if (allDeps[dep]) {\n results.push({\n name: dep,\n status: 'pass',\n message: `${allDeps[dep]}`,\n });\n } else {\n results.push({\n name: dep,\n status: 'warn',\n message: 'Not installed. Recommended dependency.',\n });\n }\n }\n } catch {\n results.push({\n name: 'package.json',\n status: 'fail',\n message: 'Failed to parse.',\n });\n }\n\n return results;\n}\n\nfunction checkDirectories(config: PrismConfig): CheckResult[] {\n const results: CheckResult[] = [];\n\n const dirs = {\n components: config.aliases.components,\n blocks: config.aliases.blocks,\n hooks: config.aliases.hooks,\n utils: config.aliases.utils,\n };\n\n for (const [name, alias] of Object.entries(dirs)) {\n const resolved = resolveAlias(alias, config);\n if (fs.existsSync(resolved)) {\n results.push({\n name: `${name} directory`,\n status: 'pass',\n message: `Exists at ${path.relative(config.rootDir, resolved)}`,\n });\n } else {\n results.push({\n name: `${name} directory`,\n status: 'warn',\n message: `Not found at ${path.relative(config.rootDir, resolved)}. Will be created on first add.`,\n });\n }\n }\n\n return results;\n}\n\nasync function checkTsConfig(cwd: string): Promise<CheckResult> {\n const tsConfigPath = path.join(cwd, 'tsconfig.json');\n\n if (!fs.existsSync(tsConfigPath)) {\n return {\n name: 'TypeScript',\n status: 'warn',\n message: 'tsconfig.json not found. Path aliases may not work.',\n };\n }\n\n try {\n const content = await fs.promises.readFile(tsConfigPath, 'utf-8');\n // Strip comments for JSON parse (basic approach)\n const stripped = content.replace(/\\/\\/.*$/gm, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n const tsConfig = JSON.parse(stripped);\n const paths = tsConfig.compilerOptions?.paths || tsConfig.compilerOptions?.baseUrl;\n\n if (paths) {\n return {\n name: 'TypeScript',\n status: 'pass',\n message: 'Path aliases configured.',\n };\n }\n\n return {\n name: 'TypeScript',\n status: 'warn',\n message: 'No path aliases found. Ensure @ alias is configured for Prism imports.',\n };\n } catch {\n return {\n name: 'TypeScript',\n status: 'warn',\n message: 'Could not parse tsconfig.json.',\n };\n }\n}\n\nasync function checkLockfile(cwd: string): Promise<CheckResult> {\n const lockfilePath = path.join(cwd, 'prism.lock.json');\n\n if (!fs.existsSync(lockfilePath)) {\n return {\n name: 'Lockfile',\n status: 'pass',\n message: 'No lockfile yet (no components installed).',\n };\n }\n\n try {\n const lockfile = JSON.parse(await fs.promises.readFile(lockfilePath, 'utf-8'));\n const componentCount = Object.keys(lockfile.components || {}).length;\n const blockCount = Object.keys(lockfile.blocks || {}).length;\n\n return {\n name: 'Lockfile',\n status: 'pass',\n message: `${componentCount} component(s), ${blockCount} block(s) installed.`,\n };\n } catch {\n return {\n name: 'Lockfile',\n status: 'warn',\n message: 'Lockfile exists but could not be parsed.',\n };\n }\n}\n"]}