@pattern-stack/frontend-patterns 0.1.2 → 0.2.0-alpha.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 (676) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +17 -2
  3. package/cli/commands/generate-hooks.ts +316 -0
  4. package/cli/commands/init.ts +33 -0
  5. package/cli/commands/scaffold.ts +224 -0
  6. package/cli/index.ts +122 -0
  7. package/cli/src/codegen/openapi/client-generator.js +659 -0
  8. package/cli/src/codegen/openapi/hook-generator.js +725 -0
  9. package/cli/src/codegen/openapi/parser.js +274 -0
  10. package/cli/src/codegen/openapi/type-generator.js +329 -0
  11. package/dist/atoms/components/core/Avatar/Avatar.d.ts +41 -0
  12. package/dist/atoms/components/core/Avatar/Avatar.d.ts.map +1 -0
  13. package/dist/atoms/components/core/Avatar/index.d.ts +2 -0
  14. package/dist/atoms/components/core/Avatar/index.d.ts.map +1 -0
  15. package/dist/atoms/components/core/Badge/Badge.d.ts +38 -0
  16. package/dist/atoms/components/core/Badge/Badge.d.ts.map +1 -0
  17. package/dist/atoms/components/core/Badge/index.d.ts +2 -0
  18. package/dist/atoms/components/core/Badge/index.d.ts.map +1 -0
  19. package/dist/atoms/components/core/Button/Button.d.ts +28 -0
  20. package/dist/atoms/components/core/Button/Button.d.ts.map +1 -0
  21. package/dist/atoms/components/core/Button/index.d.ts +3 -0
  22. package/dist/atoms/components/core/Button/index.d.ts.map +1 -0
  23. package/dist/atoms/components/core/Card/Card.d.ts +41 -0
  24. package/dist/atoms/components/core/Card/Card.d.ts.map +1 -0
  25. package/dist/atoms/components/core/Card/index.d.ts +3 -0
  26. package/dist/atoms/components/core/Card/index.d.ts.map +1 -0
  27. package/dist/atoms/components/core/Checkbox/Checkbox.d.ts +28 -0
  28. package/dist/atoms/components/core/Checkbox/Checkbox.d.ts.map +1 -0
  29. package/dist/atoms/components/core/Checkbox/index.d.ts +3 -0
  30. package/dist/atoms/components/core/Checkbox/index.d.ts.map +1 -0
  31. package/dist/atoms/components/core/Input/Input.d.ts +37 -0
  32. package/dist/atoms/components/core/Input/Input.d.ts.map +1 -0
  33. package/dist/atoms/components/core/Input/index.d.ts +3 -0
  34. package/dist/atoms/components/core/Input/index.d.ts.map +1 -0
  35. package/dist/atoms/components/core/Label/Label.d.ts +22 -0
  36. package/dist/atoms/components/core/Label/Label.d.ts.map +1 -0
  37. package/dist/atoms/components/core/Label/index.d.ts +3 -0
  38. package/dist/atoms/components/core/Label/index.d.ts.map +1 -0
  39. package/dist/atoms/components/core/Select/Select.d.ts +42 -0
  40. package/dist/atoms/components/core/Select/Select.d.ts.map +1 -0
  41. package/dist/atoms/components/core/Select/index.d.ts +3 -0
  42. package/dist/atoms/components/core/Select/index.d.ts.map +1 -0
  43. package/dist/atoms/components/core/Spinner/Spinner.d.ts +25 -0
  44. package/dist/atoms/components/core/Spinner/Spinner.d.ts.map +1 -0
  45. package/dist/atoms/components/core/Spinner/index.d.ts +3 -0
  46. package/dist/atoms/components/core/Spinner/index.d.ts.map +1 -0
  47. package/dist/atoms/components/core/Switch/Switch.d.ts +35 -0
  48. package/dist/atoms/components/core/Switch/Switch.d.ts.map +1 -0
  49. package/dist/atoms/components/core/Switch/index.d.ts +2 -0
  50. package/dist/atoms/components/core/Switch/index.d.ts.map +1 -0
  51. package/dist/atoms/components/core/index.d.ts +11 -0
  52. package/dist/atoms/components/core/index.d.ts.map +1 -0
  53. package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts +4 -0
  54. package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts.map +1 -0
  55. package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts +9 -0
  56. package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts.map +1 -0
  57. package/dist/atoms/components/data/ActivityFeed/index.d.ts +4 -0
  58. package/dist/atoms/components/data/ActivityFeed/index.d.ts.map +1 -0
  59. package/dist/atoms/components/data/ActivityFeed/types.d.ts +26 -0
  60. package/dist/atoms/components/data/ActivityFeed/types.d.ts.map +1 -0
  61. package/dist/atoms/components/data/ActivityFeed/utils.d.ts +5 -0
  62. package/dist/atoms/components/data/ActivityFeed/utils.d.ts.map +1 -0
  63. package/dist/atoms/components/data/Chart/Chart.d.ts +84 -0
  64. package/dist/atoms/components/data/Chart/Chart.d.ts.map +1 -0
  65. package/dist/atoms/components/data/Chart/index.d.ts +3 -0
  66. package/dist/atoms/components/data/Chart/index.d.ts.map +1 -0
  67. package/dist/atoms/components/data/DataBadge/DataBadge.d.ts +18 -0
  68. package/dist/atoms/components/data/DataBadge/DataBadge.d.ts.map +1 -0
  69. package/dist/atoms/components/data/DataBadge/index.d.ts +2 -0
  70. package/dist/atoms/components/data/DataBadge/index.d.ts.map +1 -0
  71. package/dist/atoms/components/data/DataTable/DataTable.d.ts +5 -0
  72. package/dist/atoms/components/data/DataTable/DataTable.d.ts.map +1 -0
  73. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts +51 -0
  74. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts.map +1 -0
  75. package/dist/atoms/{composed → components/data}/DataTable/TableCellWithTooltip.d.ts +1 -1
  76. package/dist/atoms/components/data/DataTable/TableCellWithTooltip.d.ts.map +1 -0
  77. package/dist/atoms/components/data/DataTable/index.d.ts +3 -0
  78. package/dist/atoms/components/data/DataTable/index.d.ts.map +1 -0
  79. package/dist/atoms/{composed → components/data}/DetailedCard/DetailedCard.d.ts +4 -4
  80. package/dist/atoms/components/data/DetailedCard/DetailedCard.d.ts.map +1 -0
  81. package/dist/atoms/components/data/DetailedCard/index.d.ts +3 -0
  82. package/dist/atoms/components/data/DetailedCard/index.d.ts.map +1 -0
  83. package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts +24 -0
  84. package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts.map +1 -0
  85. package/dist/atoms/components/data/EntityIcon/index.d.ts +2 -0
  86. package/dist/atoms/components/data/EntityIcon/index.d.ts.map +1 -0
  87. package/dist/atoms/components/data/IconBadge/IconBadge.d.ts +17 -0
  88. package/dist/atoms/components/data/IconBadge/IconBadge.d.ts.map +1 -0
  89. package/dist/atoms/components/data/IconBadge/index.d.ts +3 -0
  90. package/dist/atoms/components/data/IconBadge/index.d.ts.map +1 -0
  91. package/dist/atoms/components/data/ListCard/ListCard.d.ts +32 -0
  92. package/dist/atoms/components/data/ListCard/ListCard.d.ts.map +1 -0
  93. package/dist/atoms/components/data/ListCard/index.d.ts +2 -0
  94. package/dist/atoms/components/data/ListCard/index.d.ts.map +1 -0
  95. package/dist/atoms/{composed → components/data}/ProgressBar/ProgressBar.d.ts +5 -5
  96. package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts.map +1 -0
  97. package/dist/atoms/components/data/ProgressBar/index.d.ts +2 -0
  98. package/dist/atoms/components/data/ProgressBar/index.d.ts.map +1 -0
  99. package/dist/atoms/{composed → components/data}/StatCard/StatCard.d.ts +3 -3
  100. package/dist/atoms/components/data/StatCard/StatCard.d.ts.map +1 -0
  101. package/dist/atoms/components/data/StatCard/index.d.ts +2 -0
  102. package/dist/atoms/components/data/StatCard/index.d.ts.map +1 -0
  103. package/dist/atoms/components/data/Table/Table.d.ts +41 -0
  104. package/dist/atoms/components/data/Table/Table.d.ts.map +1 -0
  105. package/dist/atoms/components/data/Table/index.d.ts +2 -0
  106. package/dist/atoms/components/data/Table/index.d.ts.map +1 -0
  107. package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts +26 -0
  108. package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts.map +1 -0
  109. package/dist/atoms/components/data/TruncatedText/index.d.ts +2 -0
  110. package/dist/atoms/components/data/TruncatedText/index.d.ts.map +1 -0
  111. package/dist/atoms/components/data/index.d.ts +13 -0
  112. package/dist/atoms/components/data/index.d.ts.map +1 -0
  113. package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts +19 -0
  114. package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts.map +1 -0
  115. package/dist/atoms/components/domain/SalesPanel/index.d.ts +2 -0
  116. package/dist/atoms/components/domain/SalesPanel/index.d.ts.map +1 -0
  117. package/dist/atoms/components/domain/SalesPanel/mockSalesData.d.ts +63 -0
  118. package/dist/atoms/components/domain/SalesPanel/mockSalesData.d.ts.map +1 -0
  119. package/dist/atoms/components/domain/index.d.ts +2 -0
  120. package/dist/atoms/components/domain/index.d.ts.map +1 -0
  121. package/dist/atoms/{composed → components/feedback}/Alert/Alert.d.ts +4 -4
  122. package/dist/atoms/components/feedback/Alert/Alert.d.ts.map +1 -0
  123. package/dist/atoms/components/feedback/Alert/index.d.ts +2 -0
  124. package/dist/atoms/components/feedback/Alert/index.d.ts.map +1 -0
  125. package/dist/atoms/{composed → components/feedback}/EmptyState/EmptyState.d.ts +3 -3
  126. package/dist/atoms/components/feedback/EmptyState/EmptyState.d.ts.map +1 -0
  127. package/dist/atoms/components/feedback/EmptyState/index.d.ts +2 -0
  128. package/dist/atoms/components/feedback/EmptyState/index.d.ts.map +1 -0
  129. package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts +61 -0
  130. package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
  131. package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts +2 -0
  132. package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts.map +1 -0
  133. package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts +67 -0
  134. package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts.map +1 -0
  135. package/dist/atoms/components/feedback/Skeleton/index.d.ts +2 -0
  136. package/dist/atoms/components/feedback/Skeleton/index.d.ts.map +1 -0
  137. package/dist/atoms/{composed → components/feedback}/Toast/Toast.d.ts +4 -4
  138. package/dist/atoms/components/feedback/Toast/Toast.d.ts.map +1 -0
  139. package/dist/atoms/{composed → components/feedback}/Toast/index.d.ts +1 -1
  140. package/dist/atoms/components/feedback/Toast/index.d.ts.map +1 -0
  141. package/dist/atoms/components/feedback/index.d.ts +6 -0
  142. package/dist/atoms/components/feedback/index.d.ts.map +1 -0
  143. package/dist/atoms/{composed → components/forms}/DateTimePicker/DateTimePicker.d.ts +6 -6
  144. package/dist/atoms/components/forms/DateTimePicker/DateTimePicker.d.ts.map +1 -0
  145. package/dist/atoms/components/forms/DateTimePicker/index.d.ts +3 -0
  146. package/dist/atoms/components/forms/DateTimePicker/index.d.ts.map +1 -0
  147. package/dist/atoms/{composed → components/forms}/FileUpload/FileUpload.d.ts +3 -3
  148. package/dist/atoms/components/forms/FileUpload/FileUpload.d.ts.map +1 -0
  149. package/dist/atoms/components/forms/FileUpload/index.d.ts +3 -0
  150. package/dist/atoms/components/forms/FileUpload/index.d.ts.map +1 -0
  151. package/dist/atoms/{composed → components/forms}/FormField/FormField.d.ts +2 -2
  152. package/dist/atoms/components/forms/FormField/FormField.d.ts.map +1 -0
  153. package/dist/atoms/components/forms/FormField/index.d.ts +2 -0
  154. package/dist/atoms/components/forms/FormField/index.d.ts.map +1 -0
  155. package/dist/atoms/components/forms/index.d.ts +4 -0
  156. package/dist/atoms/components/forms/index.d.ts.map +1 -0
  157. package/dist/atoms/components/index.d.ts +10 -0
  158. package/dist/atoms/components/index.d.ts.map +1 -0
  159. package/dist/atoms/{composed → components/layout}/Accordion/Accordion.d.ts +3 -3
  160. package/dist/atoms/components/layout/Accordion/Accordion.d.ts.map +1 -0
  161. package/dist/atoms/components/layout/Accordion/index.d.ts +2 -0
  162. package/dist/atoms/components/layout/Accordion/index.d.ts.map +1 -0
  163. package/dist/atoms/{composed → components/layout}/Breadcrumb/Breadcrumb.d.ts +2 -3
  164. package/dist/atoms/components/layout/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  165. package/dist/atoms/components/layout/Breadcrumb/index.d.ts +2 -0
  166. package/dist/atoms/components/layout/Breadcrumb/index.d.ts.map +1 -0
  167. package/dist/atoms/components/layout/Dialog/Dialog.d.ts +45 -0
  168. package/dist/atoms/components/layout/Dialog/Dialog.d.ts.map +1 -0
  169. package/dist/atoms/components/layout/Dialog/index.d.ts +3 -0
  170. package/dist/atoms/components/layout/Dialog/index.d.ts.map +1 -0
  171. package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts +40 -0
  172. package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts.map +1 -0
  173. package/dist/atoms/components/layout/Dropdown/index.d.ts +3 -0
  174. package/dist/atoms/components/layout/Dropdown/index.d.ts.map +1 -0
  175. package/dist/atoms/components/layout/Modal/Modal.d.ts +18 -0
  176. package/dist/atoms/components/layout/Modal/Modal.d.ts.map +1 -0
  177. package/dist/atoms/components/layout/Modal/index.d.ts +3 -0
  178. package/dist/atoms/components/layout/Modal/index.d.ts.map +1 -0
  179. package/dist/atoms/components/layout/Tabs/Tabs.d.ts +46 -0
  180. package/dist/atoms/components/layout/Tabs/Tabs.d.ts.map +1 -0
  181. package/dist/atoms/components/layout/Tabs/index.d.ts +2 -0
  182. package/dist/atoms/components/layout/Tabs/index.d.ts.map +1 -0
  183. package/dist/atoms/{composed → components/layout}/Tooltip/Tooltip.d.ts +6 -6
  184. package/dist/atoms/components/layout/Tooltip/Tooltip.d.ts.map +1 -0
  185. package/dist/atoms/components/layout/Tooltip/index.d.ts +2 -0
  186. package/dist/atoms/components/layout/Tooltip/index.d.ts.map +1 -0
  187. package/dist/atoms/components/layout/index.d.ts +8 -0
  188. package/dist/atoms/components/layout/index.d.ts.map +1 -0
  189. package/dist/atoms/{composed → components/navigation}/GlobalSearch/GlobalSearch.d.ts +2 -3
  190. package/dist/atoms/components/navigation/GlobalSearch/GlobalSearch.d.ts.map +1 -0
  191. package/dist/atoms/components/navigation/GlobalSearch/index.d.ts +2 -0
  192. package/dist/atoms/components/navigation/GlobalSearch/index.d.ts.map +1 -0
  193. package/dist/atoms/components/navigation/index.d.ts +2 -0
  194. package/dist/atoms/components/navigation/index.d.ts.map +1 -0
  195. package/dist/atoms/{composed → components/theme}/ColorSwatch/ColorSwatch.d.ts +2 -2
  196. package/dist/atoms/components/theme/ColorSwatch/ColorSwatch.d.ts.map +1 -0
  197. package/dist/atoms/components/theme/ColorSwatch/index.d.ts +2 -0
  198. package/dist/atoms/components/theme/ColorSwatch/index.d.ts.map +1 -0
  199. package/dist/atoms/components/theme/DarkModeToggle.d.ts.map +1 -0
  200. package/dist/atoms/{composed → components/theme}/PaletteSwitcher.d.ts +1 -1
  201. package/dist/atoms/components/theme/PaletteSwitcher.d.ts.map +1 -0
  202. package/dist/atoms/components/theme/StyleGuide.d.ts +3 -0
  203. package/dist/atoms/components/theme/StyleGuide.d.ts.map +1 -0
  204. package/dist/atoms/components/theme/index.d.ts +5 -0
  205. package/dist/atoms/components/theme/index.d.ts.map +1 -0
  206. package/dist/atoms/{composed → components/user}/UserAvatar/UserAvatar.d.ts +2 -3
  207. package/dist/atoms/components/user/UserAvatar/UserAvatar.d.ts.map +1 -0
  208. package/dist/atoms/components/user/UserAvatar/index.d.ts +2 -0
  209. package/dist/atoms/components/user/UserAvatar/index.d.ts.map +1 -0
  210. package/dist/atoms/{composed → components/user}/UserMenu/UserMenu.d.ts +2 -3
  211. package/dist/atoms/components/user/UserMenu/UserMenu.d.ts.map +1 -0
  212. package/dist/atoms/components/user/UserMenu/index.d.ts +2 -0
  213. package/dist/atoms/components/user/UserMenu/index.d.ts.map +1 -0
  214. package/dist/atoms/components/user/index.d.ts +3 -0
  215. package/dist/atoms/components/user/index.d.ts.map +1 -0
  216. package/dist/atoms/config/responsive.d.ts +147 -0
  217. package/dist/atoms/config/responsive.d.ts.map +1 -0
  218. package/dist/atoms/hooks/index.d.ts +5 -0
  219. package/dist/atoms/hooks/index.d.ts.map +1 -0
  220. package/dist/atoms/hooks/use-toast.d.ts +16 -0
  221. package/dist/atoms/hooks/use-toast.d.ts.map +1 -0
  222. package/dist/atoms/hooks/useApi.d.ts +2 -2
  223. package/dist/atoms/hooks/useApi.d.ts.map +1 -1
  224. package/dist/atoms/hooks/useResponsive.d.ts +42 -0
  225. package/dist/atoms/hooks/useResponsive.d.ts.map +1 -0
  226. package/dist/atoms/index.d.ts +6 -8
  227. package/dist/atoms/index.d.ts.map +1 -1
  228. package/dist/atoms/primitives/Badge.d.ts +10 -0
  229. package/dist/atoms/primitives/Badge.d.ts.map +1 -0
  230. package/dist/atoms/{ui → primitives}/ErrorBoundary.d.ts +3 -3
  231. package/dist/atoms/primitives/ErrorBoundary.d.ts.map +1 -0
  232. package/dist/atoms/primitives/Select.d.ts +30 -0
  233. package/dist/atoms/primitives/Select.d.ts.map +1 -0
  234. package/dist/atoms/primitives/Switch.d.ts +10 -0
  235. package/dist/atoms/primitives/Switch.d.ts.map +1 -0
  236. package/dist/atoms/primitives/Tabs.d.ts +30 -0
  237. package/dist/atoms/primitives/Tabs.d.ts.map +1 -0
  238. package/dist/atoms/primitives/avatar.d.ts.map +1 -0
  239. package/dist/atoms/primitives/button.d.ts +11 -0
  240. package/dist/atoms/primitives/button.d.ts.map +1 -0
  241. package/dist/atoms/primitives/button.variants.d.ts +7 -0
  242. package/dist/atoms/primitives/button.variants.d.ts.map +1 -0
  243. package/dist/atoms/{ui → primitives}/card.d.ts +2 -1
  244. package/dist/atoms/primitives/card.d.ts.map +1 -0
  245. package/dist/atoms/primitives/checkbox.d.ts +12 -0
  246. package/dist/atoms/primitives/checkbox.d.ts.map +1 -0
  247. package/dist/atoms/primitives/dialog.d.ts +34 -0
  248. package/dist/atoms/primitives/dialog.d.ts.map +1 -0
  249. package/dist/atoms/primitives/dropdown-menu.d.ts.map +1 -0
  250. package/dist/atoms/primitives/index.d.ts +17 -0
  251. package/dist/atoms/primitives/index.d.ts.map +1 -0
  252. package/dist/atoms/primitives/input.d.ts.map +1 -0
  253. package/dist/atoms/{ui → primitives}/label.d.ts +4 -1
  254. package/dist/atoms/primitives/label.d.ts.map +1 -0
  255. package/dist/atoms/primitives/skeleton.d.ts.map +1 -0
  256. package/dist/atoms/{ui → primitives}/spinner.d.ts +4 -4
  257. package/dist/atoms/primitives/spinner.d.ts.map +1 -0
  258. package/dist/atoms/primitives/table.d.ts.map +1 -0
  259. package/dist/atoms/services/api/client.d.ts +11 -2
  260. package/dist/atoms/services/api/client.d.ts.map +1 -1
  261. package/dist/atoms/services/auth-service.d.ts +1 -1
  262. package/dist/atoms/services/auth-service.d.ts.map +1 -1
  263. package/dist/atoms/services/health.d.ts +2 -2
  264. package/dist/atoms/services/index.d.ts +3 -3
  265. package/dist/atoms/shared/config/dashboard-sizes.d.ts +17 -17
  266. package/dist/atoms/shared/config/dashboard-sizes.d.ts.map +1 -1
  267. package/dist/atoms/shared/config/environment.d.ts.map +1 -1
  268. package/dist/atoms/shared/index.d.ts +4 -3
  269. package/dist/atoms/shared/index.d.ts.map +1 -1
  270. package/dist/atoms/types/auth.d.ts +11 -1
  271. package/dist/atoms/types/auth.d.ts.map +1 -1
  272. package/dist/atoms/types/entity-config.d.ts +117 -0
  273. package/dist/atoms/types/entity-config.d.ts.map +1 -0
  274. package/dist/atoms/types/generated.d.ts.map +1 -1
  275. package/dist/atoms/types/index.d.ts +6 -3
  276. package/dist/atoms/types/index.d.ts.map +1 -1
  277. package/dist/atoms/types/loading.d.ts +1 -1
  278. package/dist/atoms/types/navigation.d.ts +30 -0
  279. package/dist/atoms/types/navigation.d.ts.map +1 -0
  280. package/dist/atoms/types/ui-config.d.ts +50 -0
  281. package/dist/atoms/types/ui-config.d.ts.map +1 -0
  282. package/dist/atoms/utils/animations.d.ts +7 -7
  283. package/dist/atoms/utils/animations.d.ts.map +1 -1
  284. package/dist/atoms/utils/color-manager.d.ts +68 -0
  285. package/dist/atoms/utils/color-manager.d.ts.map +1 -0
  286. package/dist/atoms/utils/debounce.d.ts +6 -0
  287. package/dist/atoms/utils/debounce.d.ts.map +1 -0
  288. package/dist/atoms/utils/field-detection.d.ts +15 -0
  289. package/dist/atoms/utils/field-detection.d.ts.map +1 -0
  290. package/dist/atoms/utils/icon-map.d.ts +68 -0
  291. package/dist/atoms/utils/icon-map.d.ts.map +1 -0
  292. package/dist/atoms/utils/icon-resolver.d.ts +16 -0
  293. package/dist/atoms/utils/icon-resolver.d.ts.map +1 -0
  294. package/dist/atoms/utils/index.d.ts +5 -0
  295. package/dist/atoms/utils/index.d.ts.map +1 -0
  296. package/dist/atoms/utils/metric-engine.d.ts +22 -0
  297. package/dist/atoms/utils/metric-engine.d.ts.map +1 -0
  298. package/dist/atoms/utils/tooltip-helpers.d.ts +1 -1
  299. package/dist/atoms/utils/tooltip-helpers.d.ts.map +1 -1
  300. package/dist/atoms/utils/ui-mapping.d.ts +19 -0
  301. package/dist/atoms/utils/ui-mapping.d.ts.map +1 -0
  302. package/dist/atoms/utils/utils.d.ts +7 -1
  303. package/dist/atoms/utils/utils.d.ts.map +1 -1
  304. package/dist/codegen/openapi/bulk-types.d.ts +142 -0
  305. package/dist/codegen/openapi/bulk-types.d.ts.map +1 -0
  306. package/dist/features/auth/components/LoginForm.d.ts.map +1 -1
  307. package/dist/features/auth/components/LogoutButton.d.ts.map +1 -1
  308. package/dist/features/auth/components/ProtectedRoute.d.ts +2 -2
  309. package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -1
  310. package/dist/features/auth/components/index.d.ts +3 -3
  311. package/dist/features/auth/hooks/auth-context.d.ts +3 -0
  312. package/dist/features/auth/hooks/auth-context.d.ts.map +1 -0
  313. package/dist/features/auth/hooks/index.d.ts +4 -2
  314. package/dist/features/auth/hooks/index.d.ts.map +1 -1
  315. package/dist/features/auth/hooks/use-auth.d.ts +3 -0
  316. package/dist/features/auth/hooks/use-auth.d.ts.map +1 -0
  317. package/dist/features/auth/hooks/useAuth.d.ts +3 -4
  318. package/dist/features/auth/hooks/useAuth.d.ts.map +1 -1
  319. package/dist/features/auth/hooks/useAuthContext.d.ts +7 -0
  320. package/dist/features/auth/hooks/useAuthContext.d.ts.map +1 -0
  321. package/dist/features/auth/hooks/usePermissions.d.ts +3 -3
  322. package/dist/features/auth/index.d.ts +3 -2
  323. package/dist/features/auth/index.d.ts.map +1 -1
  324. package/dist/features/auth/providers/MockAuthProvider.d.ts +8 -0
  325. package/dist/features/auth/providers/MockAuthProvider.d.ts.map +1 -0
  326. package/dist/features/auth/providers/index.d.ts +3 -0
  327. package/dist/features/auth/providers/index.d.ts.map +1 -0
  328. package/dist/features/auth/providers/mock-auth-context.d.ts +3 -0
  329. package/dist/features/auth/providers/mock-auth-context.d.ts.map +1 -0
  330. package/dist/features/auth/providers/use-mock-auth.d.ts +3 -0
  331. package/dist/features/auth/providers/use-mock-auth.d.ts.map +1 -0
  332. package/dist/features/auth/services/mock-auth-service.d.ts +17 -0
  333. package/dist/features/auth/services/mock-auth-service.d.ts.map +1 -0
  334. package/dist/features/index.d.ts +1 -1
  335. package/dist/frontend-patterns.css +5069 -516
  336. package/dist/index.d.ts +17 -9
  337. package/dist/index.d.ts.map +1 -1
  338. package/dist/index.es.js +27080 -8451
  339. package/dist/index.es.js.map +1 -1
  340. package/dist/index.js +27103 -8453
  341. package/dist/index.js.map +1 -1
  342. package/dist/molecules/feedback/index.d.ts +2 -0
  343. package/dist/molecules/feedback/index.d.ts.map +1 -0
  344. package/dist/molecules/forms/FormGroup.d.ts +2 -2
  345. package/dist/molecules/forms/FormGroup.d.ts.map +1 -1
  346. package/dist/molecules/forms/SearchInput.d.ts +1 -1
  347. package/dist/molecules/forms/SearchInput.d.ts.map +1 -1
  348. package/dist/molecules/forms/index.d.ts +2 -2
  349. package/dist/molecules/forms/index.d.ts.map +1 -1
  350. package/dist/molecules/index.d.ts +3 -3
  351. package/dist/molecules/layout/AppHeader/AppHeader.d.ts +1 -1
  352. package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -1
  353. package/dist/molecules/layout/AppHeader/index.d.ts +1 -1
  354. package/dist/molecules/layout/BulkSelectionBar.d.ts +15 -0
  355. package/dist/molecules/layout/BulkSelectionBar.d.ts.map +1 -0
  356. package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts +16 -0
  357. package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts.map +1 -0
  358. package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts +2 -0
  359. package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts.map +1 -0
  360. package/dist/molecules/layout/NavigationContext.d.ts +9 -0
  361. package/dist/molecules/layout/NavigationContext.d.ts.map +1 -0
  362. package/dist/molecules/layout/PageTemplate.d.ts +1 -1
  363. package/dist/molecules/layout/PageTemplate.d.ts.map +1 -1
  364. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts +4 -4
  365. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts.map +1 -1
  366. package/dist/molecules/layout/SectionHeader/index.d.ts +1 -1
  367. package/dist/molecules/layout/ShowcaseSection.d.ts +4 -4
  368. package/dist/molecules/layout/ShowcaseSection.d.ts.map +1 -1
  369. package/dist/molecules/layout/Sidebar.d.ts.map +1 -1
  370. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +3 -1
  371. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -1
  372. package/dist/molecules/layout/SidebarButton/index.d.ts +1 -1
  373. package/dist/molecules/layout/SidebarContext.d.ts +1 -8
  374. package/dist/molecules/layout/SidebarContext.d.ts.map +1 -1
  375. package/dist/molecules/layout/index.d.ts +14 -7
  376. package/dist/molecules/layout/index.d.ts.map +1 -1
  377. package/dist/molecules/layout/navigation-context.d.ts +9 -0
  378. package/dist/molecules/layout/navigation-context.d.ts.map +1 -0
  379. package/dist/molecules/layout/sidebar-context.d.ts +7 -0
  380. package/dist/molecules/layout/sidebar-context.d.ts.map +1 -0
  381. package/dist/molecules/layout/use-navigation.d.ts +2 -0
  382. package/dist/molecules/layout/use-navigation.d.ts.map +1 -0
  383. package/dist/molecules/layout/use-sidebar.d.ts +2 -0
  384. package/dist/molecules/layout/use-sidebar.d.ts.map +1 -0
  385. package/dist/molecules/navigation/NavMenu.d.ts +2 -2
  386. package/dist/molecules/navigation/NavMenu.d.ts.map +1 -1
  387. package/dist/molecules/navigation/Pagination.d.ts +2 -2
  388. package/dist/molecules/navigation/index.d.ts +2 -2
  389. package/dist/organisms/index.d.ts +1 -1
  390. package/dist/organisms/showcase/ComponentShowcasePage.d.ts +1 -1
  391. package/dist/organisms/showcase/ComponentShowcasePage.d.ts.map +1 -1
  392. package/dist/templates/AuthTemplate.d.ts +4 -4
  393. package/dist/templates/AuthTemplate.d.ts.map +1 -1
  394. package/dist/templates/ComponentShowcaseTemplate.d.ts +7 -7
  395. package/dist/templates/ComponentShowcaseTemplate.d.ts.map +1 -1
  396. package/dist/templates/DashboardTemplate.d.ts +3 -3
  397. package/dist/templates/DashboardTemplate.d.ts.map +1 -1
  398. package/dist/templates/DataTemplate.d.ts +3 -3
  399. package/dist/templates/DataTemplate.d.ts.map +1 -1
  400. package/dist/templates/EnhancedDataTemplate.d.ts +188 -0
  401. package/dist/templates/EnhancedDataTemplate.d.ts.map +1 -0
  402. package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts +18 -0
  403. package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts.map +1 -0
  404. package/dist/templates/EnhancedDataTemplate.hooks.d.ts +22 -0
  405. package/dist/templates/EnhancedDataTemplate.hooks.d.ts.map +1 -0
  406. package/dist/templates/admin/AdminCRUDTemplate.d.ts +4 -4
  407. package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -1
  408. package/dist/templates/admin/AdminDashboardTemplate.d.ts +10 -13
  409. package/dist/templates/admin/AdminDashboardTemplate.d.ts.map +1 -1
  410. package/dist/templates/admin/AdminDetailTemplate.d.ts +4 -4
  411. package/dist/templates/admin/AdminDetailTemplate.d.ts.map +1 -1
  412. package/dist/templates/admin/index.d.ts +3 -3
  413. package/dist/templates/admin/index.d.ts.map +1 -1
  414. package/dist/templates/api/APIDataTemplate.d.ts +71 -0
  415. package/dist/templates/api/APIDataTemplate.d.ts.map +1 -0
  416. package/dist/templates/api/create-api-data-template.d.ts +4 -0
  417. package/dist/templates/api/create-api-data-template.d.ts.map +1 -0
  418. package/dist/templates/api/index.d.ts +9 -0
  419. package/dist/templates/api/index.d.ts.map +1 -0
  420. package/dist/templates/factory.d.ts +4 -3
  421. package/dist/templates/factory.d.ts.map +1 -1
  422. package/dist/templates/index.d.ts +8 -6
  423. package/dist/templates/index.d.ts.map +1 -1
  424. package/package.json +38 -9
  425. package/dist/atoms/composed/Accordion/Accordion.d.ts.map +0 -1
  426. package/dist/atoms/composed/Accordion/index.d.ts +0 -2
  427. package/dist/atoms/composed/Accordion/index.d.ts.map +0 -1
  428. package/dist/atoms/composed/Alert/Alert.d.ts.map +0 -1
  429. package/dist/atoms/composed/Alert/index.d.ts +0 -2
  430. package/dist/atoms/composed/Alert/index.d.ts.map +0 -1
  431. package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts.map +0 -1
  432. package/dist/atoms/composed/Breadcrumb/index.d.ts +0 -2
  433. package/dist/atoms/composed/Breadcrumb/index.d.ts.map +0 -1
  434. package/dist/atoms/composed/Chart/Chart.d.ts +0 -37
  435. package/dist/atoms/composed/Chart/Chart.d.ts.map +0 -1
  436. package/dist/atoms/composed/Chart/index.d.ts +0 -3
  437. package/dist/atoms/composed/Chart/index.d.ts.map +0 -1
  438. package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts.map +0 -1
  439. package/dist/atoms/composed/ColorSwatch/index.d.ts +0 -2
  440. package/dist/atoms/composed/ColorSwatch/index.d.ts.map +0 -1
  441. package/dist/atoms/composed/DarkModeToggle.d.ts.map +0 -1
  442. package/dist/atoms/composed/DataBadge/DataBadge.d.ts +0 -13
  443. package/dist/atoms/composed/DataBadge/DataBadge.d.ts.map +0 -1
  444. package/dist/atoms/composed/DataBadge/index.d.ts +0 -2
  445. package/dist/atoms/composed/DataBadge/index.d.ts.map +0 -1
  446. package/dist/atoms/composed/DataTable/DataTable.d.ts +0 -28
  447. package/dist/atoms/composed/DataTable/DataTable.d.ts.map +0 -1
  448. package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts.map +0 -1
  449. package/dist/atoms/composed/DataTable/index.d.ts +0 -3
  450. package/dist/atoms/composed/DataTable/index.d.ts.map +0 -1
  451. package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts.map +0 -1
  452. package/dist/atoms/composed/DateTimePicker/index.d.ts +0 -3
  453. package/dist/atoms/composed/DateTimePicker/index.d.ts.map +0 -1
  454. package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts.map +0 -1
  455. package/dist/atoms/composed/DetailedCard/index.d.ts +0 -3
  456. package/dist/atoms/composed/DetailedCard/index.d.ts.map +0 -1
  457. package/dist/atoms/composed/EmptyState/EmptyState.d.ts.map +0 -1
  458. package/dist/atoms/composed/EmptyState/index.d.ts +0 -2
  459. package/dist/atoms/composed/EmptyState/index.d.ts.map +0 -1
  460. package/dist/atoms/composed/FileUpload/FileUpload.d.ts.map +0 -1
  461. package/dist/atoms/composed/FileUpload/index.d.ts +0 -3
  462. package/dist/atoms/composed/FileUpload/index.d.ts.map +0 -1
  463. package/dist/atoms/composed/FormField/FormField.d.ts.map +0 -1
  464. package/dist/atoms/composed/FormField/index.d.ts +0 -2
  465. package/dist/atoms/composed/FormField/index.d.ts.map +0 -1
  466. package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts.map +0 -1
  467. package/dist/atoms/composed/GlobalSearch/index.d.ts +0 -2
  468. package/dist/atoms/composed/GlobalSearch/index.d.ts.map +0 -1
  469. package/dist/atoms/composed/IconBadge/IconBadge.d.ts +0 -16
  470. package/dist/atoms/composed/IconBadge/IconBadge.d.ts.map +0 -1
  471. package/dist/atoms/composed/IconBadge/index.d.ts +0 -3
  472. package/dist/atoms/composed/IconBadge/index.d.ts.map +0 -1
  473. package/dist/atoms/composed/Modal/Modal.d.ts +0 -18
  474. package/dist/atoms/composed/Modal/Modal.d.ts.map +0 -1
  475. package/dist/atoms/composed/Modal/index.d.ts +0 -3
  476. package/dist/atoms/composed/Modal/index.d.ts.map +0 -1
  477. package/dist/atoms/composed/PaletteSwitcher.d.ts.map +0 -1
  478. package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts.map +0 -1
  479. package/dist/atoms/composed/ProgressBar/index.d.ts +0 -2
  480. package/dist/atoms/composed/ProgressBar/index.d.ts.map +0 -1
  481. package/dist/atoms/composed/StatCard/StatCard.d.ts.map +0 -1
  482. package/dist/atoms/composed/StatCard/index.d.ts +0 -2
  483. package/dist/atoms/composed/StatCard/index.d.ts.map +0 -1
  484. package/dist/atoms/composed/StyleGuide.d.ts +0 -3
  485. package/dist/atoms/composed/StyleGuide.d.ts.map +0 -1
  486. package/dist/atoms/composed/Toast/Toast.d.ts.map +0 -1
  487. package/dist/atoms/composed/Toast/index.d.ts.map +0 -1
  488. package/dist/atoms/composed/Tooltip/Tooltip.d.ts.map +0 -1
  489. package/dist/atoms/composed/Tooltip/index.d.ts +0 -2
  490. package/dist/atoms/composed/Tooltip/index.d.ts.map +0 -1
  491. package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts.map +0 -1
  492. package/dist/atoms/composed/UserAvatar/index.d.ts +0 -2
  493. package/dist/atoms/composed/UserAvatar/index.d.ts.map +0 -1
  494. package/dist/atoms/composed/UserMenu/UserMenu.d.ts.map +0 -1
  495. package/dist/atoms/composed/UserMenu/index.d.ts +0 -2
  496. package/dist/atoms/composed/UserMenu/index.d.ts.map +0 -1
  497. package/dist/atoms/composed/index.d.ts +0 -25
  498. package/dist/atoms/composed/index.d.ts.map +0 -1
  499. package/dist/atoms/ui/Badge.d.ts +0 -10
  500. package/dist/atoms/ui/Badge.d.ts.map +0 -1
  501. package/dist/atoms/ui/ErrorBoundary.d.ts.map +0 -1
  502. package/dist/atoms/ui/Select.d.ts +0 -28
  503. package/dist/atoms/ui/Select.d.ts.map +0 -1
  504. package/dist/atoms/ui/Switch.d.ts +0 -9
  505. package/dist/atoms/ui/Switch.d.ts.map +0 -1
  506. package/dist/atoms/ui/Tabs.d.ts +0 -30
  507. package/dist/atoms/ui/Tabs.d.ts.map +0 -1
  508. package/dist/atoms/ui/avatar.d.ts.map +0 -1
  509. package/dist/atoms/ui/button.d.ts +0 -14
  510. package/dist/atoms/ui/button.d.ts.map +0 -1
  511. package/dist/atoms/ui/card.d.ts.map +0 -1
  512. package/dist/atoms/ui/dropdown-menu.d.ts.map +0 -1
  513. package/dist/atoms/ui/index.d.ts +0 -15
  514. package/dist/atoms/ui/index.d.ts.map +0 -1
  515. package/dist/atoms/ui/input.d.ts.map +0 -1
  516. package/dist/atoms/ui/label.d.ts.map +0 -1
  517. package/dist/atoms/ui/skeleton.d.ts.map +0 -1
  518. package/dist/atoms/ui/spinner.d.ts.map +0 -1
  519. package/dist/atoms/ui/table.d.ts.map +0 -1
  520. package/src/App.css +0 -42
  521. package/src/App.tsx +0 -54
  522. package/src/__tests__/README.md +0 -221
  523. package/src/__tests__/atoms/hooks/simple-hooks.test.ts +0 -44
  524. package/src/__tests__/atoms/ui/button.test.tsx +0 -68
  525. package/src/__tests__/atoms/utils/simple.test.ts +0 -18
  526. package/src/__tests__/atoms/utils/utils.test.ts +0 -77
  527. package/src/__tests__/features/auth/simple-auth.test.tsx +0 -40
  528. package/src/__tests__/molecules/layout/simple-layout.test.tsx +0 -81
  529. package/src/__tests__/organisms/showcase/simple-showcase.test.tsx +0 -167
  530. package/src/__tests__/setup.ts +0 -51
  531. package/src/__tests__/utils.tsx +0 -123
  532. package/src/atoms/composed/Accordion/Accordion.tsx +0 -271
  533. package/src/atoms/composed/Accordion/index.ts +0 -1
  534. package/src/atoms/composed/Alert/Alert.tsx +0 -132
  535. package/src/atoms/composed/Alert/index.ts +0 -1
  536. package/src/atoms/composed/Breadcrumb/Breadcrumb.tsx +0 -83
  537. package/src/atoms/composed/Breadcrumb/index.ts +0 -1
  538. package/src/atoms/composed/Chart/Chart.tsx +0 -425
  539. package/src/atoms/composed/Chart/index.ts +0 -2
  540. package/src/atoms/composed/ColorSwatch/ColorSwatch.tsx +0 -72
  541. package/src/atoms/composed/ColorSwatch/index.ts +0 -1
  542. package/src/atoms/composed/DarkModeToggle.tsx +0 -66
  543. package/src/atoms/composed/DataBadge/DataBadge.tsx +0 -81
  544. package/src/atoms/composed/DataBadge/index.ts +0 -1
  545. package/src/atoms/composed/DataTable/DataTable.tsx +0 -394
  546. package/src/atoms/composed/DataTable/TableCellWithTooltip.tsx +0 -41
  547. package/src/atoms/composed/DataTable/index.ts +0 -2
  548. package/src/atoms/composed/DateTimePicker/DateTimePicker.tsx +0 -611
  549. package/src/atoms/composed/DateTimePicker/index.ts +0 -2
  550. package/src/atoms/composed/DetailedCard/DetailedCard.tsx +0 -181
  551. package/src/atoms/composed/DetailedCard/index.ts +0 -2
  552. package/src/atoms/composed/EmptyState/EmptyState.tsx +0 -90
  553. package/src/atoms/composed/EmptyState/index.ts +0 -1
  554. package/src/atoms/composed/FileUpload/FileUpload.tsx +0 -477
  555. package/src/atoms/composed/FileUpload/index.ts +0 -2
  556. package/src/atoms/composed/FormField/FormField.tsx +0 -92
  557. package/src/atoms/composed/FormField/index.ts +0 -1
  558. package/src/atoms/composed/GlobalSearch/GlobalSearch.tsx +0 -37
  559. package/src/atoms/composed/GlobalSearch/index.ts +0 -1
  560. package/src/atoms/composed/IconBadge/IconBadge.tsx +0 -95
  561. package/src/atoms/composed/IconBadge/index.ts +0 -2
  562. package/src/atoms/composed/Modal/Modal.tsx +0 -223
  563. package/src/atoms/composed/Modal/index.ts +0 -2
  564. package/src/atoms/composed/PaletteSwitcher.tsx +0 -386
  565. package/src/atoms/composed/ProgressBar/ProgressBar.tsx +0 -116
  566. package/src/atoms/composed/ProgressBar/index.ts +0 -1
  567. package/src/atoms/composed/StatCard/StatCard.tsx +0 -219
  568. package/src/atoms/composed/StatCard/index.ts +0 -1
  569. package/src/atoms/composed/StyleGuide.tsx +0 -717
  570. package/src/atoms/composed/Toast/Toast.tsx +0 -219
  571. package/src/atoms/composed/Toast/index.ts +0 -1
  572. package/src/atoms/composed/Tooltip/Tooltip.tsx +0 -213
  573. package/src/atoms/composed/Tooltip/index.ts +0 -1
  574. package/src/atoms/composed/UserAvatar/UserAvatar.tsx +0 -139
  575. package/src/atoms/composed/UserAvatar/index.ts +0 -1
  576. package/src/atoms/composed/UserMenu/UserMenu.tsx +0 -16
  577. package/src/atoms/composed/UserMenu/index.ts +0 -1
  578. package/src/atoms/composed/index.ts +0 -29
  579. package/src/atoms/hooks/useApi.ts +0 -80
  580. package/src/atoms/hooks/useHealth.ts +0 -17
  581. package/src/atoms/index.ts +0 -13
  582. package/src/atoms/services/api/client.ts +0 -134
  583. package/src/atoms/services/auth-service.ts +0 -248
  584. package/src/atoms/services/health.ts +0 -15
  585. package/src/atoms/services/index.ts +0 -3
  586. package/src/atoms/shared/config/constants.ts +0 -17
  587. package/src/atoms/shared/config/dashboard-sizes.ts +0 -111
  588. package/src/atoms/shared/config/environment.ts +0 -10
  589. package/src/atoms/shared/index.ts +0 -4
  590. package/src/atoms/shared/styles/color-palettes.css +0 -566
  591. package/src/atoms/types/auth.ts +0 -62
  592. package/src/atoms/types/generated.ts +0 -1469
  593. package/src/atoms/types/index.ts +0 -4
  594. package/src/atoms/types/loading.ts +0 -28
  595. package/src/atoms/ui/Badge.tsx +0 -30
  596. package/src/atoms/ui/ErrorBoundary.tsx +0 -59
  597. package/src/atoms/ui/Select.tsx +0 -53
  598. package/src/atoms/ui/Switch.tsx +0 -42
  599. package/src/atoms/ui/Tabs.tsx +0 -118
  600. package/src/atoms/ui/avatar.tsx +0 -48
  601. package/src/atoms/ui/button.tsx +0 -70
  602. package/src/atoms/ui/card.tsx +0 -76
  603. package/src/atoms/ui/dropdown-menu.tsx +0 -199
  604. package/src/atoms/ui/index.ts +0 -39
  605. package/src/atoms/ui/input.tsx +0 -23
  606. package/src/atoms/ui/label.tsx +0 -23
  607. package/src/atoms/ui/skeleton.tsx +0 -13
  608. package/src/atoms/ui/spinner.tsx +0 -49
  609. package/src/atoms/ui/table.tsx +0 -116
  610. package/src/atoms/utils/animations.ts +0 -135
  611. package/src/atoms/utils/tooltip-helpers.ts +0 -140
  612. package/src/atoms/utils/utils.ts +0 -9
  613. package/src/features/auth/components/LoginForm.tsx +0 -168
  614. package/src/features/auth/components/LogoutButton.tsx +0 -19
  615. package/src/features/auth/components/ProtectedRoute.tsx +0 -60
  616. package/src/features/auth/components/index.ts +0 -4
  617. package/src/features/auth/hooks/index.ts +0 -2
  618. package/src/features/auth/hooks/useAuth.tsx +0 -205
  619. package/src/features/auth/hooks/usePermissions.ts +0 -35
  620. package/src/features/auth/index.ts +0 -2
  621. package/src/features/index.ts +0 -2
  622. package/src/index.css +0 -704
  623. package/src/index.ts +0 -13
  624. package/src/main.tsx +0 -48
  625. package/src/molecules/.gitkeep +0 -0
  626. package/src/molecules/forms/FormGroup.tsx +0 -75
  627. package/src/molecules/forms/SearchInput.tsx +0 -259
  628. package/src/molecules/forms/index.ts +0 -4
  629. package/src/molecules/index.ts +0 -4
  630. package/src/molecules/layout/AppHeader/AppHeader.tsx +0 -42
  631. package/src/molecules/layout/AppHeader/index.ts +0 -1
  632. package/src/molecules/layout/AppLayout.tsx +0 -29
  633. package/src/molecules/layout/PageTemplate.tsx +0 -87
  634. package/src/molecules/layout/SectionHeader/SectionHeader.tsx +0 -87
  635. package/src/molecules/layout/SectionHeader/index.ts +0 -1
  636. package/src/molecules/layout/ShowcaseSection.tsx +0 -57
  637. package/src/molecules/layout/Sidebar.tsx +0 -144
  638. package/src/molecules/layout/SidebarButton/SidebarButton.tsx +0 -99
  639. package/src/molecules/layout/SidebarButton/index.ts +0 -1
  640. package/src/molecules/layout/SidebarContext.tsx +0 -31
  641. package/src/molecules/layout/index.ts +0 -7
  642. package/src/molecules/navigation/NavMenu.tsx +0 -188
  643. package/src/molecules/navigation/Pagination.tsx +0 -172
  644. package/src/molecules/navigation/index.ts +0 -4
  645. package/src/organisms/index.ts +0 -5
  646. package/src/organisms/showcase/ComponentShowcasePage.tsx +0 -2496
  647. package/src/organisms/showcase/index.ts +0 -1
  648. package/src/pages/AdminShowcase/AdminCRUDShowcase.tsx +0 -242
  649. package/src/pages/AdminShowcase/AdminDashboardShowcase.tsx +0 -171
  650. package/src/pages/AdminShowcase/AdminDetailShowcase.tsx +0 -385
  651. package/src/pages/AdminShowcase/index.tsx +0 -3
  652. package/src/pages/ComponentShowcase/BadgesShowcase.tsx +0 -188
  653. package/src/pages/ComponentShowcase/CardsShowcase.tsx +0 -392
  654. package/src/pages/ComponentShowcase/PalettesShowcase.tsx +0 -207
  655. package/src/pages/ComponentShowcase/StatesShowcase.tsx +0 -485
  656. package/src/pages/ComponentShowcase/TablesShowcase.tsx +0 -134
  657. package/src/pages/ComponentShowcase/TypographyShowcase.tsx +0 -255
  658. package/src/pages/ComponentShowcase/index.tsx +0 -188
  659. package/src/pages/index.ts +0 -2
  660. package/src/templates/AuthTemplate.tsx +0 -216
  661. package/src/templates/ComponentShowcaseTemplate.tsx +0 -173
  662. package/src/templates/DashboardTemplate.tsx +0 -232
  663. package/src/templates/DataTemplate.tsx +0 -319
  664. package/src/templates/admin/AdminCRUDTemplate.tsx +0 -630
  665. package/src/templates/admin/AdminDashboardTemplate.tsx +0 -351
  666. package/src/templates/admin/AdminDetailTemplate.tsx +0 -563
  667. package/src/templates/admin/index.ts +0 -29
  668. package/src/templates/factory.tsx +0 -169
  669. package/src/templates/index.ts +0 -37
  670. package/src/vite-env.d.ts +0 -1
  671. /package/dist/atoms/{composed → components/theme}/DarkModeToggle.d.ts +0 -0
  672. /package/dist/atoms/{ui → primitives}/avatar.d.ts +0 -0
  673. /package/dist/atoms/{ui → primitives}/dropdown-menu.d.ts +0 -0
  674. /package/dist/atoms/{ui → primitives}/input.d.ts +0 -0
  675. /package/dist/atoms/{ui → primitives}/skeleton.d.ts +0 -0
  676. /package/dist/atoms/{ui → primitives}/table.d.ts +0 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,80 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Fixed
