@pattern-stack/frontend-patterns 0.0.3 → 0.0.5

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 (406) hide show
  1. package/dist/frontend-patterns.css +1 -1
  2. package/dist/index.es.js +1918 -3
  3. package/dist/index.es.js.map +1 -1
  4. package/dist/index.js +1917 -1
  5. package/dist/index.js.map +1 -1
  6. package/package.json +10 -5
  7. package/src/App.css +42 -0
  8. package/src/App.tsx +64 -0
  9. package/src/__tests__/README.md +221 -0
  10. package/src/__tests__/atoms/hooks/simple-hooks.test.ts +44 -0
  11. package/src/__tests__/atoms/ui/button.test.tsx +68 -0
  12. package/src/__tests__/atoms/utils/simple.test.ts +18 -0
  13. package/src/__tests__/atoms/utils/utils.test.ts +77 -0
  14. package/src/__tests__/features/auth/simple-auth.test.tsx +40 -0
  15. package/src/__tests__/molecules/layout/simple-layout.test.tsx +81 -0
  16. package/src/__tests__/organisms/showcase/simple-showcase.test.tsx +167 -0
  17. package/src/__tests__/setup.ts +51 -0
  18. package/src/__tests__/utils.tsx +123 -0
  19. package/src/atoms/composed/Accordion/Accordion.tsx +271 -0
  20. package/{dist/atoms/composed/Accordion/index.d.ts → src/atoms/composed/Accordion/index.ts} +1 -2
  21. package/src/atoms/composed/Alert/Alert.tsx +132 -0
  22. package/src/atoms/composed/Alert/index.ts +1 -0
  23. package/src/atoms/composed/Breadcrumb/Breadcrumb.tsx +83 -0
  24. package/src/atoms/composed/Breadcrumb/index.ts +1 -0
  25. package/src/atoms/composed/Chart/Chart.tsx +425 -0
  26. package/{dist/atoms/composed/Chart/index.d.ts → src/atoms/composed/Chart/index.ts} +1 -2
  27. package/src/atoms/composed/ColorSwatch/ColorSwatch.tsx +72 -0
  28. package/{dist/atoms/composed/ColorSwatch/index.d.ts → src/atoms/composed/ColorSwatch/index.ts} +1 -2
  29. package/src/atoms/composed/DarkModeToggle.tsx +66 -0
  30. package/src/atoms/composed/DataBadge/DataBadge.tsx +81 -0
  31. package/src/atoms/composed/DataBadge/index.ts +1 -0
  32. package/src/atoms/composed/DataTable/DataTable.tsx +394 -0
  33. package/src/atoms/composed/DataTable/TableCellWithTooltip.tsx +41 -0
  34. package/src/atoms/composed/DataTable/index.ts +2 -0
  35. package/src/atoms/composed/DateTimePicker/DateTimePicker.tsx +611 -0
  36. package/src/atoms/composed/DateTimePicker/index.ts +2 -0
  37. package/src/atoms/composed/DetailedCard/DetailedCard.tsx +181 -0
  38. package/src/atoms/composed/DetailedCard/index.ts +2 -0
  39. package/src/atoms/composed/EmptyState/EmptyState.tsx +90 -0
  40. package/src/atoms/composed/EmptyState/index.ts +1 -0
  41. package/src/atoms/composed/FileUpload/FileUpload.tsx +477 -0
  42. package/{dist/atoms/composed/FileUpload/index.d.ts → src/atoms/composed/FileUpload/index.ts} +1 -2
  43. package/src/atoms/composed/FormField/FormField.tsx +92 -0
  44. package/src/atoms/composed/FormField/index.ts +1 -0
  45. package/src/atoms/composed/GlobalSearch/GlobalSearch.tsx +37 -0
  46. package/src/atoms/composed/GlobalSearch/index.ts +1 -0
  47. package/src/atoms/composed/IconBadge/IconBadge.tsx +95 -0
  48. package/src/atoms/composed/IconBadge/index.ts +2 -0
  49. package/src/atoms/composed/Modal/Modal.tsx +223 -0
  50. package/src/atoms/composed/Modal/index.ts +2 -0
  51. package/src/atoms/composed/PaletteSwitcher.tsx +386 -0
  52. package/src/atoms/composed/ProgressBar/ProgressBar.tsx +116 -0
  53. package/{dist/atoms/composed/ProgressBar/index.d.ts → src/atoms/composed/ProgressBar/index.ts} +1 -2
  54. package/src/atoms/composed/SalesPanel/SalesPanel.tsx +116 -0
  55. package/src/atoms/composed/SalesPanel/index.ts +1 -0
  56. package/src/atoms/composed/SalesPanel/mockSalesData.ts +151 -0
  57. package/src/atoms/composed/StatCard/StatCard.tsx +219 -0
  58. package/src/atoms/composed/StatCard/index.ts +1 -0
  59. package/src/atoms/composed/StyleGuide.tsx +717 -0
  60. package/src/atoms/composed/Toast/Toast.tsx +219 -0
  61. package/{dist/atoms/composed/Toast/index.d.ts → src/atoms/composed/Toast/index.ts} +1 -2
  62. package/src/atoms/composed/Tooltip/Tooltip.tsx +213 -0
  63. package/src/atoms/composed/Tooltip/index.ts +1 -0
  64. package/src/atoms/composed/UserAvatar/UserAvatar.tsx +139 -0
  65. package/src/atoms/composed/UserAvatar/index.ts +1 -0
  66. package/src/atoms/composed/UserMenu/UserMenu.tsx +16 -0
  67. package/src/atoms/composed/UserMenu/index.ts +1 -0
  68. package/{dist/atoms/composed/index.d.ts → src/atoms/composed/index.ts} +7 -2
  69. package/src/atoms/hooks/useApi.ts +80 -0
  70. package/src/atoms/hooks/useHealth.ts +17 -0
  71. package/{dist/atoms/index.d.ts → src/atoms/index.ts} +6 -2
  72. package/src/atoms/services/api/client.ts +134 -0
  73. package/src/atoms/services/auth-service.ts +248 -0
  74. package/src/atoms/services/health.ts +15 -0
  75. package/{dist/atoms/services/index.d.ts → src/atoms/services/index.ts} +1 -2
  76. package/src/atoms/shared/config/constants.ts +17 -0
  77. package/src/atoms/shared/config/dashboard-sizes.ts +111 -0
  78. package/src/atoms/shared/config/environment.ts +10 -0
  79. package/src/atoms/shared/index.ts +4 -0
  80. package/src/atoms/shared/styles/color-palettes.css +566 -0
  81. package/src/atoms/types/auth.ts +62 -0
  82. package/src/atoms/types/entity-config.ts +127 -0
  83. package/{dist/atoms/types/generated.d.ts → src/atoms/types/generated.ts} +1 -1
  84. package/{dist/atoms/types/index.d.ts → src/atoms/types/index.ts} +2 -1
  85. package/{dist/atoms/types/loading.d.ts → src/atoms/types/loading.ts} +10 -8
  86. package/src/atoms/ui/Badge.tsx +30 -0
  87. package/src/atoms/ui/ErrorBoundary.tsx +59 -0
  88. package/src/atoms/ui/Select.tsx +53 -0
  89. package/src/atoms/ui/Switch.tsx +42 -0
  90. package/src/atoms/ui/Tabs.tsx +118 -0
  91. package/src/atoms/ui/avatar.tsx +48 -0
  92. package/src/atoms/ui/button.tsx +70 -0
  93. package/src/atoms/ui/card.tsx +76 -0
  94. package/src/atoms/ui/dropdown-menu.tsx +199 -0
  95. package/{dist/atoms/ui/index.d.ts → src/atoms/ui/index.ts} +27 -3
  96. package/src/atoms/ui/input.tsx +23 -0
  97. package/src/atoms/ui/label.tsx +23 -0
  98. package/src/atoms/ui/skeleton.tsx +13 -0
  99. package/src/atoms/ui/spinner.tsx +49 -0
  100. package/src/atoms/ui/table.tsx +116 -0
  101. package/src/atoms/utils/animations.ts +135 -0
  102. package/src/atoms/utils/metric-engine.ts +236 -0
  103. package/src/atoms/utils/tooltip-helpers.ts +140 -0
  104. package/src/atoms/utils/utils.ts +10 -0
  105. package/src/features/auth/components/LoginForm.tsx +168 -0
  106. package/src/features/auth/components/LogoutButton.tsx +19 -0
  107. package/src/features/auth/components/ProtectedRoute.tsx +60 -0
  108. package/{dist/features/auth/components/index.d.ts → src/features/auth/components/index.ts} +1 -1
  109. package/src/features/auth/hooks/index.ts +2 -0
  110. package/src/features/auth/hooks/useAuth.tsx +205 -0
  111. package/src/features/auth/hooks/usePermissions.ts +35 -0
  112. package/src/features/auth/index.ts +2 -0
  113. package/src/features/index.ts +2 -0
  114. package/src/index.css +704 -0
  115. package/{dist/index.d.ts → src/index.ts} +5 -2
  116. package/src/main.tsx +48 -0
  117. package/src/molecules/.gitkeep +0 -0
  118. package/src/molecules/forms/FormGroup.tsx +75 -0
  119. package/src/molecules/forms/SearchInput.tsx +259 -0
  120. package/src/molecules/forms/index.ts +4 -0
  121. package/src/molecules/index.ts +4 -0
  122. package/src/molecules/layout/AppHeader/AppHeader.tsx +42 -0
  123. package/src/molecules/layout/AppHeader/index.ts +1 -0
  124. package/src/molecules/layout/AppLayout.tsx +29 -0
  125. package/src/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.tsx +42 -0
  126. package/src/molecules/layout/DashboardWithSidePanel/index.ts +1 -0
  127. package/src/molecules/layout/PageTemplate.tsx +87 -0
  128. package/src/molecules/layout/SectionHeader/SectionHeader.tsx +87 -0
  129. package/{dist/molecules/layout/SectionHeader/index.d.ts → src/molecules/layout/SectionHeader/index.ts} +1 -2
  130. package/src/molecules/layout/ShowcaseSection.tsx +57 -0
  131. package/src/molecules/layout/Sidebar.tsx +152 -0
  132. package/src/molecules/layout/SidebarButton/SidebarButton.tsx +99 -0
  133. package/src/molecules/layout/SidebarButton/index.ts +1 -0
  134. package/src/molecules/layout/SidebarContext.tsx +31 -0
  135. package/{dist/molecules/layout/index.d.ts → src/molecules/layout/index.ts} +2 -2
  136. package/src/molecules/navigation/NavMenu.tsx +188 -0
  137. package/src/molecules/navigation/Pagination.tsx +172 -0
  138. package/src/molecules/navigation/index.ts +4 -0
  139. package/src/organisms/entity/CategoryBreakdownPanel.tsx +427 -0
  140. package/src/organisms/entity/EntityListPanel.tsx +339 -0
  141. package/src/organisms/entity/MetricsOverviewPanel.tsx +236 -0
  142. package/src/organisms/entity/TrendAnalysisPanel.tsx +337 -0
  143. package/src/organisms/entity/index.ts +4 -0
  144. package/src/organisms/index.ts +8 -0
  145. package/src/organisms/showcase/ComponentShowcasePage.tsx +2496 -0
  146. package/src/organisms/showcase/index.ts +1 -0
  147. package/src/pages/AdminShowcase/AdminCRUDShowcase.tsx +242 -0
  148. package/src/pages/AdminShowcase/AdminDashboardShowcase.tsx +173 -0
  149. package/src/pages/AdminShowcase/AdminDetailShowcase.tsx +385 -0
  150. package/src/pages/AdminShowcase/SalesPerformanceDashboard.tsx +158 -0
  151. package/src/pages/AdminShowcase/index.tsx +4 -0
  152. package/src/pages/ComponentShowcase/BadgesShowcase.tsx +188 -0
  153. package/src/pages/ComponentShowcase/CardsShowcase.tsx +392 -0
  154. package/src/pages/ComponentShowcase/PalettesShowcase.tsx +207 -0
  155. package/src/pages/ComponentShowcase/StatesShowcase.tsx +485 -0
  156. package/src/pages/ComponentShowcase/TablesShowcase.tsx +134 -0
  157. package/src/pages/ComponentShowcase/TypographyShowcase.tsx +255 -0
  158. package/src/pages/ComponentShowcase/index.tsx +188 -0
  159. package/src/pages/EntityShowcase/EntityManagementShowcase.tsx +137 -0
  160. package/src/pages/EntityShowcase/EntityPerformanceShowcase.tsx +117 -0
  161. package/src/pages/EntityShowcase/index.ts +2 -0
  162. package/src/pages/EntityTemplateExample.tsx +229 -0
  163. package/src/pages/TestEntityTemplate.tsx +40 -0
  164. package/src/pages/index.ts +3 -0
  165. package/src/templates/AuthTemplate.tsx +216 -0
  166. package/src/templates/ComponentShowcaseTemplate.tsx +173 -0
  167. package/src/templates/DashboardTemplate.tsx +232 -0
  168. package/src/templates/DataTemplate.tsx +319 -0
  169. package/src/templates/admin/AdminCRUDTemplate.tsx +630 -0
  170. package/src/templates/admin/AdminDashboardTemplate.tsx +351 -0
  171. package/src/templates/admin/AdminDetailTemplate.tsx +563 -0
  172. package/src/templates/admin/index.ts +29 -0
  173. package/src/templates/entity/EntityManagementTemplate.tsx +430 -0
  174. package/src/templates/entity/EntityPerformanceDashboardTemplate.tsx +277 -0
  175. package/src/templates/entity/configs/financial-config.ts +141 -0
  176. package/src/templates/entity/configs/index.ts +1 -0
  177. package/src/templates/entity/index.ts +3 -0
  178. package/src/templates/factory.tsx +169 -0
  179. package/src/templates/financial/FinancialDashboardTemplate.tsx +326 -0
  180. package/src/templates/index.ts +40 -0
  181. package/src/vite-env.d.ts +1 -0
  182. package/dist/atoms/composed/Accordion/Accordion.d.ts +0 -20
  183. package/dist/atoms/composed/Accordion/Accordion.d.ts.map +0 -1
  184. package/dist/atoms/composed/Accordion/index.d.ts.map +0 -1
  185. package/dist/atoms/composed/Alert/Alert.d.ts +0 -25
  186. package/dist/atoms/composed/Alert/Alert.d.ts.map +0 -1
  187. package/dist/atoms/composed/Alert/index.d.ts +0 -2
  188. package/dist/atoms/composed/Alert/index.d.ts.map +0 -1
  189. package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts +0 -17
  190. package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts.map +0 -1
  191. package/dist/atoms/composed/Breadcrumb/index.d.ts +0 -2
  192. package/dist/atoms/composed/Breadcrumb/index.d.ts.map +0 -1
  193. package/dist/atoms/composed/Chart/Chart.d.ts +0 -37
  194. package/dist/atoms/composed/Chart/Chart.d.ts.map +0 -1
  195. package/dist/atoms/composed/Chart/index.d.ts.map +0 -1
  196. package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts +0 -19
  197. package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts.map +0 -1
  198. package/dist/atoms/composed/ColorSwatch/index.d.ts.map +0 -1
  199. package/dist/atoms/composed/DarkModeToggle.d.ts +0 -4
  200. package/dist/atoms/composed/DarkModeToggle.d.ts.map +0 -1
  201. package/dist/atoms/composed/DataBadge/DataBadge.d.ts +0 -13
  202. package/dist/atoms/composed/DataBadge/DataBadge.d.ts.map +0 -1
  203. package/dist/atoms/composed/DataBadge/index.d.ts +0 -2
  204. package/dist/atoms/composed/DataBadge/index.d.ts.map +0 -1
  205. package/dist/atoms/composed/DataTable/DataTable.d.ts +0 -28
  206. package/dist/atoms/composed/DataTable/DataTable.d.ts.map +0 -1
  207. package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts +0 -10
  208. package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts.map +0 -1
  209. package/dist/atoms/composed/DataTable/index.d.ts +0 -3
  210. package/dist/atoms/composed/DataTable/index.d.ts.map +0 -1
  211. package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts +0 -45
  212. package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts.map +0 -1
  213. package/dist/atoms/composed/DateTimePicker/index.d.ts +0 -3
  214. package/dist/atoms/composed/DateTimePicker/index.d.ts.map +0 -1
  215. package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts +0 -30
  216. package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts.map +0 -1
  217. package/dist/atoms/composed/DetailedCard/index.d.ts +0 -3
  218. package/dist/atoms/composed/DetailedCard/index.d.ts.map +0 -1
  219. package/dist/atoms/composed/EmptyState/EmptyState.d.ts +0 -18
  220. package/dist/atoms/composed/EmptyState/EmptyState.d.ts.map +0 -1
  221. package/dist/atoms/composed/EmptyState/index.d.ts +0 -2
  222. package/dist/atoms/composed/EmptyState/index.d.ts.map +0 -1
  223. package/dist/atoms/composed/FileUpload/FileUpload.d.ts +0 -46
  224. package/dist/atoms/composed/FileUpload/FileUpload.d.ts.map +0 -1
  225. package/dist/atoms/composed/FileUpload/index.d.ts.map +0 -1
  226. package/dist/atoms/composed/FormField/FormField.d.ts +0 -23
  227. package/dist/atoms/composed/FormField/FormField.d.ts.map +0 -1
  228. package/dist/atoms/composed/FormField/index.d.ts +0 -2
  229. package/dist/atoms/composed/FormField/index.d.ts.map +0 -1
  230. package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts +0 -8
  231. package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts.map +0 -1
  232. package/dist/atoms/composed/GlobalSearch/index.d.ts +0 -2
  233. package/dist/atoms/composed/GlobalSearch/index.d.ts.map +0 -1
  234. package/dist/atoms/composed/IconBadge/IconBadge.d.ts +0 -16
  235. package/dist/atoms/composed/IconBadge/IconBadge.d.ts.map +0 -1
  236. package/dist/atoms/composed/IconBadge/index.d.ts +0 -3
  237. package/dist/atoms/composed/IconBadge/index.d.ts.map +0 -1
  238. package/dist/atoms/composed/Modal/Modal.d.ts +0 -18
  239. package/dist/atoms/composed/Modal/Modal.d.ts.map +0 -1
  240. package/dist/atoms/composed/Modal/index.d.ts +0 -3
  241. package/dist/atoms/composed/Modal/index.d.ts.map +0 -1
  242. package/dist/atoms/composed/PaletteSwitcher.d.ts +0 -7
  243. package/dist/atoms/composed/PaletteSwitcher.d.ts.map +0 -1
  244. package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts +0 -25
  245. package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts.map +0 -1
  246. package/dist/atoms/composed/ProgressBar/index.d.ts.map +0 -1
  247. package/dist/atoms/composed/StatCard/StatCard.d.ts +0 -21
  248. package/dist/atoms/composed/StatCard/StatCard.d.ts.map +0 -1
  249. package/dist/atoms/composed/StatCard/index.d.ts +0 -2
  250. package/dist/atoms/composed/StatCard/index.d.ts.map +0 -1
  251. package/dist/atoms/composed/StyleGuide.d.ts +0 -3
  252. package/dist/atoms/composed/StyleGuide.d.ts.map +0 -1
  253. package/dist/atoms/composed/Toast/Toast.d.ts +0 -40
  254. package/dist/atoms/composed/Toast/Toast.d.ts.map +0 -1
  255. package/dist/atoms/composed/Toast/index.d.ts.map +0 -1
  256. package/dist/atoms/composed/Tooltip/Tooltip.d.ts +0 -16
  257. package/dist/atoms/composed/Tooltip/Tooltip.d.ts.map +0 -1
  258. package/dist/atoms/composed/Tooltip/index.d.ts +0 -2
  259. package/dist/atoms/composed/Tooltip/index.d.ts.map +0 -1
  260. package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts +0 -8
  261. package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts.map +0 -1
  262. package/dist/atoms/composed/UserAvatar/index.d.ts +0 -2
  263. package/dist/atoms/composed/UserAvatar/index.d.ts.map +0 -1
  264. package/dist/atoms/composed/UserMenu/UserMenu.d.ts +0 -8
  265. package/dist/atoms/composed/UserMenu/UserMenu.d.ts.map +0 -1
  266. package/dist/atoms/composed/UserMenu/index.d.ts +0 -2
  267. package/dist/atoms/composed/UserMenu/index.d.ts.map +0 -1
  268. package/dist/atoms/composed/index.d.ts.map +0 -1
  269. package/dist/atoms/hooks/useApi.d.ts +0 -25
  270. package/dist/atoms/hooks/useApi.d.ts.map +0 -1
  271. package/dist/atoms/hooks/useHealth.d.ts +0 -19
  272. package/dist/atoms/hooks/useHealth.d.ts.map +0 -1
  273. package/dist/atoms/index.d.ts.map +0 -1
  274. package/dist/atoms/services/api/client.d.ts +0 -20
  275. package/dist/atoms/services/api/client.d.ts.map +0 -1
  276. package/dist/atoms/services/auth-service.d.ts +0 -24
  277. package/dist/atoms/services/auth-service.d.ts.map +0 -1
  278. package/dist/atoms/services/health.d.ts +0 -7
  279. package/dist/atoms/services/health.d.ts.map +0 -1
  280. package/dist/atoms/services/index.d.ts.map +0 -1
  281. package/dist/atoms/shared/config/constants.d.ts +0 -15
  282. package/dist/atoms/shared/config/constants.d.ts.map +0 -1
  283. package/dist/atoms/shared/config/dashboard-sizes.d.ts +0 -83
  284. package/dist/atoms/shared/config/dashboard-sizes.d.ts.map +0 -1
  285. package/dist/atoms/shared/config/environment.d.ts +0 -10
  286. package/dist/atoms/shared/config/environment.d.ts.map +0 -1
  287. package/dist/atoms/shared/index.d.ts +0 -4
  288. package/dist/atoms/shared/index.d.ts.map +0 -1
  289. package/dist/atoms/types/auth.d.ts +0 -56
  290. package/dist/atoms/types/auth.d.ts.map +0 -1
  291. package/dist/atoms/types/generated.d.ts.map +0 -1
  292. package/dist/atoms/types/index.d.ts.map +0 -1
  293. package/dist/atoms/types/loading.d.ts.map +0 -1
  294. package/dist/atoms/ui/Badge.d.ts +0 -10
  295. package/dist/atoms/ui/Badge.d.ts.map +0 -1
  296. package/dist/atoms/ui/ErrorBoundary.d.ts +0 -18
  297. package/dist/atoms/ui/ErrorBoundary.d.ts.map +0 -1
  298. package/dist/atoms/ui/Select.d.ts +0 -28
  299. package/dist/atoms/ui/Select.d.ts.map +0 -1
  300. package/dist/atoms/ui/Switch.d.ts +0 -9
  301. package/dist/atoms/ui/Switch.d.ts.map +0 -1
  302. package/dist/atoms/ui/Tabs.d.ts +0 -30
  303. package/dist/atoms/ui/Tabs.d.ts.map +0 -1
  304. package/dist/atoms/ui/avatar.d.ts +0 -7
  305. package/dist/atoms/ui/avatar.d.ts.map +0 -1
  306. package/dist/atoms/ui/button.d.ts +0 -14
  307. package/dist/atoms/ui/button.d.ts.map +0 -1
  308. package/dist/atoms/ui/card.d.ts +0 -12
  309. package/dist/atoms/ui/card.d.ts.map +0 -1
  310. package/dist/atoms/ui/dropdown-menu.d.ts +0 -28
  311. package/dist/atoms/ui/dropdown-menu.d.ts.map +0 -1
  312. package/dist/atoms/ui/index.d.ts.map +0 -1
  313. package/dist/atoms/ui/input.d.ts +0 -5
  314. package/dist/atoms/ui/input.d.ts.map +0 -1
  315. package/dist/atoms/ui/label.d.ts +0 -6
  316. package/dist/atoms/ui/label.d.ts.map +0 -1
  317. package/dist/atoms/ui/skeleton.d.ts +0 -3
  318. package/dist/atoms/ui/skeleton.d.ts.map +0 -1
  319. package/dist/atoms/ui/spinner.d.ts +0 -14
  320. package/dist/atoms/ui/spinner.d.ts.map +0 -1
  321. package/dist/atoms/ui/table.d.ts +0 -11
  322. package/dist/atoms/ui/table.d.ts.map +0 -1
  323. package/dist/atoms/utils/animations.d.ts +0 -65
  324. package/dist/atoms/utils/animations.d.ts.map +0 -1
  325. package/dist/atoms/utils/tooltip-helpers.d.ts +0 -71
  326. package/dist/atoms/utils/tooltip-helpers.d.ts.map +0 -1
  327. package/dist/atoms/utils/utils.d.ts +0 -4
  328. package/dist/atoms/utils/utils.d.ts.map +0 -1
  329. package/dist/features/auth/components/LoginForm.d.ts +0 -2
  330. package/dist/features/auth/components/LoginForm.d.ts.map +0 -1
  331. package/dist/features/auth/components/LogoutButton.d.ts +0 -2
  332. package/dist/features/auth/components/LogoutButton.d.ts.map +0 -1
  333. package/dist/features/auth/components/ProtectedRoute.d.ts +0 -10
  334. package/dist/features/auth/components/ProtectedRoute.d.ts.map +0 -1
  335. package/dist/features/auth/components/index.d.ts.map +0 -1
  336. package/dist/features/auth/hooks/index.d.ts +0 -3
  337. package/dist/features/auth/hooks/index.d.ts.map +0 -1
  338. package/dist/features/auth/hooks/useAuth.d.ts +0 -10
  339. package/dist/features/auth/hooks/useAuth.d.ts.map +0 -1
  340. package/dist/features/auth/hooks/usePermissions.d.ts +0 -13
  341. package/dist/features/auth/hooks/usePermissions.d.ts.map +0 -1
  342. package/dist/features/auth/index.d.ts +0 -3
  343. package/dist/features/auth/index.d.ts.map +0 -1
  344. package/dist/features/index.d.ts +0 -2
  345. package/dist/features/index.d.ts.map +0 -1
  346. package/dist/index.d.ts.map +0 -1
  347. package/dist/molecules/forms/FormGroup.d.ts +0 -17
  348. package/dist/molecules/forms/FormGroup.d.ts.map +0 -1
  349. package/dist/molecules/forms/SearchInput.d.ts +0 -36
  350. package/dist/molecules/forms/SearchInput.d.ts.map +0 -1
  351. package/dist/molecules/forms/index.d.ts +0 -3
  352. package/dist/molecules/forms/index.d.ts.map +0 -1
  353. package/dist/molecules/index.d.ts +0 -4
  354. package/dist/molecules/index.d.ts.map +0 -1
  355. package/dist/molecules/layout/AppHeader/AppHeader.d.ts +0 -7
  356. package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +0 -1
  357. package/dist/molecules/layout/AppHeader/index.d.ts +0 -2
  358. package/dist/molecules/layout/AppHeader/index.d.ts.map +0 -1
  359. package/dist/molecules/layout/AppLayout.d.ts +0 -2
  360. package/dist/molecules/layout/AppLayout.d.ts.map +0 -1
  361. package/dist/molecules/layout/PageTemplate.d.ts +0 -19
  362. package/dist/molecules/layout/PageTemplate.d.ts.map +0 -1
  363. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts +0 -24
  364. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts.map +0 -1
  365. package/dist/molecules/layout/SectionHeader/index.d.ts.map +0 -1
  366. package/dist/molecules/layout/ShowcaseSection.d.ts +0 -22
  367. package/dist/molecules/layout/ShowcaseSection.d.ts.map +0 -1
  368. package/dist/molecules/layout/Sidebar.d.ts +0 -6
  369. package/dist/molecules/layout/Sidebar.d.ts.map +0 -1
  370. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +0 -13
  371. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +0 -1
  372. package/dist/molecules/layout/SidebarButton/index.d.ts +0 -2
  373. package/dist/molecules/layout/SidebarButton/index.d.ts.map +0 -1
  374. package/dist/molecules/layout/SidebarContext.d.ts +0 -12
  375. package/dist/molecules/layout/SidebarContext.d.ts.map +0 -1
  376. package/dist/molecules/layout/index.d.ts.map +0 -1
  377. package/dist/molecules/navigation/NavMenu.d.ts +0 -20
  378. package/dist/molecules/navigation/NavMenu.d.ts.map +0 -1
  379. package/dist/molecules/navigation/Pagination.d.ts +0 -14
  380. package/dist/molecules/navigation/Pagination.d.ts.map +0 -1
  381. package/dist/molecules/navigation/index.d.ts +0 -3
  382. package/dist/molecules/navigation/index.d.ts.map +0 -1
  383. package/dist/organisms/index.d.ts +0 -2
  384. package/dist/organisms/index.d.ts.map +0 -1
  385. package/dist/organisms/showcase/ComponentShowcasePage.d.ts +0 -3
  386. package/dist/organisms/showcase/ComponentShowcasePage.d.ts.map +0 -1
  387. package/dist/templates/AuthTemplate.d.ts +0 -68
  388. package/dist/templates/AuthTemplate.d.ts.map +0 -1
  389. package/dist/templates/ComponentShowcaseTemplate.d.ts +0 -53
  390. package/dist/templates/ComponentShowcaseTemplate.d.ts.map +0 -1
  391. package/dist/templates/DashboardTemplate.d.ts +0 -62
  392. package/dist/templates/DashboardTemplate.d.ts.map +0 -1
  393. package/dist/templates/DataTemplate.d.ts +0 -78
  394. package/dist/templates/DataTemplate.d.ts.map +0 -1
  395. package/dist/templates/admin/AdminCRUDTemplate.d.ts +0 -105
  396. package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +0 -1
  397. package/dist/templates/admin/AdminDashboardTemplate.d.ts +0 -89
  398. package/dist/templates/admin/AdminDashboardTemplate.d.ts.map +0 -1
  399. package/dist/templates/admin/AdminDetailTemplate.d.ts +0 -132
  400. package/dist/templates/admin/AdminDetailTemplate.d.ts.map +0 -1
  401. package/dist/templates/admin/index.d.ts +0 -4
  402. package/dist/templates/admin/index.d.ts.map +0 -1
  403. package/dist/templates/factory.d.ts +0 -28
  404. package/dist/templates/factory.d.ts.map +0 -1
  405. package/dist/templates/index.d.ts +0 -7
  406. package/dist/templates/index.d.ts.map +0 -1
