@pattern-stack/frontend-patterns 0.1.3 → 0.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/CHANGELOG.md +69 -74
  2. package/README.md +17 -2
  3. package/cli/commands/generate-hooks.ts +15 -6
  4. package/cli/commands/scaffold.ts +1 -1
  5. package/cli/index.ts +1 -3
  6. package/cli/src/codegen/openapi/__tests__/naming-utils.test.js +367 -0
  7. package/cli/src/codegen/openapi/client-generator.js +90 -35
  8. package/cli/src/codegen/openapi/confidence-scorer.js +89 -200
  9. package/cli/src/codegen/openapi/hook-config.js +45 -63
  10. package/cli/src/codegen/openapi/hook-generator.js +253 -547
  11. package/cli/src/codegen/openapi/naming-constants.js +98 -0
  12. package/cli/src/codegen/openapi/naming-utils.js +149 -0
  13. package/cli/src/codegen/openapi/parser.js +9 -14
  14. package/cli/src/codegen/openapi/type-generator.js +6 -16
  15. package/dist/atoms/components/core/Avatar/Avatar.d.ts +6 -6
  16. package/dist/atoms/components/core/Avatar/Avatar.d.ts.map +1 -1
  17. package/dist/atoms/components/core/Avatar/index.d.ts +1 -1
  18. package/dist/atoms/components/core/Badge/Badge.d.ts +6 -6
  19. package/dist/atoms/components/core/Badge/Badge.d.ts.map +1 -1
  20. package/dist/atoms/components/core/Badge/index.d.ts +1 -1
  21. package/dist/atoms/components/core/Button/Button.d.ts +3 -3
  22. package/dist/atoms/components/core/Button/Button.d.ts.map +1 -1
  23. package/dist/atoms/components/core/Button/index.d.ts +2 -2
  24. package/dist/atoms/components/core/Card/Card.d.ts +2 -2
  25. package/dist/atoms/components/core/Card/Card.d.ts.map +1 -1
  26. package/dist/atoms/components/core/Card/index.d.ts +2 -2
  27. package/dist/atoms/components/core/Card/index.d.ts.map +1 -1
  28. package/dist/atoms/components/core/Checkbox/Checkbox.d.ts +4 -4
  29. package/dist/atoms/components/core/Checkbox/Checkbox.d.ts.map +1 -1
  30. package/dist/atoms/components/core/Checkbox/index.d.ts +2 -2
  31. package/dist/atoms/components/core/Input/Input.d.ts +2 -2
  32. package/dist/atoms/components/core/Input/Input.d.ts.map +1 -1
  33. package/dist/atoms/components/core/Input/index.d.ts +2 -2
  34. package/dist/atoms/components/core/Label/Label.d.ts +3 -4
  35. package/dist/atoms/components/core/Label/Label.d.ts.map +1 -1
  36. package/dist/atoms/components/core/Label/index.d.ts +2 -2
  37. package/dist/atoms/components/core/Select/Select.d.ts +5 -5
  38. package/dist/atoms/components/core/Select/Select.d.ts.map +1 -1
  39. package/dist/atoms/components/core/Select/index.d.ts +2 -2
  40. package/dist/atoms/components/core/Select/index.d.ts.map +1 -1
  41. package/dist/atoms/components/core/Spinner/Spinner.d.ts +4 -4
  42. package/dist/atoms/components/core/Spinner/Spinner.d.ts.map +1 -1
  43. package/dist/atoms/components/core/Spinner/index.d.ts +2 -2
  44. package/dist/atoms/components/core/Switch/Switch.d.ts +4 -4
  45. package/dist/atoms/components/core/Switch/Switch.d.ts.map +1 -1
  46. package/dist/atoms/components/core/Switch/index.d.ts +1 -1
  47. package/dist/atoms/components/core/index.d.ts +10 -10
  48. package/dist/atoms/components/core/index.d.ts.map +1 -1
  49. package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts +2 -2
  50. package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts.map +1 -1
  51. package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts +3 -3
  52. package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts.map +1 -1
  53. package/dist/atoms/components/data/ActivityFeed/index.d.ts +3 -3
  54. package/dist/atoms/components/data/ActivityFeed/index.d.ts.map +1 -1
  55. package/dist/atoms/components/data/ActivityFeed/types.d.ts +3 -3
  56. package/dist/atoms/components/data/ActivityFeed/types.d.ts.map +1 -1
  57. package/dist/atoms/components/data/ActivityFeed/utils.d.ts +2 -2
  58. package/dist/atoms/components/data/ActivityFeed/utils.d.ts.map +1 -1
  59. package/dist/atoms/components/data/Chart/Chart.d.ts +52 -5
  60. package/dist/atoms/components/data/Chart/Chart.d.ts.map +1 -1
  61. package/dist/atoms/components/data/Chart/index.d.ts +2 -2
  62. package/dist/atoms/components/data/Chart/index.d.ts.map +1 -1
  63. package/dist/atoms/components/data/DataBadge/DataBadge.d.ts +6 -6
  64. package/dist/atoms/components/data/DataBadge/DataBadge.d.ts.map +1 -1
  65. package/dist/atoms/components/data/DataBadge/index.d.ts +1 -1
  66. package/dist/atoms/components/data/DataTable/DataTable.d.ts +4 -4
  67. package/dist/atoms/components/data/DataTable/DataTable.d.ts.map +1 -1
  68. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts +4 -4
  69. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts.map +1 -1
  70. package/dist/atoms/components/data/DataTable/TableCellWithTooltip.d.ts +1 -1
  71. package/dist/atoms/components/data/DataTable/index.d.ts +2 -2
  72. package/dist/atoms/components/data/DetailedCard/DetailedCard.d.ts +4 -4
  73. package/dist/atoms/components/data/DetailedCard/DetailedCard.d.ts.map +1 -1
  74. package/dist/atoms/components/data/DetailedCard/index.d.ts +2 -2
  75. package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts +3 -3
  76. package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts.map +1 -1
  77. package/dist/atoms/components/data/EntityIcon/index.d.ts +1 -1
  78. package/dist/atoms/components/data/IconBadge/IconBadge.d.ts +6 -6
  79. package/dist/atoms/components/data/IconBadge/IconBadge.d.ts.map +1 -1
  80. package/dist/atoms/components/data/IconBadge/index.d.ts +2 -2
  81. package/dist/atoms/components/data/ListCard/ListCard.d.ts +9 -9
  82. package/dist/atoms/components/data/ListCard/ListCard.d.ts.map +1 -1
  83. package/dist/atoms/components/data/ListCard/index.d.ts +1 -1
  84. package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts +5 -5
  85. package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts.map +1 -1
  86. package/dist/atoms/components/data/ProgressBar/index.d.ts +1 -1
  87. package/dist/atoms/components/data/StatCard/StatCard.d.ts +3 -3
  88. package/dist/atoms/components/data/StatCard/StatCard.d.ts.map +1 -1
  89. package/dist/atoms/components/data/StatCard/index.d.ts +1 -1
  90. package/dist/atoms/components/data/Table/Table.d.ts +2 -2
  91. package/dist/atoms/components/data/Table/Table.d.ts.map +1 -1
  92. package/dist/atoms/components/data/Table/index.d.ts +1 -1
  93. package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts +2 -2
  94. package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts.map +1 -1
  95. package/dist/atoms/components/data/TruncatedText/index.d.ts +1 -1
  96. package/dist/atoms/components/data/index.d.ts +12 -12
  97. package/dist/atoms/components/data/index.d.ts.map +1 -1
  98. package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts +15 -15
  99. package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts.map +1 -1
  100. package/dist/atoms/components/domain/SalesPanel/index.d.ts +1 -1
  101. package/dist/atoms/components/domain/SalesPanel/index.d.ts.map +1 -1
  102. package/dist/atoms/components/domain/index.d.ts +1 -1
  103. package/dist/atoms/components/feedback/Alert/Alert.d.ts +4 -4
  104. package/dist/atoms/components/feedback/Alert/Alert.d.ts.map +1 -1
  105. package/dist/atoms/components/feedback/Alert/index.d.ts +1 -1
  106. package/dist/atoms/components/feedback/EmptyState/EmptyState.d.ts +3 -3
  107. package/dist/atoms/components/feedback/EmptyState/EmptyState.d.ts.map +1 -1
  108. package/dist/atoms/components/feedback/EmptyState/index.d.ts +1 -1
  109. package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts +1 -1
  110. package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
  111. package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts +1 -1
  112. package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts +30 -4
  113. package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts.map +1 -1
  114. package/dist/atoms/components/feedback/Skeleton/index.d.ts +1 -1
  115. package/dist/atoms/components/feedback/Toast/Toast.d.ts +4 -4
  116. package/dist/atoms/components/feedback/Toast/Toast.d.ts.map +1 -1
  117. package/dist/atoms/components/feedback/Toast/index.d.ts +1 -1
  118. package/dist/atoms/components/feedback/Toast/index.d.ts.map +1 -1
  119. package/dist/atoms/components/feedback/index.d.ts +5 -5
  120. package/dist/atoms/components/feedback/index.d.ts.map +1 -1
  121. package/dist/atoms/components/forms/DateTimePicker/DateTimePicker.d.ts +6 -6
  122. package/dist/atoms/components/forms/DateTimePicker/DateTimePicker.d.ts.map +1 -1
  123. package/dist/atoms/components/forms/DateTimePicker/index.d.ts +2 -2
  124. package/dist/atoms/components/forms/FileUpload/FileUpload.d.ts +3 -3
  125. package/dist/atoms/components/forms/FileUpload/FileUpload.d.ts.map +1 -1
  126. package/dist/atoms/components/forms/FileUpload/index.d.ts +2 -2
  127. package/dist/atoms/components/forms/FormField/FormField.d.ts +2 -2
  128. package/dist/atoms/components/forms/FormField/FormField.d.ts.map +1 -1
  129. package/dist/atoms/components/forms/FormField/index.d.ts +1 -1
  130. package/dist/atoms/components/forms/index.d.ts +3 -3
  131. package/dist/atoms/components/index.d.ts +9 -9
  132. package/dist/atoms/components/layout/Accordion/Accordion.d.ts +3 -3
  133. package/dist/atoms/components/layout/Accordion/Accordion.d.ts.map +1 -1
  134. package/dist/atoms/components/layout/Accordion/index.d.ts +1 -1
  135. package/dist/atoms/components/layout/Accordion/index.d.ts.map +1 -1
  136. package/dist/atoms/components/layout/Breadcrumb/Breadcrumb.d.ts +2 -3
  137. package/dist/atoms/components/layout/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  138. package/dist/atoms/components/layout/Breadcrumb/index.d.ts +1 -1
  139. package/dist/atoms/components/layout/Breadcrumb/index.d.ts.map +1 -1
  140. package/dist/atoms/components/layout/Dialog/Dialog.d.ts +45 -0
  141. package/dist/atoms/components/layout/Dialog/Dialog.d.ts.map +1 -0
  142. package/dist/atoms/components/layout/Dialog/index.d.ts +2 -2
  143. package/dist/atoms/components/layout/Dialog/index.d.ts.map +1 -1
  144. package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts +9 -9
  145. package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts.map +1 -1
  146. package/dist/atoms/components/layout/Dropdown/index.d.ts +2 -2
  147. package/dist/atoms/components/layout/Dropdown/index.d.ts.map +1 -1
  148. package/dist/atoms/components/layout/Modal/Modal.d.ts +6 -6
  149. package/dist/atoms/components/layout/Modal/Modal.d.ts.map +1 -1
  150. package/dist/atoms/components/layout/Modal/index.d.ts +2 -2
  151. package/dist/atoms/components/layout/Tabs/Tabs.d.ts +46 -0
  152. package/dist/atoms/components/layout/Tabs/Tabs.d.ts.map +1 -0
  153. package/dist/atoms/components/layout/Tabs/index.d.ts +1 -1
  154. package/dist/atoms/components/layout/Tooltip/Tooltip.d.ts +6 -6
  155. package/dist/atoms/components/layout/Tooltip/Tooltip.d.ts.map +1 -1
  156. package/dist/atoms/components/layout/Tooltip/index.d.ts +1 -1
  157. package/dist/atoms/components/layout/index.d.ts +7 -7
  158. package/dist/atoms/components/layout/index.d.ts.map +1 -1
  159. package/dist/atoms/components/navigation/GlobalSearch/GlobalSearch.d.ts +2 -3
  160. package/dist/atoms/components/navigation/GlobalSearch/GlobalSearch.d.ts.map +1 -1
  161. package/dist/atoms/components/navigation/GlobalSearch/index.d.ts +1 -1
  162. package/dist/atoms/components/navigation/GlobalSearch/index.d.ts.map +1 -1
  163. package/dist/atoms/components/navigation/index.d.ts +1 -1
  164. package/dist/atoms/components/theme/ColorSwatch/ColorSwatch.d.ts +2 -2
  165. package/dist/atoms/components/theme/ColorSwatch/ColorSwatch.d.ts.map +1 -1
  166. package/dist/atoms/components/theme/ColorSwatch/index.d.ts +1 -1
  167. package/dist/atoms/components/theme/DarkModeToggle.d.ts.map +1 -1
  168. package/dist/atoms/components/theme/PaletteSwitcher.d.ts +1 -1
  169. package/dist/atoms/components/theme/PaletteSwitcher.d.ts.map +1 -1
  170. package/dist/atoms/components/theme/StyleGuide.d.ts +1 -1
  171. package/dist/atoms/components/theme/StyleGuide.d.ts.map +1 -1
  172. package/dist/atoms/components/theme/index.d.ts +4 -4
  173. package/dist/atoms/components/user/UserAvatar/UserAvatar.d.ts +2 -3
  174. package/dist/atoms/components/user/UserAvatar/UserAvatar.d.ts.map +1 -1
  175. package/dist/atoms/components/user/UserAvatar/index.d.ts +1 -1
  176. package/dist/atoms/components/user/UserAvatar/index.d.ts.map +1 -1
  177. package/dist/atoms/components/user/UserMenu/UserMenu.d.ts +2 -3
  178. package/dist/atoms/components/user/UserMenu/UserMenu.d.ts.map +1 -1
  179. package/dist/atoms/components/user/UserMenu/index.d.ts +1 -1
  180. package/dist/atoms/components/user/UserMenu/index.d.ts.map +1 -1
  181. package/dist/atoms/components/user/index.d.ts +2 -2
  182. package/dist/atoms/config/responsive.d.ts +16 -16
  183. package/dist/atoms/config/responsive.d.ts.map +1 -1
  184. package/dist/atoms/hooks/index.d.ts +4 -4
  185. package/dist/atoms/hooks/use-toast.d.ts +1 -1
  186. package/dist/atoms/hooks/use-toast.d.ts.map +1 -1
  187. package/dist/atoms/hooks/useApi.d.ts +2 -2
  188. package/dist/atoms/hooks/useApi.d.ts.map +1 -1
  189. package/dist/atoms/hooks/useResponsive.d.ts +1 -1
  190. package/dist/atoms/hooks/useResponsive.d.ts.map +1 -1
  191. package/dist/atoms/index.d.ts +6 -7
  192. package/dist/atoms/index.d.ts.map +1 -1
  193. package/dist/atoms/primitives/Badge.d.ts +6 -6
  194. package/dist/atoms/primitives/Badge.d.ts.map +1 -1
  195. package/dist/atoms/primitives/ErrorBoundary.d.ts +3 -3
  196. package/dist/atoms/primitives/ErrorBoundary.d.ts.map +1 -1
  197. package/dist/atoms/primitives/Select.d.ts +9 -7
  198. package/dist/atoms/primitives/Select.d.ts.map +1 -1
  199. package/dist/atoms/primitives/Switch.d.ts +4 -3
  200. package/dist/atoms/primitives/Switch.d.ts.map +1 -1
  201. package/dist/atoms/primitives/Tabs.d.ts +10 -10
  202. package/dist/atoms/primitives/Tabs.d.ts.map +1 -1
  203. package/dist/atoms/primitives/avatar.d.ts.map +1 -1
  204. package/dist/atoms/primitives/button.d.ts +2 -5
  205. package/dist/atoms/primitives/button.d.ts.map +1 -1
  206. package/dist/atoms/primitives/button.variants.d.ts +7 -0
  207. package/dist/atoms/primitives/button.variants.d.ts.map +1 -0
  208. package/dist/atoms/primitives/card.d.ts +3 -2
  209. package/dist/atoms/primitives/card.d.ts.map +1 -1
  210. package/dist/atoms/primitives/checkbox.d.ts +3 -3
  211. package/dist/atoms/primitives/checkbox.d.ts.map +1 -1
  212. package/dist/atoms/primitives/dialog.d.ts +4 -4
  213. package/dist/atoms/primitives/dialog.d.ts.map +1 -1
  214. package/dist/atoms/primitives/dropdown-menu.d.ts.map +1 -1
  215. package/dist/atoms/primitives/index.d.ts +16 -16
  216. package/dist/atoms/primitives/index.d.ts.map +1 -1
  217. package/dist/atoms/primitives/input.d.ts.map +1 -1
  218. package/dist/atoms/primitives/label.d.ts +4 -3
  219. package/dist/atoms/primitives/label.d.ts.map +1 -1
  220. package/dist/atoms/primitives/skeleton.d.ts.map +1 -1
  221. package/dist/atoms/primitives/spinner.d.ts +5 -5
  222. package/dist/atoms/primitives/spinner.d.ts.map +1 -1
  223. package/dist/atoms/primitives/table.d.ts.map +1 -1
  224. package/dist/atoms/services/api/client.d.ts +11 -2
  225. package/dist/atoms/services/api/client.d.ts.map +1 -1
  226. package/dist/atoms/services/auth-service.d.ts +1 -1
  227. package/dist/atoms/services/auth-service.d.ts.map +1 -1
  228. package/dist/atoms/services/health.d.ts +2 -2
  229. package/dist/atoms/services/index.d.ts +3 -3
  230. package/dist/atoms/shared/config/dashboard-sizes.d.ts +17 -17
  231. package/dist/atoms/shared/config/dashboard-sizes.d.ts.map +1 -1
  232. package/dist/atoms/shared/config/environment.d.ts.map +1 -1
  233. package/dist/atoms/shared/index.d.ts +4 -4
  234. package/dist/atoms/shared/index.d.ts.map +1 -1
  235. package/dist/atoms/types/auth.d.ts +11 -1
  236. package/dist/atoms/types/auth.d.ts.map +1 -1
  237. package/dist/atoms/types/entity-config.d.ts +9 -9
  238. package/dist/atoms/types/entity-config.d.ts.map +1 -1
  239. package/dist/atoms/types/generated.d.ts.map +1 -1
  240. package/dist/atoms/types/index.d.ts +6 -6
  241. package/dist/atoms/types/loading.d.ts +1 -1
  242. package/dist/atoms/types/navigation.d.ts +1 -1
  243. package/dist/atoms/types/navigation.d.ts.map +1 -1
  244. package/dist/atoms/types/ui-config.d.ts +8 -8
  245. package/dist/atoms/types/ui-config.d.ts.map +1 -1
  246. package/dist/atoms/utils/animations.d.ts +7 -7
  247. package/dist/atoms/utils/animations.d.ts.map +1 -1
  248. package/dist/atoms/utils/color-manager.d.ts +1 -1
  249. package/dist/atoms/utils/debounce.d.ts +1 -1
  250. package/dist/atoms/utils/debounce.d.ts.map +1 -1
  251. package/dist/atoms/utils/field-detection.d.ts +2 -2
  252. package/dist/atoms/utils/field-detection.d.ts.map +1 -1
  253. package/dist/atoms/utils/icon-map.d.ts +68 -0
  254. package/dist/atoms/utils/icon-map.d.ts.map +1 -0
  255. package/dist/atoms/utils/icon-resolver.d.ts +7 -67
  256. package/dist/atoms/utils/icon-resolver.d.ts.map +1 -1
  257. package/dist/atoms/utils/index.d.ts +4 -4
  258. package/dist/atoms/utils/metric-engine.d.ts +2 -10
  259. package/dist/atoms/utils/metric-engine.d.ts.map +1 -1
  260. package/dist/atoms/utils/tooltip-helpers.d.ts +1 -1
  261. package/dist/atoms/utils/tooltip-helpers.d.ts.map +1 -1
  262. package/dist/atoms/utils/ui-mapping.d.ts +6 -4
  263. package/dist/atoms/utils/ui-mapping.d.ts.map +1 -1
  264. package/dist/atoms/utils/utils.d.ts +7 -6
  265. package/dist/atoms/utils/utils.d.ts.map +1 -1
  266. package/dist/codegen/openapi/bulk-types.d.ts +4 -4
  267. package/dist/codegen/openapi/bulk-types.d.ts.map +1 -1
  268. package/dist/features/auth/components/LoginForm.d.ts.map +1 -1
  269. package/dist/features/auth/components/LogoutButton.d.ts.map +1 -1
  270. package/dist/features/auth/components/ProtectedRoute.d.ts +2 -2
  271. package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -1
  272. package/dist/features/auth/components/index.d.ts +3 -3
  273. package/dist/features/auth/hooks/auth-context.d.ts +3 -0
  274. package/dist/features/auth/hooks/auth-context.d.ts.map +1 -0
  275. package/dist/features/auth/hooks/index.d.ts +4 -3
  276. package/dist/features/auth/hooks/index.d.ts.map +1 -1
  277. package/dist/features/auth/hooks/use-auth.d.ts +3 -0
  278. package/dist/features/auth/hooks/use-auth.d.ts.map +1 -0
  279. package/dist/features/auth/hooks/useAuth.d.ts +3 -4
  280. package/dist/features/auth/hooks/useAuth.d.ts.map +1 -1
  281. package/dist/features/auth/hooks/useAuthContext.d.ts +1 -1
  282. package/dist/features/auth/hooks/useAuthContext.d.ts.map +1 -1
  283. package/dist/features/auth/hooks/usePermissions.d.ts +3 -3
  284. package/dist/features/auth/index.d.ts +3 -3
  285. package/dist/features/auth/providers/MockAuthProvider.d.ts +3 -4
  286. package/dist/features/auth/providers/MockAuthProvider.d.ts.map +1 -1
  287. package/dist/features/auth/providers/index.d.ts +2 -1
  288. package/dist/features/auth/providers/index.d.ts.map +1 -1
  289. package/dist/features/auth/providers/mock-auth-context.d.ts +3 -0
  290. package/dist/features/auth/providers/mock-auth-context.d.ts.map +1 -0
  291. package/dist/features/auth/providers/use-mock-auth.d.ts +3 -0
  292. package/dist/features/auth/providers/use-mock-auth.d.ts.map +1 -0
  293. package/dist/features/auth/services/mock-auth-service.d.ts +3 -3
  294. package/dist/features/auth/services/mock-auth-service.d.ts.map +1 -1
  295. package/dist/features/index.d.ts +1 -1
  296. package/dist/frontend-patterns.css +713 -576
  297. package/dist/index.d.ts +17 -17
  298. package/dist/index.d.ts.map +1 -1
  299. package/dist/index.es.js +21400 -21788
  300. package/dist/index.es.js.map +1 -1
  301. package/dist/index.js +21404 -21792
  302. package/dist/index.js.map +1 -1
  303. package/dist/molecules/forms/FormGroup.d.ts +2 -2
  304. package/dist/molecules/forms/FormGroup.d.ts.map +1 -1
  305. package/dist/molecules/forms/SearchInput.d.ts +1 -1
  306. package/dist/molecules/forms/SearchInput.d.ts.map +1 -1
  307. package/dist/molecules/forms/index.d.ts +2 -2
  308. package/dist/molecules/forms/index.d.ts.map +1 -1
  309. package/dist/molecules/index.d.ts +3 -3
  310. package/dist/molecules/layout/AppHeader/AppHeader.d.ts +1 -1
  311. package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -1
  312. package/dist/molecules/layout/AppHeader/index.d.ts +1 -1
  313. package/dist/molecules/layout/BulkSelectionBar.d.ts +2 -2
  314. package/dist/molecules/layout/BulkSelectionBar.d.ts.map +1 -1
  315. package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts +1 -1
  316. package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts +1 -1
  317. package/dist/molecules/layout/NavigationContext.d.ts +3 -9
  318. package/dist/molecules/layout/NavigationContext.d.ts.map +1 -1
  319. package/dist/molecules/layout/PageTemplate.d.ts +1 -1
  320. package/dist/molecules/layout/PageTemplate.d.ts.map +1 -1
  321. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts +4 -4
  322. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts.map +1 -1
  323. package/dist/molecules/layout/SectionHeader/index.d.ts +1 -1
  324. package/dist/molecules/layout/ShowcaseSection.d.ts +4 -4
  325. package/dist/molecules/layout/ShowcaseSection.d.ts.map +1 -1
  326. package/dist/molecules/layout/Sidebar.d.ts.map +1 -1
  327. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +1 -1
  328. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -1
  329. package/dist/molecules/layout/SidebarButton/index.d.ts +1 -1
  330. package/dist/molecules/layout/SidebarContext.d.ts +1 -8
  331. package/dist/molecules/layout/SidebarContext.d.ts.map +1 -1
  332. package/dist/molecules/layout/index.d.ts +14 -11
  333. package/dist/molecules/layout/index.d.ts.map +1 -1
  334. package/dist/molecules/layout/navigation-context.d.ts +9 -0
  335. package/dist/molecules/layout/navigation-context.d.ts.map +1 -0
  336. package/dist/molecules/layout/sidebar-context.d.ts +7 -0
  337. package/dist/molecules/layout/sidebar-context.d.ts.map +1 -0
  338. package/dist/molecules/layout/use-navigation.d.ts +2 -0
  339. package/dist/molecules/layout/use-navigation.d.ts.map +1 -0
  340. package/dist/molecules/layout/use-sidebar.d.ts +2 -0
  341. package/dist/molecules/layout/use-sidebar.d.ts.map +1 -0
  342. package/dist/molecules/navigation/NavMenu.d.ts +2 -2
  343. package/dist/molecules/navigation/NavMenu.d.ts.map +1 -1
  344. package/dist/molecules/navigation/Pagination.d.ts +2 -2
  345. package/dist/molecules/navigation/index.d.ts +2 -2
  346. package/dist/organisms/index.d.ts +1 -1
  347. package/dist/organisms/showcase/ComponentShowcasePage.d.ts +1 -1
  348. package/dist/organisms/showcase/ComponentShowcasePage.d.ts.map +1 -1
  349. package/dist/templates/AuthTemplate.d.ts +4 -4
  350. package/dist/templates/AuthTemplate.d.ts.map +1 -1
  351. package/dist/templates/ComponentShowcaseTemplate.d.ts +7 -7
  352. package/dist/templates/ComponentShowcaseTemplate.d.ts.map +1 -1
  353. package/dist/templates/DashboardTemplate.d.ts +3 -3
  354. package/dist/templates/DashboardTemplate.d.ts.map +1 -1
  355. package/dist/templates/DataTemplate.d.ts +3 -3
  356. package/dist/templates/DataTemplate.d.ts.map +1 -1
  357. package/dist/templates/EnhancedDataTemplate.d.ts +11 -11
  358. package/dist/templates/EnhancedDataTemplate.d.ts.map +1 -1
  359. package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts +2 -2
  360. package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts.map +1 -1
  361. package/dist/templates/EnhancedDataTemplate.hooks.d.ts +4 -4
  362. package/dist/templates/EnhancedDataTemplate.hooks.d.ts.map +1 -1
  363. package/dist/templates/admin/AdminCRUDTemplate.d.ts +4 -4
  364. package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -1
  365. package/dist/templates/admin/AdminDashboardTemplate.d.ts +7 -7
  366. package/dist/templates/admin/AdminDashboardTemplate.d.ts.map +1 -1
  367. package/dist/templates/admin/AdminDetailTemplate.d.ts +4 -4
  368. package/dist/templates/admin/AdminDetailTemplate.d.ts.map +1 -1
  369. package/dist/templates/admin/index.d.ts +3 -3
  370. package/dist/templates/admin/index.d.ts.map +1 -1
  371. package/dist/templates/api/APIDataTemplate.d.ts +14 -9
  372. package/dist/templates/api/APIDataTemplate.d.ts.map +1 -1
  373. package/dist/templates/api/create-api-data-template.d.ts +4 -0
  374. package/dist/templates/api/create-api-data-template.d.ts.map +1 -0
  375. package/dist/templates/api/index.d.ts +3 -2
  376. package/dist/templates/api/index.d.ts.map +1 -1
  377. package/dist/templates/factory.d.ts +3 -3
  378. package/dist/templates/factory.d.ts.map +1 -1
  379. package/dist/templates/index.d.ts +8 -8
  380. package/dist/templates/index.d.ts.map +1 -1
  381. package/package.json +10 -7
  382. package/LICENSE +0 -19
  383. package/cli/cli/commands/generate-hooks.js +0 -291
  384. package/cli/cli/commands/init.js +0 -25
  385. package/cli/cli/commands/scaffold.js +0 -201
  386. package/cli/cli/index.js +0 -113
  387. package/cli/commands/generate-hooks.js +0 -291
  388. package/cli/commands/init.js +0 -25
  389. package/cli/commands/scaffold.js +0 -201
  390. package/cli/index.js +0 -6665
  391. package/cli/src/codegen/openapi/bulk-hook-generator.js +0 -252
  392. package/cli/src/codegen/openapi/bulk-types.js +0 -89
  393. package/dist/atoms/components/data/ActivityFeed/ActivityFeed.stories.d.ts +0 -38
  394. package/dist/atoms/components/data/ActivityFeed/ActivityFeed.stories.d.ts.map +0 -1
  395. package/dist/codegen/index.d.ts +0 -7
  396. package/dist/codegen/index.d.ts.map +0 -1
  397. package/dist/codegen/openapi/bulk-hook-generator.d.ts +0 -40
  398. package/dist/codegen/openapi/bulk-hook-generator.d.ts.map +0 -1
  399. package/dist/codegen/openapi/client-generator.d.ts +0 -52
  400. package/dist/codegen/openapi/client-generator.d.ts.map +0 -1
  401. package/dist/codegen/openapi/confidence-scorer.d.ts +0 -30
  402. package/dist/codegen/openapi/confidence-scorer.d.ts.map +0 -1
  403. package/dist/codegen/openapi/hook-config.d.ts +0 -50
  404. package/dist/codegen/openapi/hook-config.d.ts.map +0 -1
  405. package/dist/codegen/openapi/hook-generator.d.ts +0 -108
  406. package/dist/codegen/openapi/hook-generator.d.ts.map +0 -1
  407. package/dist/codegen/openapi/index.d.ts +0 -27
  408. package/dist/codegen/openapi/index.d.ts.map +0 -1
  409. package/dist/codegen/openapi/parser.d.ts +0 -107
  410. package/dist/codegen/openapi/parser.d.ts.map +0 -1
  411. package/dist/codegen/openapi/type-generator.d.ts +0 -53
  412. package/dist/codegen/openapi/type-generator.d.ts.map +0 -1
  413. package/dist/generated/client/client.d.ts +0 -23
  414. package/dist/generated/client/client.d.ts.map +0 -1
  415. package/dist/generated/client/config.d.ts +0 -10
  416. package/dist/generated/client/config.d.ts.map +0 -1
  417. package/dist/generated/client/index.d.ts +0 -12
  418. package/dist/generated/client/index.d.ts.map +0 -1
  419. package/dist/generated/client/methods.d.ts +0 -591
  420. package/dist/generated/client/methods.d.ts.map +0 -1
  421. package/dist/generated/client/types.d.ts +0 -37
  422. package/dist/generated/client/types.d.ts.map +0 -1
  423. package/dist/generated/example.d.ts +0 -8
  424. package/dist/generated/example.d.ts.map +0 -1
  425. package/dist/generated/hooks/index.d.ts +0 -11
  426. package/dist/generated/hooks/index.d.ts.map +0 -1
  427. package/dist/generated/hooks/keys.d.ts +0 -59
  428. package/dist/generated/hooks/keys.d.ts.map +0 -1
  429. package/dist/generated/hooks/mutations.d.ts +0 -551
  430. package/dist/generated/hooks/mutations.d.ts.map +0 -1
  431. package/dist/generated/hooks/queries.d.ts +0 -426
  432. package/dist/generated/hooks/queries.d.ts.map +0 -1
  433. package/dist/generated/hooks/types.d.ts +0 -318
  434. package/dist/generated/hooks/types.d.ts.map +0 -1
  435. package/dist/generated/index.d.ts +0 -13
  436. package/dist/generated/index.d.ts.map +0 -1
  437. package/dist/generated/types/endpoints.d.ts +0 -1364
  438. package/dist/generated/types/endpoints.d.ts.map +0 -1
  439. package/dist/generated/types/index.d.ts +0 -11
  440. package/dist/generated/types/index.d.ts.map +0 -1
  441. package/dist/generated/types/parameters.d.ts +0 -8
  442. package/dist/generated/types/parameters.d.ts.map +0 -1
  443. package/dist/generated/types/responses.d.ts +0 -8
  444. package/dist/generated/types/responses.d.ts.map +0 -1
  445. package/dist/generated/types/schemas.d.ts +0 -652
  446. package/dist/generated/types/schemas.d.ts.map +0 -1