11
+ - **TypeScript Build Errors**: Resolved all TypeScript compilation errors across codegen and auth modules
12
+ - Added missing type imports in OpenAPI codegen (`ParsedParameter`, `ClientGeneratorOptions`)
13
+ - Fixed OpenAPIV3 namespace imports and type casting
14
+ - Corrected parser method signatures and response array handling
15
+ - Updated `isListEndpoint` to correctly access responses as array
16
+ - **Auth Type System**: Consolidated user types for better type safety
17
+ - Moved `name`, `roles`, and `permissions` to `BaseUser` as optional fields
18
+ - Made `ExtendedUser` a type alias to `BaseUser` for backward compatibility
19
+ - Updated `MockAuthService` and `MockAuthProvider` to use consolidated types
20
+ - Added proper `RegisterData` interface
21
+ - **Test Suite**: Fixed all test failures
22
+ - Updated hook generator tests to use correct `ParsedEndpoint` response format (array instead of object)
23
+ - All 173 tests now passing
24
+ - **Performance**: Improved MockAuthProvider performance
25
+ - Added memoization to prevent creating new auth service instance on every render
26
+ - **Component Exports**: Standardized component export patterns
27
+ - Consolidated type exports using modern TypeScript syntax (`export { Component, type Props }`)
28
+
29
+ ### Changed
30
+ - **SkeletonAvatar API**: Changed from `size` prop to separate `width` and `height` props
31
+ - **Breaking Change**: `<SkeletonAvatar size={40} />` is no longer supported
32
+ - **Migration**: Use `<SkeletonAvatar width={40} height={40} />` instead
33
+ - Added comprehensive JSDoc with migration examples
34
+ - **DataTable Templates**: Removed unsupported props from DataTemplate usage
35
+ - Removed `onSort`, `selectedRows`, `onSelectionChange` props
36
+ - Added TODO comments for future server-side sorting support (FRO-4)
37
+
38
+ ### Removed
39
+ - **Map Components**: Temporarily removed map component suite due to `react-map-gl` type compatibility issues
40
+ - Removed: `MapCluster`, `MapContainer`, `MapHeatmap`, `MapMarker`, `MapPolygon`, `MapPopup`, `MapRoute`
41
+ - Removed: `MapProvider` context system
42
+ - Removed: `DataMap` and `LocationPicker` composed components
43
+ - Removed: Map-related templates and demo pages
44
+ - **Note**: Components preserved in `backup/map-components` branch for future restoration
45
+ - **Impact**: Applications using map components will need to use alternative mapping solutions until type issues are resolved
46
+ - **Entity Templates**: Removed incomplete entity template and organism components
47
+ - Removed: `EntityManagementTemplate`, `EntityPerformanceDashboardTemplate`
48
+ - Removed: `CategoryBreakdownPanel`, `EntityListPanel`, `MetricsOverviewPanel`, `TrendAnalysisPanel`
49
+ - **Reason**: Incomplete implementations with placeholder text and non-functional features
50
+ - **Note**: Will be properly implemented in example applications and promoted back to template when production-ready
51
+ - **Metric Card Refactoring**: Removed incomplete metric card refactoring files
52
+ - Removed: `MetricCardRefactored.tsx`, `NewMetricCard.tsx`, `NewMetricCard.demo.tsx`, `NewMetricCard.meta.ts`, `NewMetricCard.presets.tsx`, `REFACTORING.md`
53
+ - Removed: 16 commented export placeholders in `variants/index.ts`
54
+ - **Reason**: Only 3 of 19 variants were refactored, leaving most functionality using fallback implementations
55
+ - **Note**: Original MetricCard remains fully functional
56
+ - **Bulk Operations Code**: Removed commented placeholder code for future FRO-35 implementation
57
+ - Removed: ~150 lines of commented code from `hook-generator.ts`
58
+ - Removed: `APIConfig` interface, `detectResourceOperations()` method, `createDefaultConfig()` method
59
+ - **Reason**: Placeholder code should not ship in pre-release; will implement from scratch when FRO-35 begins
60
+ - **Impact**: No impact - code was non-functional and commented out
61
+ - **Production Code Cleanup**: Removed debug and temporary code
62
+ - Removed: Console.log statements from `hook-generator.ts`
63
+ - Removed: Placeholder alert() handlers from `UserAvatar.tsx` (replaced with documented extension points)
64
+ - Removed: WIP/TODO comments from `Chart.tsx` (replaced with professional JSDoc)
65
+
66
+ ### Internal
67
+ - **Build Status**: Clean TypeScript compilation with zero errors
68
+ - **Test Coverage**: 173/173 tests passing across 17 test files
69
+ - **Type Safety**: Improved type inference throughout auth and codegen modules
70
+ - **Code Quality**:
71
+ - Better component organization and import consistency
72
+ - Removed ~600+ lines of incomplete, commented, or placeholder code
73
+ - No console statements in production code
74
+ - All components have professional documentation
75
+ - Clean pre-release state with no partial implementations
76
+
77
+ ## Version History
78
+
79
+ ### Pre-release Development
80
+ This is a pre-release version of the React Frontend Template. Breaking changes may occur without prior notice until v1.0.0 release.
package/README.md CHANGED
@@ -34,11 +34,26 @@ app.addRoutes("/reports", ReportsRoutes)
34
34
 