@@ -0,0 +1,117 @@
1
+ import React, { useState } from 'react';
2
+ import {
3
+ MetricsOverviewWithInsightsPanel,
4
+ TrendAnalysisPanel,
5
+ CategoryBreakdownPanel
6
+ } from '../../organisms/entity';
7
+ import { financialConfig, sampleFinancialData } from '../../templates/entity/configs/financial-config';
8
+ import { ShowcaseSection } from '../../molecules/layout/ShowcaseSection';
9
+ import { IconBadge } from '../../atoms/composed/IconBadge';
10
+ import { Switch } from '../../atoms/ui/Switch';
11
+ import { BarChart3, TrendingUp, PieChart, Layers } from 'lucide-react';
12
+
13
+ export const EntityPerformanceShowcase: React.FC = () => {
14
+ const [showInsights, setShowInsights] = useState(true);
15
+ const [showTrends, setShowTrends] = useState(true);
16
+ const [showCategories, setShowCategories] = useState(true);
17
+
18
+ return (
19
+ <div className="min-h-screen bg-background">
20
+ <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12">
21
+ <div className="flex items-center justify-between mb-12">
22
+ <div className="flex items-center space-x-4">
23
+ <IconBadge
24
+ variant="category"
25
+ category={6}
26
+ size="lg"
27
+ icon={<BarChart3 className="w-6 h-6" />}
28
+ />
29
+ <div>
30
+ <h1 className="text-4xl font-bold text-foreground">Performance Dashboard</h1>
31
+ <p className="text-lg text-muted-foreground mt-2">
32
+ Cross-domain entity template showcasing configurable performance metrics and analytics
33
+ </p>
34
+ </div>
35
+ </div>
36
+
37
+ <div className="flex items-center space-x-3">
38
+ <div className="flex items-center gap-3 bg-card/80 backdrop-blur-sm border border-border/50 rounded px-3 py-2">
39
+ <Layers className="w-4 h-4 text-muted-foreground" />
40
+ <span className="text-sm font-medium text-foreground">Live Data</span>
41
+ <Switch checked={true} disabled />
42
+ </div>
43
+ </div>
44
+ </div>
45
+
46
+ <div className="space-y-12">
47
+ {showInsights && (
48
+ <ShowcaseSection
49
+ title="Metrics Overview with Insights"
50
+ description="Configurable KPI displays with automated insights and trend indicators"
51
+ badge={{
52
+ text: "Interactive",
53
+ variant: "category",
54
+ category: 2
55
+ }}
56
+ >
57
+ <MetricsOverviewWithInsightsPanel
58
+ metrics={financialConfig.metrics}
59
+ data={sampleFinancialData}
60
+ isLoading={false}
61
+ showInsights={true}
62
+ onMetricClick={(metric, value) => {
63
+ console.log('Metric clicked:', metric.label, value);
64
+ }}
65
+ />
66
+ </ShowcaseSection>
67
+ )}
68
+
69
+ {showTrends && (
70
+ <ShowcaseSection
71
+ title="Trend Analysis"
72
+ description="Time-series visualizations with forecasting and period comparison"
73
+ badge={{
74
+ text: "Dynamic",
75
+ variant: "category",
76
+ category: 4
77
+ }}
78
+ >
79
+ <TrendAnalysisPanel
80
+ metrics={financialConfig.metrics}
81
+ data={sampleFinancialData}
82
+ isLoading={false}
83
+ onTrendPeriodChange={(period) => {
84
+ console.log('Trend period changed:', period);
85
+ }}
86
+ />
87
+ </ShowcaseSection>
88
+ )}
89
+
90
+ {showCategories && (
91
+ <ShowcaseSection
92
+ title="Category Breakdown"
93
+ description="Hierarchical data visualization with drill-down capabilities"
94
+ badge={{
95
+ text: "Explorable",
96
+ variant: "category",
97
+ category: 7
98
+ }}
99
+ >
100
+ <CategoryBreakdownPanel
101
+ categoryConfig={financialConfig.categories}
102
+ valueField="amount"
103
+ data={sampleFinancialData}
104
+ isLoading={false}
105
+ onCategoryClick={(category) => {
106
+ console.log('Category clicked:', category);
107
+ }}
108
+ />
109
+ </ShowcaseSection>
110
+ )}
111
+ </div>
112
+ </div>
113
+ </div>
114
+ );
115
+ };
116
+
117
+ export default EntityPerformanceShowcase;
@@ -0,0 +1,2 @@
1
+ export { EntityPerformanceShowcase } from './EntityPerformanceShowcase';
2
+ export { EntityManagementShowcase } from './EntityManagementShowcase';
@@ -0,0 +1,229 @@
1
+ import React, { useState } from 'react';
2
+ import { EntityPerformanceDashboardTemplate } from '../templates/entity';
3
+ import { DashboardWithSidePanel } from '../molecules/layout';
4
+ import { financialConfig, sampleFinancialData } from '../templates/entity/configs/financial-config';
5
+ import { DataTable } from '../atoms/composed/DataTable';
6
+ import { DataBadge } from '../atoms/composed/DataBadge';
7
+ import { Card } from '../atoms/ui/card';
8
+ import { Button } from '../atoms/ui/button';
9
+ import { DollarSign, TrendingUp, TrendingDown, Eye, Filter } from 'lucide-react';
10
+
11
+ // Enhanced transaction data for side panel
12
+ const recentTransactions = [
13
+ {
14
+ id: 'TXN-001',
15
+ description: 'Product Sale - Premium Package',
16
+ amount: 2499.99,
17
+ type: 'income',
18
+ category: 'Sales',
19
+ date: '2024-06-08',
20
+ status: 'completed',
21
+ customer: 'Acme Corp'
22
+ },
23
+ {
24
+ id: 'TXN-002',
25
+ description: 'Subscription Revenue',
26
+ amount: 149.99,
27
+ type: 'income',
28
+ category: 'Recurring',
29
+ date: '2024-06-08',
30
+ status: 'completed',
31
+ customer: 'TechStart Inc'
32
+ },
33
+ {
34
+ id: 'TXN-003',
35
+ description: 'Refund - Service Cancellation',
36
+ amount: -299.99,
37
+ type: 'expense',
38
+ category: 'Refunds',
39
+ date: '2024-06-07',
40
+ status: 'processed',
41
+ customer: 'Beta Solutions'
42
+ },
43
+ {
44
+ id: 'TXN-004',
45
+ description: 'Consulting Services',
46
+ amount: 1200.00,
47
+ type: 'income',
48
+ category: 'Services',
49
+ date: '2024-06-07',
50
+ status: 'completed',
51
+ customer: 'Global Enterprises'
52
+ },
53
+ {
54
+ id: 'TXN-005',
55
+ description: 'Platform License',
56
+ amount: 599.99,
57
+ type: 'income',
58
+ category: 'Licenses',
59
+ date: '2024-06-06',
60
+ status: 'pending',
61
+ customer: 'StartupXYZ'
62
+ }
63
+ ];
64
+
65
+ const transactionColumns = [
66
+ {
67
+ key: 'id',
68
+ header: 'Transaction ID',
69
+ render: (value: string) => (
70
+ <code className="text-xs bg-muted px-2 py-1 rounded">{value}</code>
71
+ )
72
+ },
73
+ {
74
+ key: 'description',
75
+ header: 'Description',
76
+ render: (value: string) => (
77
+ <div className="max-w-[200px] truncate" title={value}>
78
+ {value}
79
+ </div>
80
+ )
81
+ },
82
+ {
83
+ key: 'amount',
84
+ header: 'Amount',
85
+ render: (value: number) => (
86
+ <div className={`font-medium ${value >= 0 ? 'text-green-600' : 'text-red-600'}`}>
87
+ {value >= 0 ? '+' : ''}${Math.abs(value).toLocaleString()}
88
+ </div>
89
+ )
90
+ },
91
+ {
92
+ key: 'category',
93
+ header: 'Category',
94
+ render: (value: string) => (
95
+ <DataBadge variant="category" category={1}>
96
+ {value}
97
+ </DataBadge>
98
+ )
99
+ },
100
+ {
101
+ key: 'status',
102
+ header: 'Status',
103
+ render: (value: string) => (
104
+ <DataBadge variant="status" status={value === 'completed' ? 'success' : value === 'pending' ? 'warning' : 'info'}>
105
+ {value}
106
+ </DataBadge>
107
+ )
108
+ }
109
+ ];
110
+
111
+ export const EntityTemplateExample: React.FC = () => {
112
+ const [showSidePanel, setShowSidePanel] = useState(true);
113
+
114
+ const handleTransactionClick = (transaction: any) => {
115
+ console.log('Transaction selected:', transaction);
116
+ };
117
+
118
+ return (
119
+ <DashboardWithSidePanel
120
+ showSidePanel={showSidePanel}
121
+ sidePanelWidth={80}
122
+ sidePanel={
123
+ <div className="fixed right-0 top-16 h-[calc(100vh-4rem)] w-80 bg-background border-l border-border shadow-lg flex flex-col z-30">
124
+ {/* Side Panel Header */}
125
+ <div className="p-4 border-b border-border bg-muted/30">
126
+ <div className="flex items-center justify-between">
127
+ <h3 className="font-semibold">Recent Transactions</h3>
128
+ <Button
129
+ variant="ghost"
130
+ size="sm"
131
+ onClick={() => setShowSidePanel(false)}
132
+ >
133
+ ×
134
+ </Button>
135
+ </div>
136
+ <p className="text-sm text-muted-foreground mt-1">
137
+ Latest financial activity
138
+ </p>
139
+ </div>
140
+
141
+ {/* Transaction Summary Cards */}
142
+ <div className="p-4 space-y-3 border-b border-border">
143
+ <Card className="p-3">
144
+ <div className="flex items-center justify-between">
145
+ <div className="flex items-center gap-2">
146
+ <TrendingUp className="w-4 h-4 text-green-600" />
147
+ <span className="text-sm font-medium">Today's Income</span>
148
+ </div>
149
+ <span className="text-green-600 font-semibold">+$2,649.98</span>
150
+ </div>
151
+ </Card>
152
+
153
+ <Card className="p-3">
154
+ <div className="flex items-center justify-between">
155
+ <div className="flex items-center gap-2">
156
+ <TrendingDown className="w-4 h-4 text-red-600" />
157
+ <span className="text-sm font-medium">Today's Expenses</span>
158
+ </div>
159
+ <span className="text-red-600 font-semibold">-$299.99</span>
160
+ </div>
161
+ </Card>
162
+ </div>
163
+
164
+ {/* Transaction List */}
165
+ <div className="flex-1 overflow-auto p-4">
166
+ <DataTable
167
+ data={recentTransactions}
168
+ columns={transactionColumns}
169
+ showSearch={true}
170
+ searchPlaceholder="Search transactions..."
171
+ showPagination={false}
172
+ onRowClick={handleTransactionClick}
173
+ className="text-xs"
174
+ compact={true}
175
+ />
176
+ </div>
177
+
178
+ {/* Side Panel Footer */}
179
+ <div className="p-4 border-t border-border bg-muted/30">
180
+ <Button variant="outline" size="sm" className="w-full">
181
+ <DollarSign className="w-4 h-4 mr-2" />
182
+ View All Transactions
183
+ </Button>
184
+ </div>
185
+ </div>
186
+ }
187
+ >
188
+ <EntityPerformanceDashboardTemplate
189
+ config={financialConfig}
190
+ data={sampleFinancialData}
191
+ isLoading={false}
192
+ layout="standard"
193
+ showInsights={true}
194
+ showTrends={true}
195
+ showCategories={true}
196
+ onMetricClick={(metric, value) => {
197
+ console.log('Metric clicked:', metric.label, value);
198
+ }}
199
+ onCategoryClick={(category) => {
200
+ console.log('Category clicked:', category);
201
+ }}
202
+ onTrendPeriodChange={(period) => {
203
+ console.log('Trend period changed:', period);
204
+ }}
205
+ onExport={(type, data) => {
206
+ console.log('Export requested:', type, data);
207
+ }}
208
+ headerSlot={
209
+ <div className="flex gap-2">
210
+ <Button
211
+ variant="outline"
212
+ size="sm"
213
+ onClick={() => setShowSidePanel(!showSidePanel)}
214
+ >
215
+ <Eye className="w-4 h-4 mr-2" />
216
+ {showSidePanel ? 'Hide' : 'Show'} Transactions
217
+ </Button>
218
+ <Button variant="outline" size="sm">
219
+ <Filter className="w-4 h-4 mr-2" />
220
+ Filter Data
221
+ </Button>
222
+ </div>
223
+ }
224
+ />
225
+ </DashboardWithSidePanel>
226
+ );
227
+ };
228
+
229
+ export default EntityTemplateExample;
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+
3
+ // Simple test component to verify the entity templates work
4
+ export const TestEntityTemplate: React.FC = () => {
5
+ const testData = [
6
+ {
7
+ id: '1',
8
+ amount: 1000,
9
+ category: 'Test',
10
+ date: '2024-01-01'
11
+ }
12
+ ];
13
+
14
+ const testConfig = {
15
+ entityType: 'transactional' as const,
16
+ display: {
17
+ title: 'Test Dashboard',
18
+ category: 1 as const
19
+ },
20
+ metrics: [
21
+ {
22
+ key: 'amount',
23
+ label: 'Total Amount',
24
+ type: 'currency' as const
25
+ }
26
+ ]
27
+ };
28
+
29
+ return (
30
+ <div className="p-8">
31
+ <h1 className="text-2xl font-bold mb-4">Entity Template Test</h1>
32
+ <div className="bg-muted p-4 rounded-lg">
33
+ <p>Config: {JSON.stringify(testConfig, null, 2)}</p>
34
+ <p>Data: {JSON.stringify(testData, null, 2)}</p>
35
+ </div>
36
+ </div>
37
+ );
38
+ };
39
+
40
+ export default TestEntityTemplate;
@@ -0,0 +1,3 @@
1
+ export { ComponentShowcase } from './ComponentShowcase';
2
+ export * from './AdminShowcase';
3
+ export * from './EntityShowcase';
@@ -0,0 +1,216 @@
1
+ import React from 'react';
2
+ import { cn } from '../atoms/utils/utils';
3
+ import { Card } from '../atoms/ui/card';
4
+ import { SectionHeader } from '../molecules/layout/SectionHeader';
5
+
6
+ export interface AuthTemplateProps {
7
+ /** Page title */
8
+ title: string;
9
+ /** Page subtitle */
10
+ subtitle?: string;
11
+ /** Auth form content */
12
+ children: React.ReactNode;
13
+ /** Footer content (e.g., links to other auth pages) */
14
+ footer?: React.ReactNode;
15
+ /** Logo or brand element */
16
+ logo?: React.ReactNode;
17
+ /** Background pattern or image */
18
+ backgroundPattern?: 'gradient' | 'grid' | 'dots' | 'waves';
19
+ /** Additional CSS classes */
20
+ className?: string;
21
+ /** Category-based styling */
22
+ category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
23
+ /** Card width variant */
24
+ width?: 'sm' | 'md' | 'lg';
25
+ }
26
+
27
+ export const AuthTemplate: React.FC<AuthTemplateProps> = ({
28
+ title,
29
+ subtitle,
30
+ children,
31
+ footer,
32
+ logo,
33
+ backgroundPattern = 'gradient',
34
+ className,
35
+ category = 1,
36
+ width = 'md'
37
+ }) => {
38
+ const backgroundPatterns = {
39
+ gradient: 'bg-gradient-to-br from-background via-muted/20 to-background',
40
+ grid: 'bg-background bg-[size:2rem_2rem] bg-[image:radial-gradient(circle,var(--muted)_1px,transparent_1px)]',
41
+ dots: 'bg-background bg-[size:1rem_1rem] bg-[image:radial-gradient(circle,var(--muted)_1px,transparent_1px)]',
42
+ waves: 'bg-background bg-[size:4rem_2rem] bg-[image:repeating-linear-gradient(45deg,transparent,transparent_1rem,var(--muted/20)_1rem,var(--muted/20)_2rem)]'
43
+ };
44
+
45
+ const widthClasses = {
46
+ sm: 'max-w-sm',
47
+ md: 'max-w-md',
48
+ lg: 'max-w-lg'
49
+ };
50
+
51
+ return (
52
+ <div
53
+ className={cn(
54
+ 'min-h-screen flex items-center justify-center p-4',
55
+ backgroundPatterns[backgroundPattern],
56
+ className
57
+ )}
58
+ data-component-name="AuthTemplate"
59
+ >
60
+ <div className={cn('w-full', widthClasses[width])}>
61
+ <Card
62
+ className="p-8 backdrop-blur-sm bg-background/95"
63
+ category={category}
64
+ >
65
+ {/* Logo */}
66
+ {logo && (
67
+ <div className="flex justify-center mb-8">
68
+ {logo}
69
+ </div>
70
+ )}
71
+
72
+ {/* Header */}
73
+ <div className="text-center mb-8">
74
+ <SectionHeader
75
+ title={title}
76
+ subtitle={subtitle}
77
+ size="lg"
78
+ className="text-center"
79
+ />
80
+ </div>
81
+
82
+ {/* Form Content */}
83
+ <div className="space-y-6">
84
+ {children}
85
+ </div>
86
+
87
+ {/* Footer */}
88
+ {footer && (
89
+ <div className="mt-8 pt-6 border-t border-border text-center">
90
+ {footer}
91
+ </div>
92
+ )}
93
+ </Card>
94
+ </div>
95
+ </div>
96
+ );
97
+ };
98
+
99
+ /**
100
+ * Auth Form Field Component
101
+ * Standardized form field for auth forms
102
+ */
103
+ export interface AuthFormFieldProps {
104
+ /** Field label */
105
+ label: string;
106
+ /** Field input */
107
+ children: React.ReactNode;
108
+ /** Error message */
109
+ error?: string;
110
+ /** Whether field is required */
111
+ required?: boolean;
112
+ /** Additional CSS classes */
113
+ className?: string;
114
+ }
115
+
116
+ export const AuthFormField: React.FC<AuthFormFieldProps> = ({
117
+ label,
118
+ children,
119
+ error,
120
+ required = false,
121
+ className
122
+ }) => {
123
+ return (
124
+ <div className={cn('space-y-2', className)}>
125
+ <label className={cn(
126
+ 'text-sm font-medium text-foreground block',
127
+ required && "after:content-['*'] after:ml-0.5 after:text-status-error"
128
+ )}>
129
+ {label}
130
+ </label>
131
+
132
+ <div className="relative">
133
+ {children}
134
+ </div>
135
+
136
+ {error && (
137
+ <p className="text-xs text-status-error font-medium">
138
+ {error}
139
+ </p>
140
+ )}
141
+ </div>
142
+ );
143
+ };
144
+
145
+ /**
146
+ * Auth Link Component
147
+ * Standardized link for auth pages
148
+ */
149
+ export interface AuthLinkProps {
150
+ /** Link text */
151
+ children: React.ReactNode;
152
+ /** Link destination */
153
+ href: string;
154
+ /** Link variant */
155
+ variant?: 'primary' | 'secondary';
156
+ /** Additional CSS classes */
157
+ className?: string;
158
+ /** Category-based styling */
159
+ category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
160
+ }
161
+
162
+ export const AuthLink: React.FC<AuthLinkProps> = ({
163
+ children,
164
+ href,
165
+ variant = 'primary',
166
+ className,
167
+ category = 1
168
+ }) => {
169
+ const variantClasses = {
170
+ primary: `text-category-${category} hover:text-category-${category}/80 font-medium`,
171
+ secondary: 'text-muted-foreground hover:text-foreground'
172
+ };
173
+
174
+ return (
175
+ <a
176
+ href={href}
177
+ className={cn(
178
+ 'text-sm transition-colors hover:underline',
179
+ variantClasses[variant],
180
+ className
181
+ )}
182
+ >
183
+ {children}
184
+ </a>
185
+ );
186
+ };
187
+
188
+ /**
189
+ * Auth Divider Component
190
+ * Visual divider for auth forms (e.g., "or continue with")
191
+ */
192
+ export interface AuthDividerProps {
193
+ /** Divider text */
194
+ children?: React.ReactNode;
195
+ /** Additional CSS classes */
196
+ className?: string;
197
+ }
198
+
199
+ export const AuthDivider: React.FC<AuthDividerProps> = ({
200
+ children = 'or',
201
+ className
202
+ }) => {
203
+ return (
204
+ <div className={cn('relative flex items-center', className)}>
205
+ <div className="flex-1 border-t border-border" />
206
+ {children && (
207
+ <div className="px-4">
208
+ <span className="text-xs text-muted-foreground uppercase tracking-wide font-medium">
209
+ {children}
210
+ </span>
211
+ </div>
212
+ )}
213
+ <div className="flex-1 border-t border-border" />
214
+ </div>
215
+ );
216
+ };