@@ -1,291 +0,0 @@
1
- "use strict";
2
- /**
3
- * Generate Hooks Command
4
- *
5
- * Implementation of the `pattern-stack generate hooks` command
6
- *
7
- * Part of FRO-6: Generate Hooks Command
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.generateHooksCommand = generateHooksCommand;
11
- const fs_1 = require("fs");
12
- const path_1 = require("path");
13
- const parser_js_1 = require("../../src/codegen/openapi/parser.js");
14
- const type_generator_js_1 = require("../../src/codegen/openapi/type-generator.js");
15
- const client_generator_js_1 = require("../../src/codegen/openapi/client-generator.js");
16
- const hook_generator_js_1 = require("../../src/codegen/openapi/hook-generator.js");
17
- async function generateHooksCommand(source, options) {
18
- try {
19
- console.log('🚀 Pattern-Stack Hook Generator');
20
- console.log('================================');
21
- console.log();
22
- // Load and parse OpenAPI specification
23
- console.log('📥 Loading OpenAPI specification...');
24
- const spec = await (0, parser_js_1.loadOpenAPISpec)(source);
25
- console.log(`✅ Loaded: ${spec.info.title} v${spec.info.version}`);
26
- console.log('🔍 Parsing specification...');
27
- const parsed = await (0, parser_js_1.parseOpenAPI)(spec);
28
- console.log(`✅ Found ${parsed.endpoints.length} endpoints, ${parsed.schemas.length} schemas`);
29
- // Generate types
30
- console.log('🏗️ Generating TypeScript types...');
31
- const types = (0, type_generator_js_1.generateTypes)(parsed, {
32
- prefix: options.prefix,
33
- includeJSDoc: true,
34
- includeExamples: true
35
- });
36
- // Generate API client
37
- console.log('🔧 Generating API client...');
38
- const client = (0, client_generator_js_1.generateAPIClient)(parsed, {
39
- clientType: options.client,
40
- includeAuth: true,
41
- authType: options.auth,
42
- includeInterceptors: true
43
- });
44
- // Generate React hooks
45
- console.log('⚛️ Generating React hooks...');
46
- const hooks = await (0, hook_generator_js_1.generateHooks)(parsed, {
47
- includeInfiniteQueries: true,
48
- includeOptimisticUpdates: true,
49
- includeMutationHelpers: true,
50
- enableConfidenceScoring: true
51
- });
52
- if (options.dryRun) {
53
- console.log('\n📋 Dry run - files that would be generated:');
54
- console.log('Types:');
55
- console.log(' - schemas.ts');
56
- console.log(' - endpoints.ts');
57
- console.log(' - parameters.ts');
58
- console.log(' - responses.ts');
59
- console.log();
60
- console.log('API Client:');
61
- console.log(' - client.ts');
62
- console.log(' - methods.ts');
63
- console.log(' - types.ts');
64
- console.log(' - config.ts');
65
- console.log();
66
- console.log('React Hooks:');
67
- console.log(' - queries.ts');
68
- console.log(' - mutations.ts');
69
- console.log(' - keys.ts');
70
- console.log(' - types.ts');
71
- console.log();
72
- console.log('Generated code preview:');
73
- console.log('======================');
74
- console.log();
75
- console.log('Types (first 20 lines):');
76
- console.log(types.schemas.split('\n').slice(0, 20).join('\n'));
77
- console.log('\n...');
78
- return;
79
- }
80
- // Create output directories
81
- console.log(`📁 Creating output directory: ${options.output}`);
82
- await ensureDir(options.output);
83
- await ensureDir((0, path_1.join)(options.output, 'types'));
84
- await ensureDir((0, path_1.join)(options.output, 'client'));
85
- await ensureDir((0, path_1.join)(options.output, 'hooks'));
86
- // Write type files
87
- console.log('💾 Writing type definitions...');
88
- await writeFile((0, path_1.join)(options.output, 'types', 'schemas.ts'), types.schemas);
89
- await writeFile((0, path_1.join)(options.output, 'types', 'endpoints.ts'), types.endpoints);
90
- await writeFile((0, path_1.join)(options.output, 'types', 'parameters.ts'), types.parameters);
91
- await writeFile((0, path_1.join)(options.output, 'types', 'responses.ts'), types.responses);
92
- await writeFile((0, path_1.join)(options.output, 'types', 'index.ts'), types.index);
93
- // Write client files
94
- console.log('💾 Writing API client...');
95
- await writeFile((0, path_1.join)(options.output, 'client', 'client.ts'), client.client);
96
- await writeFile((0, path_1.join)(options.output, 'client', 'methods.ts'), client.methods);
97
- await writeFile((0, path_1.join)(options.output, 'client', 'types.ts'), client.types);
98
- await writeFile((0, path_1.join)(options.output, 'client', 'config.ts'), client.config);
99
- await writeFile((0, path_1.join)(options.output, 'client', 'index.ts'), client.index);
100
- // Write hook files
101
- console.log('💾 Writing React hooks...');
102
- await writeFile((0, path_1.join)(options.output, 'hooks', 'queries.ts'), hooks.queries);
103
- await writeFile((0, path_1.join)(options.output, 'hooks', 'mutations.ts'), hooks.mutations);
104
- await writeFile((0, path_1.join)(options.output, 'hooks', 'keys.ts'), hooks.keys);
105
- await writeFile((0, path_1.join)(options.output, 'hooks', 'types.ts'), hooks.types);
106
- await writeFile((0, path_1.join)(options.output, 'hooks', 'index.ts'), hooks.index);
107
- // Write confidence report if available
108
- if (hooks.report) {
109
- await writeFile((0, path_1.join)(options.output, 'hooks', 'confidence-report.md'), hooks.report);
110
- console.log('📊 Generated confidence report');
111
- // Check if there are low confidence names
112
- const lowConfidenceCount = (hooks.report.match(/## Low Confidence Names/g) || []).length;
113
- if (lowConfidenceCount > 0) {
114
- console.log('\n⚠️ Some hook names have low confidence and may need review.');
115
- console.log('Run `npm run review:hooks` to interactively review and improve them.');
116
- }
117
- }
118
- // Write main index file
119
- const mainIndex = `/**
120
- * Generated API Integration
121
- *
122
- * Auto-generated from OpenAPI specification: ${spec.info.title}
123
- * Version: ${spec.info.version}
124
- * Generated: ${new Date().toISOString()}
125
- */
126
-
127
- export * from './types'
128
- export * from './client'
129
- export * from './hooks'
130
-
131
- // Quick start exports
132
- export { createAPIClient } from './client'
133
- export { queryKeys } from './hooks'`;
134
- await writeFile((0, path_1.join)(options.output, 'index.ts'), mainIndex);
135
- // Generate usage example
136
- const usageExample = generateUsageExample(spec.info.title, options);
137
- await writeFile((0, path_1.join)(options.output, 'example.ts'), usageExample);
138
- console.log();
139
- console.log('✅ Generation complete!');
140
- console.log(`📦 Generated files in: ${options.output}`);
141
- console.log();
142
- console.log('🚀 Quick start:');
143
- console.log(`import { createAPIClient, useGetUsers } from './${options.output}'`);
144
- console.log();
145
- console.log('💡 See example.ts for detailed usage instructions');
146
- }
147
- catch (error) {
148
- console.error('❌ Generation failed:');
149
- console.error(error instanceof Error ? error.message : error);
150
- process.exit(1);
151
- }
152
- }
153
- async function ensureDir(dir) {
154
- try {
155
- await fs_1.promises.mkdir(dir, { recursive: true });
156
- }
157
- catch (error) {
158
- // Directory might already exist
159
- }
160
- }
161
- async function writeFile(path, content) {
162
- await ensureDir((0, path_1.dirname)(path));
163
- await fs_1.promises.writeFile(path, content, 'utf8');
164
- }
165
- function generateUsageExample(apiTitle, options) {
166
- return `/**
167
- * ${apiTitle} - Usage Example
168
- *
169
- * This file demonstrates how to use the generated API integration
170
- */
171
-
172
- import React from 'react'
173
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
174
- import { createAPIClient, useGetUsers, useCreateUser } from './'
175
-
176
- // 1. Set up the API client
177
- const apiClient = createAPIClient({
178
- baseUrl: 'https://api.example.com/v1',
179
- ${options.auth === 'bearer' ? `getAuthToken: () => localStorage.getItem('authToken'),` : ''}
180
- ${options.auth === 'apiKey' ? `getApiKey: () => process.env.REACT_APP_API_KEY,
181
- apiKeyHeader: 'X-API-Key',` : ''}
182
- onError: (error) => {
183
- console.error('API Error:', error)
184
- // Handle global errors (show toast, redirect to login, etc.)
185
- }
186
- })
187
-
188
- // 2. Set up React Query
189
- const queryClient = new QueryClient({
190
- defaultOptions: {
191
- queries: {
192
- staleTime: 5 * 60 * 1000, // 5 minutes
193
- cacheTime: 10 * 60 * 1000, // 10 minutes
194
- },
195
- },
196
- })
197
-
198
- // 3. Wrap your app with providers
199
- function App() {
200
- return (
201
- <QueryClientProvider client={queryClient}>
202
- <UserList />
203
- </QueryClientProvider>
204
- )
205
- }
206
-
207
- // 4. Use generated hooks in components
208
- function UserList() {
209
- // Query hook with automatic loading, error, and data states
210
- const { data: users, isLoading, error } = useGetUsers({
211
- limit: 10
212
- })
213
-
214
- // Mutation hook with optimistic updates
215
- const createUserMutation = useCreateUser({
216
- onSuccess: () => {
217
- console.log('User created successfully!')
218
- },
219
- onError: (error) => {
220
- console.error('Failed to create user:', error)
221
- }
222
- })
223
-
224
- const handleCreateUser = () => {
225
- createUserMutation.mutate({
226
- email: 'new@example.com',
227
- name: 'New User'
228
- })
229
- }
230
-
231
- if (isLoading) return <div>Loading users...</div>
232
- if (error) return <div>Error: {error.message}</div>
233
-
234
- return (
235
- <div>
236
- <h2>Users</h2>
237
- <button
238
- onClick={handleCreateUser}
239
- disabled={createUserMutation.isLoading}
240
- >
241
- {createUserMutation.isLoading ? 'Creating...' : 'Create User'}
242
- </button>
243
-
244
- <ul>
245
- {users?.map(user => (
246
- <li key={user.id}>
247
- {user.name} ({user.email})
248
- </li>
249
- ))}
250
- </ul>
251
- </div>
252
- )
253
- }
254
-
255
- // 5. Advanced usage with infinite queries
256
- function InfiniteUserList() {
257
- const {
258
- data,
259
- fetchNextPage,
260
- hasNextPage,
261
- isFetchingNextPage,
262
- } = useInfiniteGetUsers({
263
- limit: 20
264
- })
265
-
266
- return (
267
- <div>
268
- {data?.pages.map((page, i) => (
269
- <React.Fragment key={i}>
270
- {page.map(user => (
271
- <div key={user.id}>{user.name}</div>
272
- ))}
273
- </React.Fragment>
274
- ))}
275
-
276
- <button
277
- onClick={() => fetchNextPage()}
278
- disabled={!hasNextPage || isFetchingNextPage}
279
- >
280
- {isFetchingNextPage
281
- ? 'Loading more...'
282
- : hasNextPage
283
- ? 'Load More'
284
- : 'Nothing more to load'}
285
- </button>
286
- </div>
287
- )
288
- }
289
-
290
- export default App`;
291
- }
@@ -1,25 +0,0 @@
1
- "use strict";
2
- /**
3
- * Init Command
4
- *
5
- * Implementation of the `pattern-stack init` command
6
- *
7
- * Part of FRO-14: Domain Template Initialization
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.initCommand = initCommand;
11
- async function initCommand(template = 'basic', options) {
12
- console.log(`🚀 Initializing Pattern-Stack project with ${template} template`);
13
- if (options.name) {
14
- console.log(`📦 Project name: ${options.name}`);
15
- }
16
- if (options.dir) {
17
- console.log(`📁 Target directory: ${options.dir}`);
18
- }
19
- console.log('\n⚠️ Template initialization not yet implemented');
20
- console.log('This feature will be available in a future release.');
21
- console.log('\nFor now, you can:');
22
- console.log('1. Clone the Pattern-Stack repository');
23
- console.log('2. Use the generate hooks command to create API integrations');
24
- console.log('3. Use the scaffold command to create components');
25
- }
@@ -1,201 +0,0 @@
1
- "use strict";
2
- /**
3
- * Scaffold Command
4
- *
5
- * Implementation of the `pattern-stack scaffold` command
6
- *
7
- * Part of FRO-15: Component Scaffolding Commands
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.scaffoldCommand = scaffoldCommand;
11
- const fs_1 = require("fs");
12
- const path_1 = require("path");
13
- async function scaffoldCommand(type, name, options) {
14
- console.log(`🏗️ Scaffolding ${type}: ${name}`);
15
- switch (type) {
16
- case 'component':
17
- await scaffoldComponent(name, options);
18
- break;
19
- case 'feature':
20
- await scaffoldFeature(name, options);
21
- break;
22
- case 'template':
23
- await scaffoldTemplate(name, options);
24
- break;
25
- default:
26
- console.error(`❌ Unknown scaffold type: ${type}`);
27
- console.log('Available types: component, feature, template');
28
- process.exit(1);
29
- }
30
- }
31
- async function scaffoldComponent(name, options) {
32
- const outputDir = options.output || `./src/atoms/composed/${name}`;
33
- const componentContent = `/**
34
- * ${name} Component
35
- *
36
- * Generated by Pattern-Stack CLI
37
- */
38
-
39
- import React from 'react'
40
- import { cn } from '../../utils/utils'
41
-
42
- export interface ${name}Props {
43
- className?: string
44
- children?: React.ReactNode
45
- }
46
-
47
- export function ${name}({ className, children, ...props }: ${name}Props) {
48
- return (
49
- <div className={cn("", className)} {...props}>
50
- {children}
51
- </div>
52
- )
53
- }
54
-
55
- ${name}.displayName = "${name}"`;
56
- const indexContent = `export { ${name} } from './${name}'
57
- export type { ${name}Props } from './${name}'`;
58
- const testContent = `/**
59
- * ${name} Component Tests
60
- */
61
-
62
- import { render, screen } from '@testing-library/react'
63
- import { ${name} } from './${name}'
64
-
65
- describe('${name}', () => {
66
- it('renders children', () => {
67
- render(<${name}>Test content</${name}>)
68
- expect(screen.getByText('Test content')).toBeInTheDocument()
69
- })
70
-
71
- it('applies custom className', () => {
72
- const { container } = render(<${name} className="custom-class" />)
73
- expect(container.firstChild).toHaveClass('custom-class')
74
- })
75
- })`;
76
- await ensureDir(outputDir);
77
- await writeFile((0, path_1.join)(outputDir, `${name}.tsx`), componentContent);
78
- await writeFile((0, path_1.join)(outputDir, 'index.ts'), indexContent);
79
- await writeFile((0, path_1.join)(outputDir, `${name}.test.tsx`), testContent);
80
- console.log(`✅ Component scaffolded: ${outputDir}`);
81
- }
82
- async function scaffoldFeature(name, options) {
83
- const outputDir = options.output || `./src/features/${name.toLowerCase()}`;
84
- // Feature hook
85
- const hookContent = `/**
86
- * ${name} Hooks
87
- *
88
- * Generated by Pattern-Stack CLI
89
- */
90
-
91
- import { useState, useEffect } from 'react'
92
-
93
- export function use${name}() {
94
- const [data, setData] = useState(null)
95
- const [loading, setLoading] = useState(false)
96
- const [error, setError] = useState<Error | null>(null)
97
-
98
- // Add your logic here
99
-
100
- return {
101
- data,
102
- loading,
103
- error,
104
- refetch: () => {
105
- // Implement refetch logic
106
- }
107
- }
108
- }`;
109
- // Feature component
110
- const componentContent = `/**
111
- * ${name} Component
112
- *
113
- * Generated by Pattern-Stack CLI
114
- */
115
-
116
- import React from 'react'
117
- import { use${name} } from '../hooks/use${name}'
118
-
119
- export interface ${name}ComponentProps {
120
- className?: string
121
- }
122
-
123
- export function ${name}Component({ className }: ${name}ComponentProps) {
124
- const { data, loading, error } = use${name}()
125
-
126
- if (loading) return <div>Loading...</div>
127
- if (error) return <div>Error: {error.message}</div>
128
-
129
- return (
130
- <div className={className}>
131
- <h2>${name}</h2>
132
- {/* Add your UI here */}
133
- </div>
134
- )
135
- }`;
136
- // Feature index
137
- const indexContent = `export { use${name} } from './hooks/use${name}'
138
- export { ${name}Component } from './components/${name}Component'
139
- export type { ${name}ComponentProps } from './components/${name}Component'`;
140
- await ensureDir((0, path_1.join)(outputDir, 'hooks'));
141
- await ensureDir((0, path_1.join)(outputDir, 'components'));
142
- await writeFile((0, path_1.join)(outputDir, 'hooks', `use${name}.ts`), hookContent);
143
- await writeFile((0, path_1.join)(outputDir, 'hooks', 'index.ts'), `export { use${name} } from './use${name}'`);
144
- await writeFile((0, path_1.join)(outputDir, 'components', `${name}Component.tsx`), componentContent);
145
- await writeFile((0, path_1.join)(outputDir, 'components', 'index.ts'), `export { ${name}Component } from './${name}Component'`);
146
- await writeFile((0, path_1.join)(outputDir, 'index.ts'), indexContent);
147
- console.log(`✅ Feature scaffolded: ${outputDir}`);
148
- }
149
- async function scaffoldTemplate(name, options) {
150
- const outputDir = options.output || `./src/templates/${name.toLowerCase()}`;
151
- const templateContent = `/**
152
- * ${name} Template
153
- *
154
- * Generated by Pattern-Stack CLI
155
- */
156
-
157
- import React from 'react'
158
- import { PageTemplate } from '../PageTemplate'
159
-
160
- export interface ${name}TemplateProps {
161
- title?: string
162
- children?: React.ReactNode
163
- }
164
-
165
- export function ${name}Template({
166
- title = "${name}",
167
- children
168
- }: ${name}TemplateProps) {
169
- return (
170
- <PageTemplate>
171
- <div className="space-y-6">
172
- <header>
173
- <h1 className="text-3xl font-bold">{title}</h1>
174
- </header>
175
-
176
- <main>
177
- {children}
178
- </main>
179
- </div>
180
- </PageTemplate>
181
- )
182
- }`;
183
- const indexContent = `export { ${name}Template } from './${name}Template'
184
- export type { ${name}TemplateProps } from './${name}Template'`;
185
- await ensureDir(outputDir);
186
- await writeFile((0, path_1.join)(outputDir, `${name}Template.tsx`), templateContent);
187
- await writeFile((0, path_1.join)(outputDir, 'index.ts'), indexContent);
188
- console.log(`✅ Template scaffolded: ${outputDir}`);
189
- }
190
- async function ensureDir(dir) {
191
- try {
192
- await fs_1.promises.mkdir(dir, { recursive: true });
193
- }
194
- catch (error) {
195
- // Directory might already exist
196
- }
197
- }
198
- async function writeFile(path, content) {
199
- await ensureDir((0, path_1.dirname)(path));
200
- await fs_1.promises.writeFile(path, content, 'utf8');
201
- }