35
35
  ### Installation
36
36
 
37
+ This is a private package published to npm. Install using standard npm commands:
38
+
37
39
  ```bash
38
- # Install from NPM
40
+ # Install latest version
39
41
  npm install @pattern-stack/frontend-patterns
40
42
 
41
- # Or for local development/testing
43
+ # Install specific version
44
+ npm install @pattern-stack/frontend-patterns@0.2.0-alpha.0
45
+
46
+ # Or add to package.json dependencies
47
+ {
48
+ "dependencies": {
49
+ "@pattern-stack/frontend-patterns": "^0.2.0-alpha.0"
50
+ }
51
+ }
52
+ ```
53
+
54
+ **For Local Development:**
55
+ ```bash
56
+ # Install from local filesystem
42
57
  npm install file:../path/to/frontend-patterns
43
58
 
44
59
  # Or link for active development
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Generate Hooks Command
3
+ *
4
+ * Implementation of the `pattern-stack generate hooks` command
5
+ *
6
+ * Part of FRO-6: Generate Hooks Command
7
+ */
8
+
9
+ import { promises as fs } from 'fs'
10
+ import { join, dirname } from 'path'
11
+ import { loadOpenAPISpec, parseOpenAPI } from '../../src/codegen/openapi/parser.js'
12
+ import { generateTypes } from '../../src/codegen/openapi/type-generator.js'
13
+ import { generateAPIClient } from '../../src/codegen/openapi/client-generator.js'
14
+ import { generateHooks } from '../../src/codegen/openapi/hook-generator.js'
15
+
16
+ interface GenerateHooksOptions {
17
+ output: string
18
+ prefix?: string
19
+ client: 'axios' | 'fetch'
20
+ auth: 'bearer' | 'apiKey' | 'basic'
21
+ dryRun?: boolean
22
+ }
23
+
24
+ export async function generateHooksCommand(source: string, options: GenerateHooksOptions) {
25
+ try {
26
+ console.log('🚀 Pattern-Stack Hook Generator')
27
+ console.log('================================')
28
+ console.log()
29
+
30
+ // Load and parse OpenAPI specification
31
+ console.log('📥 Loading OpenAPI specification...')
32
+ const spec = await loadOpenAPISpec(source)
33
+ console.log(`✅ Loaded: ${spec.info.title} v${spec.info.version}`)
34
+
35
+ console.log('🔍 Parsing specification...')
36
+ const parsed = await parseOpenAPI(spec)
37
+ console.log(`✅ Found ${parsed.endpoints.length} endpoints, ${parsed.schemas.length} schemas`)
38
+
39
+ // Generate types
40
+ console.log('🏗️ Generating TypeScript types...')
41
+ const types = generateTypes(parsed, {
42
+ prefix: options.prefix,
43
+ includeJSDoc: true,
44
+ includeExamples: true
45
+ })
46
+
47
+ // Generate API client
48
+ console.log('🔧 Generating API client...')
49
+ const client = generateAPIClient(parsed, {
50
+ clientType: options.client,
51
+ includeAuth: true,
52
+ authType: options.auth,
53
+ includeInterceptors: true
54
+ })
55
+
56
+ // Generate React hooks
57
+ console.log('⚛️ Generating React hooks...')
58
+ const hooks = await generateHooks(parsed, {
59
+ includeInfiniteQueries: true,
60
+ includeOptimisticUpdates: true,
61
+ includeMutationHelpers: true,
62
+ enableConfidenceScoring: true
63
+ })
64
+
65
+ if (options.dryRun) {
66
+ console.log('\n📋 Dry run - files that would be generated:')
67
+ console.log('Types:')
68
+ console.log(' - schemas.ts')
69
+ console.log(' - endpoints.ts')
70
+ console.log(' - parameters.ts')
71
+ console.log(' - responses.ts')
72
+ console.log()
73
+ console.log('API Client:')
74
+ console.log(' - client.ts')
75
+ console.log(' - methods.ts')
76
+ console.log(' - types.ts')
77
+ console.log(' - config.ts')
78
+ console.log()
79
+ console.log('React Hooks:')
80
+ console.log(' - queries.ts')
81
+ console.log(' - mutations.ts')
82
+ console.log(' - keys.ts')
83
+ console.log(' - types.ts')
84
+ console.log()
85
+ console.log('Generated code preview:')
86
+ console.log('======================')
87
+ console.log()
88
+ console.log('Types (first 20 lines):')
89
+ console.log(types.schemas.split('\n').slice(0, 20).join('\n'))
90
+ console.log('\n...')
91
+ return
92
+ }
93
+
94
+ // Create output directories
95
+ console.log(`📁 Creating output directory: ${options.output}`)
96
+ await ensureDir(options.output)
97
+ await ensureDir(join(options.output, 'types'))
98
+ await ensureDir(join(options.output, 'client'))
99
+ await ensureDir(join(options.output, 'hooks'))
100
+
101
+ // Write type files
102
+ console.log('💾 Writing type definitions...')
103
+ await writeFile(join(options.output, 'types', 'schemas.ts'), types.schemas)
104
+ await writeFile(join(options.output, 'types', 'endpoints.ts'), types.endpoints)
105
+ await writeFile(join(options.output, 'types', 'parameters.ts'), types.parameters)
106
+ await writeFile(join(options.output, 'types', 'responses.ts'), types.responses)
107
+ await writeFile(join(options.output, 'types', 'index.ts'), types.index)
108
+
109
+ // Write client files
110
+ console.log('💾 Writing API client...')
111
+ await writeFile(join(options.output, 'client', 'client.ts'), client.client)
112
+ await writeFile(join(options.output, 'client', 'methods.ts'), client.methods)
113
+ await writeFile(join(options.output, 'client', 'types.ts'), client.types)
114
+ await writeFile(join(options.output, 'client', 'config.ts'), client.config)
115
+ await writeFile(join(options.output, 'client', 'index.ts'), client.index)
116
+
117
+ // Write hook files
118
+ console.log('💾 Writing React hooks...')
119
+ await writeFile(join(options.output, 'hooks', 'queries.ts'), hooks.queries)
120
+ await writeFile(join(options.output, 'hooks', 'mutations.ts'), hooks.mutations)
121
+ await writeFile(join(options.output, 'hooks', 'keys.ts'), hooks.keys)
122
+ await writeFile(join(options.output, 'hooks', 'types.ts'), hooks.types)
123
+ await writeFile(join(options.output, 'hooks', 'index.ts'), hooks.index)
124
+
125
+ // Write confidence report if available
126
+ if (hooks.report) {
127
+ await writeFile(join(options.output, 'hooks', 'confidence-report.md'), hooks.report)
128
+ console.log('📊 Generated confidence report')
129
+
130
+ // Check if there are low confidence names
131
+ const lowConfidenceCount = (hooks.report.match(/## Low Confidence Names/g) || []).length
132
+ if (lowConfidenceCount > 0) {
133
+ console.log('\n⚠️ Some hook names have low confidence and may need review.')
134
+ console.log('Run `npm run review:hooks` to interactively review and improve them.')
135
+ }
136
+ }
137
+
138
+ // Write main index file
139
+ const mainIndex = `/**
140
+ * Generated API Integration
141
+ *
142
+ * Auto-generated from OpenAPI specification: ${spec.info.title}
143
+ * Version: ${spec.info.version}
144
+ * Generated: ${new Date().toISOString()}
145
+ */
146
+
147
+ export * from './types'
148
+ export * from './client'
149
+ export * from './hooks'
150
+
151
+ // Quick start exports
152
+ export { createAPIClient } from './client'
153
+ export { queryKeys } from './hooks'`
154
+
155
+ await writeFile(join(options.output, 'index.ts'), mainIndex)
156
+
157
+ // Generate usage example
158
+ const usageExample = generateUsageExample(spec.info.title, options)
159
+ await writeFile(join(options.output, 'example.ts'), usageExample)
160
+
161
+ console.log()
162
+ console.log('✅ Generation complete!')
163
+ console.log(`📦 Generated files in: ${options.output}`)
164
+ console.log()
165
+ console.log('🚀 Quick start:')
166
+ console.log(`import { createAPIClient, useGetUsers } from './${options.output}'`)
167
+ console.log()
168
+ console.log('💡 See example.ts for detailed usage instructions')
169
+
170
+ } catch (error) {
171
+ console.error('❌ Generation failed:')
172
+ console.error(error instanceof Error ? error.message : error)
173
+ process.exit(1)
174
+ }
175
+ }
176
+
177
+ async function ensureDir(dir: string) {
178
+ try {
179
+ await fs.mkdir(dir, { recursive: true })
180
+ } catch {
181
+ // Directory might already exist
182
+ }
183
+ }
184
+
185
+ async function writeFile(path: string, content: string) {
186
+ await ensureDir(dirname(path))
187
+ await fs.writeFile(path, content, 'utf8')
188
+ }
189
+
190
+ function generateUsageExample(apiTitle: string, options: GenerateHooksOptions): string {
191
+ return `/**
192
+ * ${apiTitle} - Usage Example
193
+ *
194
+ * This file demonstrates how to use the generated API integration
195
+ */
196
+
197
+ import React from 'react'
198
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
199
+ import { createAPIClient, useGetUsers, useCreateUser } from './'
200
+
201
+ // 1. Set up the API client
202
+ const apiClient = createAPIClient({
203
+ baseUrl: 'https://api.example.com/v1',
204
+ ${options.auth === 'bearer' ? `getAuthToken: () => localStorage.getItem('authToken'),` : ''}
205
+ ${options.auth === 'apiKey' ? `getApiKey: () => process.env.REACT_APP_API_KEY,
206
+ apiKeyHeader: 'X-API-Key',` : ''}
207
+ onError: (error) => {
208
+ console.error('API Error:', error)
209
+ // Handle global errors (show toast, redirect to login, etc.)
210
+ }
211
+ })
212
+
213
+ // 2. Set up React Query
214
+ const queryClient = new QueryClient({
215
+ defaultOptions: {
216
+ queries: {
217
+ staleTime: 5 * 60 * 1000, // 5 minutes
218
+ cacheTime: 10 * 60 * 1000, // 10 minutes
219
+ },
220
+ },
221
+ })
222
+
223
+ // 3. Wrap your app with providers
224
+ function App() {
225
+ return (
226
+ <QueryClientProvider client={queryClient}>
227
+ <UserList />
228
+ </QueryClientProvider>
229
+ )
230
+ }
231
+
232
+ // 4. Use generated hooks in components
233
+ function UserList() {
234
+ // Query hook with automatic loading, error, and data states
235
+ const { data: users, isLoading, error } = useGetUsers({
236
+ limit: 10
237
+ })
238
+
239
+ // Mutation hook with optimistic updates
240
+ const createUserMutation = useCreateUser({
241
+ onSuccess: () => {
242
+ console.log('User created successfully!')
243
+ },
244
+ onError: (error) => {
245
+ console.error('Failed to create user:', error)
246
+ }
247
+ })
248
+
249
+ const handleCreateUser = () => {
250
+ createUserMutation.mutate({
251
+ email: 'new@example.com',
252
+ name: 'New User'
253
+ })
254
+ }
255
+
256
+ if (isLoading) return <div>Loading users...</div>
257
+ if (error) return <div>Error: {error.message}</div>
258
+
259
+ return (
260
+ <div>
261
+ <h2>Users</h2>
262
+ <button
263
+ onClick={handleCreateUser}
264
+ disabled={createUserMutation.isLoading}
265
+ >
266
+ {createUserMutation.isLoading ? 'Creating...' : 'Create User'}
267
+ </button>
268
+
269
+ <ul>
270
+ {users?.map(user => (
271
+ <li key={user.id}>
272
+ {user.name} ({user.email})
273
+ </li>
274
+ ))}
275
+ </ul>
276
+ </div>
277
+ )
278
+ }
279
+
280
+ // 5. Advanced usage with infinite queries
281
+ function InfiniteUserList() {
282
+ const {
283
+ data,
284
+ fetchNextPage,
285
+ hasNextPage,
286
+ isFetchingNextPage,
287
+ } = useInfiniteGetUsers({
288
+ limit: 20
289
+ })
290
+
291
+ return (
292
+ <div>
293
+ {data?.pages.map((page, i) => (
294
+ <React.Fragment key={i}>
295
+ {page.map(user => (
296
+ <div key={user.id}>{user.name}</div>
297
+ ))}
298
+ </React.Fragment>
299
+ ))}
300
+
301
+ <button
302
+ onClick={() => fetchNextPage()}
303
+ disabled={!hasNextPage || isFetchingNextPage}
304
+ >
305
+ {isFetchingNextPage
306
+ ? 'Loading more...'
307
+ : hasNextPage
308
+ ? 'Load More'
309
+ : 'Nothing more to load'}
310
+ </button>
311
+ </div>
312
+ )
313
+ }
314
+
315
+ export default App`
316
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Init Command
3
+ *
4
+ * Implementation of the `pattern-stack init` command
5
+ *
6
+ * Part of FRO-14: Domain Template Initialization
7
+ */
8
+
9
+ interface InitOptions {
10
+ name?: string
11
+ dir?: string
12
+ git?: boolean
13
+ install?: boolean
14
+ }
15
+
16
+ export async function initCommand(template: string = 'basic', options: InitOptions) {
17
+ console.log(`🚀 Initializing Pattern-Stack project with ${template} template`)
18
+
19
+ if (options.name) {
20
+ console.log(`📦 Project name: ${options.name}`)
21
+ }
22
+
23
+ if (options.dir) {
24
+ console.log(`📁 Target directory: ${options.dir}`)
25
+ }
26
+
27
+ console.log('\n⚠️ Template initialization not yet implemented')
28
+ console.log('This feature will be available in a future release.')
29
+ console.log('\nFor now, you can:')
30
+ console.log('1. Clone the Pattern-Stack repository')
31
+ console.log('2. Use the generate hooks command to create API integrations')
32
+ console.log('3. Use the scaffold command to create components')
33
+ }
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Scaffold Command
3
+ *
4
+ * Implementation of the `pattern-stack scaffold` command
5
+ *
6
+ * Part of FRO-15: Component Scaffolding Commands
7
+ */
8
+
9
+ import { promises as fs } from 'fs'
10
+ import { join, dirname } from 'path'
11
+
12
+ interface ScaffoldOptions {
13
+ template?: string
14
+ output?: string
15
+ }
16
+
17
+ export async function scaffoldCommand(type: string, name: string, options: ScaffoldOptions) {
18
+ console.log(`🏗️ Scaffolding ${type}: ${name}`)
19
+
20
+ switch (type) {
21
+ case 'component':
22
+ await scaffoldComponent(name, options)
23
+ break
24
+ case 'feature':
25
+ await scaffoldFeature(name, options)
26
+ break
27
+ case 'template':
28
+ await scaffoldTemplate(name, options)
29
+ break
30
+ default:
31
+ console.error(`❌ Unknown scaffold type: ${type}`)
32
+ console.log('Available types: component, feature, template')
33
+ process.exit(1)
34
+ }
35
+ }
36
+
37
+ async function scaffoldComponent(name: string, options: ScaffoldOptions) {
38
+ const outputDir = options.output || `./src/atoms/composed/${name}`
39
+
40
+ const componentContent = `/**
41
+ * ${name} Component
42
+ *
43
+ * Generated by Pattern-Stack CLI
44
+ */
45
+
46
+ import React from 'react'
47
+ import { cn } from '../../utils/utils'
48
+
49
+ export interface ${name}Props {
50
+ className?: string
51
+ children?: React.ReactNode
52
+ }
53
+
54
+ export function ${name}({ className, children, ...props }: ${name}Props) {
55
+ return (
56
+ <div className={cn("", className)} {...props}>
57
+ {children}
58
+ </div>
59
+ )
60
+ }
61
+
62
+ ${name}.displayName = "${name}"`
63
+
64
+ const indexContent = `export { ${name} } from './${name}'
65
+ export type { ${name}Props } from './${name}'`
66
+
67
+ const testContent = `/**
68
+ * ${name} Component Tests
69
+ */
70
+
71
+ import { render, screen } from '@testing-library/react'
72
+ import { ${name} } from './${name}'
73
+
74
+ describe('${name}', () => {
75
+ it('renders children', () => {
76
+ render(<${name}>Test content</${name}>)
77
+ expect(screen.getByText('Test content')).toBeInTheDocument()
78
+ })
79
+
80
+ it('applies custom className', () => {
81
+ const { container } = render(<${name} className="custom-class" />)
82
+ expect(container.firstChild).toHaveClass('custom-class')
83
+ })
84
+ })`
85
+
86
+ await ensureDir(outputDir)
87
+ await writeFile(join(outputDir, `${name}.tsx`), componentContent)
88
+ await writeFile(join(outputDir, 'index.ts'), indexContent)
89
+ await writeFile(join(outputDir, `${name}.test.tsx`), testContent)
90
+
91
+ console.log(`✅ Component scaffolded: ${outputDir}`)
92
+ }
93
+
94
+ async function scaffoldFeature(name: string, options: ScaffoldOptions) {
95
+ const outputDir = options.output || `./src/features/${name.toLowerCase()}`
96
+
97
+ // Feature hook
98
+ const hookContent = `/**
99
+ * ${name} Hooks
100
+ *
101
+ * Generated by Pattern-Stack CLI
102
+ */
103
+
104
+ import { useState, useEffect } from 'react'
105
+
106
+ export function use${name}() {
107
+ const [data, setData] = useState(null)
108
+ const [loading, setLoading] = useState(false)
109
+ const [error, setError] = useState<Error | null>(null)
110
+
111
+ // Add your logic here
112
+
113
+ return {
114
+ data,
115
+ loading,
116
+ error,
117
+ refetch: () => {
118
+ // Implement refetch logic
119
+ }
120
+ }
121
+ }`
122
+
123
+ // Feature component
124
+ const componentContent = `/**
125
+ * ${name} Component
126
+ *
127
+ * Generated by Pattern-Stack CLI
128
+ */
129
+
130
+ import React from 'react'
131
+ import { use${name} } from '../hooks/use${name}'
132
+
133
+ export interface ${name}ComponentProps {
134
+ className?: string
135
+ }
136
+
137
+ export function ${name}Component({ className }: ${name}ComponentProps) {
138
+ const { data, loading, error } = use${name}()
139
+
140
+ if (loading) return <div>Loading...</div>
141
+ if (error) return <div>Error: {error.message}</div>
142
+
143
+ return (
144
+ <div className={className}>
145
+ <h2>${name}</h2>
146
+ {/* Add your UI here */}
147
+ </div>
148
+ )
149
+ }`
150
+
151
+ // Feature index
152
+ const indexContent = `export { use${name} } from './hooks/use${name}'
153
+ export { ${name}Component } from './components/${name}Component'
154
+ export type { ${name}ComponentProps } from './components/${name}Component'`
155
+
156
+ await ensureDir(join(outputDir, 'hooks'))
157
+ await ensureDir(join(outputDir, 'components'))
158
+ await writeFile(join(outputDir, 'hooks', `use${name}.ts`), hookContent)
159
+ await writeFile(join(outputDir, 'hooks', 'index.ts'), `export { use${name} } from './use${name}'`)
160
+ await writeFile(join(outputDir, 'components', `${name}Component.tsx`), componentContent)
161
+ await writeFile(join(outputDir, 'components', 'index.ts'), `export { ${name}Component } from './${name}Component'`)
162
+ await writeFile(join(outputDir, 'index.ts'), indexContent)
163
+
164
+ console.log(`✅ Feature scaffolded: ${outputDir}`)
165
+ }
166
+
167
+ async function scaffoldTemplate(name: string, options: ScaffoldOptions) {
168
+ const outputDir = options.output || `./src/templates/${name.toLowerCase()}`
169
+
170
+ const templateContent = `/**
171
+ * ${name} Template
172
+ *
173
+ * Generated by Pattern-Stack CLI
174
+ */
175
+
176
+ import React from 'react'
177
+ import { PageTemplate } from '../PageTemplate'
178
+
179
+ export interface ${name}TemplateProps {
180
+ title?: string
181
+ children?: React.ReactNode
182
+ }
183
+
184
+ export function ${name}Template({
185
+ title = "${name}",
186
+ children
187
+ }: ${name}TemplateProps) {
188
+ return (
189
+ <PageTemplate>
190
+ <div className="space-y-6">
191
+ <header>
192
+ <h1 className="text-3xl font-bold">{title}</h1>
193
+ </header>
194
+
195
+ <main>
196
+ {children}
197
+ </main>
198
+ </div>
199
+ </PageTemplate>
200
+ )
201
+ }`
202
+
203
+ const indexContent = `export { ${name}Template } from './${name}Template'
204
+ export type { ${name}TemplateProps } from './${name}Template'`
205
+
206
+ await ensureDir(outputDir)
207
+ await writeFile(join(outputDir, `${name}Template.tsx`), templateContent)
208
+ await writeFile(join(outputDir, 'index.ts'), indexContent)
209
+
210
+ console.log(`✅ Template scaffolded: ${outputDir}`)
211
+ }
212
+
213
+ async function ensureDir(dir: string) {
214
+ try {
215
+ await fs.mkdir(dir, { recursive: true })
216
+ } catch {
217
+ // Directory might already exist
218
+ }
219
+ }
220
+
221
+ async function writeFile(path: string, content: string) {
222
+ await ensureDir(dirname(path))
223
+ await fs.writeFile(path, content, 'utf8')
224
+ }