@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,385 @@
1
+ import React, { useState } from 'react';
2
+ import { AdminDetailTemplate } from '../../templates/admin';
3
+ import type { FieldSection, ActionConfig, AuditEntry, RelatedData } from '../../templates/admin';
4
+ import { Edit, Trash2, Lock, Mail, Phone, Calendar } from 'lucide-react';
5
+
6
+ // Mock user data
7
+ const mockUserData = {
8
+ id: '1',
9
+ name: 'John Doe',
10
+ email: 'john.doe@example.com',
11
+ phone: '+1 (555) 123-4567',
12
+ role: 'Administrator',
13
+ department: 'Engineering',
14
+ location: 'San Francisco, CA',
15
+ isActive: true,
16
+ lastLogin: '2024-01-15T10:30:00Z',
17
+ createdAt: '2023-06-15T08:00:00Z',
18
+ updatedAt: '2024-01-15T10:30:00Z',
19
+ avatar: 'https://api.dicebear.com/7.x/initials/svg?seed=John Doe',
20
+ bio: 'Senior software engineer with 8 years of experience in full-stack development.',
21
+ permissions: ['read', 'write', 'admin'],
22
+ preferences: {
23
+ theme: 'dark',
24
+ notifications: true,
25
+ language: 'en'
26
+ }
27
+ };
28
+
29
+ const fieldSections: FieldSection[] = [
30
+ {
31
+ title: 'Basic Information',
32
+ description: 'Primary user details and contact information',
33
+ category: 1,
34
+ fields: [
35
+ {
36
+ key: 'name',
37
+ label: 'Full Name',
38
+ type: 'text',
39
+ editable: true,
40
+ copyable: true
41
+ },
42
+ {
43
+ key: 'email',
44
+ label: 'Email Address',
45
+ type: 'email',
46
+ editable: true,
47
+ copyable: true
48
+ },
49
+ {
50
+ key: 'phone',
51
+ label: 'Phone Number',
52
+ type: 'phone',
53
+ editable: true,
54
+ copyable: true
55
+ },
56
+ {
57
+ key: 'location',
58
+ label: 'Location',
59
+ type: 'text',
60
+ editable: true
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ title: 'Role & Permissions',
66
+ description: 'User role and system access permissions',
67
+ category: 2,
68
+ fields: [
69
+ {
70
+ key: 'role',
71
+ label: 'Role',
72
+ type: 'badge',
73
+ editable: true
74
+ },
75
+ {
76
+ key: 'department',
77
+ label: 'Department',
78
+ type: 'text',
79
+ editable: true
80
+ },
81
+ {
82
+ key: 'isActive',
83
+ label: 'Account Status',
84
+ type: 'boolean',
85
+ editable: true
86
+ },
87
+ {
88
+ key: 'permissions',
89
+ label: 'Permissions',
90
+ type: 'custom',
91
+ render: (value) => (
92
+ <div className="flex gap-1 flex-wrap">
93
+ {(value as string[]).map((permission) => (
94
+ <span
95
+ key={permission}
96
+ className="px-2 py-1 text-xs bg-category-2/10 text-category-2 rounded-md"
97
+ >
98
+ {permission}
99
+ </span>
100
+ ))}
101
+ </div>
102
+ )
103
+ }
104
+ ]
105
+ },
106
+ {
107
+ title: 'Activity & Timestamps',
108
+ description: 'Account activity and important dates',
109
+ category: 3,
110
+ fields: [
111
+ {
112
+ key: 'lastLogin',
113
+ label: 'Last Login',
114
+ type: 'datetime'
115
+ },
116
+ {
117
+ key: 'createdAt',
118
+ label: 'Account Created',
119
+ type: 'datetime'
120
+ },
121
+ {
122
+ key: 'updatedAt',
123
+ label: 'Last Updated',
124
+ type: 'datetime'
125
+ }
126
+ ]
127
+ },
128
+ {
129
+ title: 'Preferences',
130
+ description: 'User preferences and settings',
131
+ category: 4,
132
+ fields: [
133
+ {
134
+ key: 'preferences',
135
+ label: 'User Preferences',
136
+ type: 'json'
137
+ },
138
+ {
139
+ key: 'bio',
140
+ label: 'Biography',
141
+ type: 'text',
142
+ editable: true
143
+ }
144
+ ]
145
+ }
146
+ ];
147
+
148
+ const actions: ActionConfig[] = [
149
+ {
150
+ id: 'edit',
151
+ label: 'Edit User',
152
+ icon: <Edit className="w-4 h-4 mr-2" />,
153
+ variant: 'default',
154
+ onClick: () => console.log('Edit user')
155
+ },
156
+ {
157
+ id: 'reset-password',
158
+ label: 'Reset Password',
159
+ icon: <Lock className="w-4 h-4 mr-2" />,
160
+ variant: 'outline',
161
+ onClick: () => console.log('Reset password')
162
+ },
163
+ {
164
+ id: 'send-email',
165
+ label: 'Send Email',
166
+ icon: <Mail className="w-4 h-4 mr-2" />,
167
+ variant: 'outline',
168
+ onClick: () => console.log('Send email')
169
+ },
170
+ {
171
+ id: 'delete',
172
+ label: 'Delete User',
173
+ icon: <Trash2 className="w-4 h-4 mr-2" />,
174
+ variant: 'destructive',
175
+ onClick: () => console.log('Delete user')
176
+ }
177
+ ];
178
+
179
+ const auditTrail: AuditEntry[] = [
180
+ {
181
+ id: '1',
182
+ action: 'User profile updated',
183
+ user: 'admin.user',
184
+ timestamp: new Date(Date.now() - 60 * 60 * 1000),
185
+ changes: [
186
+ { field: 'phone', oldValue: '+1 (555) 123-4566', newValue: '+1 (555) 123-4567' },
187
+ { field: 'location', oldValue: 'New York, NY', newValue: 'San Francisco, CA' }
188
+ ]
189
+ },
190
+ {
191
+ id: '2',
192
+ action: 'Password reset requested',
193
+ user: 'john.doe',
194
+ timestamp: new Date(Date.now() - 2 * 24 * 60 * 60 * 1000)
195
+ },
196
+ {
197
+ id: '3',
198
+ action: 'Role changed from Editor to Administrator',
199
+ user: 'admin.user',
200
+ timestamp: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
201
+ changes: [
202
+ { field: 'role', oldValue: 'Editor', newValue: 'Administrator' }
203
+ ]
204
+ },
205
+ {
206
+ id: '4',
207
+ action: 'Account created',
208
+ user: 'system',
209
+ timestamp: new Date('2023-06-15T08:00:00Z')
210
+ }
211
+ ];
212
+
213
+ const relatedData: RelatedData[] = [
214
+ {
215
+ title: 'Recent Projects',
216
+ description: 'Projects the user has been involved with',
217
+ data: [
218
+ {
219
+ id: '1',
220
+ name: 'E-commerce Platform',
221
+ role: 'Lead Developer',
222
+ status: 'Active',
223
+ lastActivity: '2024-01-15'
224
+ },
225
+ {
226
+ id: '2',
227
+ name: 'Mobile App Redesign',
228
+ role: 'Technical Lead',
229
+ status: 'Completed',
230
+ lastActivity: '2024-01-10'
231
+ },
232
+ {
233
+ id: '3',
234
+ name: 'API Migration',
235
+ role: 'Senior Developer',
236
+ status: 'In Progress',
237
+ lastActivity: '2024-01-14'
238
+ }
239
+ ],
240
+ columns: [
241
+ { key: 'name', header: 'Project Name' },
242
+ { key: 'role', header: 'Role' },
243
+ { key: 'status', header: 'Status', cell: (item) => (
244
+ <span className={`px-2 py-1 text-xs rounded-md ${
245
+ item.status === 'Active' ? 'bg-category-2/10 text-category-2' :
246
+ item.status === 'Completed' ? 'bg-category-3/10 text-category-3' :
247
+ 'bg-category-1/10 text-category-1'
248
+ }`}>
249
+ {item.status as string}
250
+ </span>
251
+ )},
252
+ { key: 'lastActivity', header: 'Last Activity', cell: (item) =>
253
+ new Date(item.lastActivity as string).toLocaleDateString()
254
+ }
255
+ ],
256
+ actions: [
257
+ {
258
+ id: 'view-project',
259
+ label: 'View All Projects',
260
+ variant: 'outline',
261
+ onClick: () => console.log('View all projects')
262
+ }
263
+ ],
264
+ category: 1
265
+ },
266
+ {
267
+ title: 'Team Members',
268
+ description: 'Other team members in the same department',
269
+ data: [
270
+ {
271
+ id: '2',
272
+ name: 'Sarah Wilson',
273
+ role: 'Product Manager',
274
+ email: 'sarah.wilson@example.com'
275
+ },
276
+ {
277
+ id: '3',
278
+ name: 'Mike Johnson',
279
+ role: 'Designer',
280
+ email: 'mike.johnson@example.com'
281
+ },
282
+ {
283
+ id: '4',
284
+ name: 'Emily Davis',
285
+ role: 'QA Engineer',
286
+ email: 'emily.davis@example.com'
287
+ }
288
+ ],
289
+ columns: [
290
+ { key: 'name', header: 'Name' },
291
+ { key: 'role', header: 'Role' },
292
+ { key: 'email', header: 'Email', cell: (item) => (
293
+ <a href={`mailto:${item.email}`} className="text-category-1 hover:underline">
294
+ {item.email as string}
295
+ </a>
296
+ )}
297
+ ],
298
+ category: 2
299
+ }
300
+ ];
301
+
302
+ export const AdminDetailShowcase: React.FC = () => {
303
+ const [userData, setUserData] = useState(mockUserData);
304
+
305
+ const handleUpdate = async (field: string, value: unknown) => {
306
+ console.log('Updating field:', field, 'with value:', value);
307
+
308
+ // Simulate API call
309
+ await new Promise(resolve => setTimeout(resolve, 500));
310
+
311
+ setUserData(prev => ({
312
+ ...prev,
313
+ [field]: value,
314
+ updatedAt: new Date().toISOString()
315
+ }));
316
+ };
317
+
318
+ const handleBack = () => {
319
+ console.log('Navigate back to users list');
320
+ };
321
+
322
+ const sidebar = (
323
+ <div className="space-y-6">
324
+ {/* Quick Actions */}
325
+ <div className="bg-muted/30 rounded-lg p-4">
326
+ <h4 className="font-medium text-sm mb-3 text-foreground">Quick Actions</h4>
327
+ <div className="space-y-2">
328
+ <button className="w-full text-left text-sm p-2 rounded-md hover:bg-muted flex items-center">
329
+ <Mail className="w-4 h-4 mr-2" />
330
+ Send Message
331
+ </button>
332
+ <button className="w-full text-left text-sm p-2 rounded-md hover:bg-muted flex items-center">
333
+ <Phone className="w-4 h-4 mr-2" />
334
+ Schedule Call
335
+ </button>
336
+ <button className="w-full text-left text-sm p-2 rounded-md hover:bg-muted flex items-center">
337
+ <Calendar className="w-4 h-4 mr-2" />
338
+ View Calendar
339
+ </button>
340
+ </div>
341
+ </div>
342
+
343
+ {/* User Stats */}
344
+ <div className="bg-muted/30 rounded-lg p-4">
345
+ <h4 className="font-medium text-sm mb-3 text-foreground">Statistics</h4>
346
+ <div className="space-y-3">
347
+ <div className="flex justify-between text-sm">
348
+ <span className="text-muted-foreground">Projects</span>
349
+ <span className="font-medium">12</span>
350
+ </div>
351
+ <div className="flex justify-between text-sm">
352
+ <span className="text-muted-foreground">Tasks Completed</span>
353
+ <span className="font-medium">147</span>
354
+ </div>
355
+ <div className="flex justify-between text-sm">
356
+ <span className="text-muted-foreground">Hours Logged</span>
357
+ <span className="font-medium">1,248</span>
358
+ </div>
359
+ <div className="flex justify-between text-sm">
360
+ <span className="text-muted-foreground">Team Rating</span>
361
+ <span className="font-medium">4.8/5</span>
362
+ </div>
363
+ </div>
364
+ </div>
365
+ </div>
366
+ );
367
+
368
+ return (
369
+ <AdminDetailTemplate
370
+ title={userData.name}
371
+ subtitle={`${userData.role} • ${userData.department}`}
372
+ resourceType="Users"
373
+ data={userData}
374
+ sections={fieldSections}
375
+ actions={actions}
376
+ relatedData={relatedData}
377
+ auditTrail={auditTrail}
378
+ onBack={handleBack}
379
+ onUpdate={handleUpdate}
380
+ category={1}
381
+ sidebar={sidebar}
382
+ showAuditTrail={true}
383
+ />
384
+ );
385
+ };
@@ -0,0 +1,158 @@
1
+ import React, { useState } from 'react';
2
+ import { DashboardWithSidePanel } from '../../molecules/layout';
3
+ import { SalesPanel } from '../../atoms/composed/SalesPanel';
4
+ import { DataTable, StatCard, Chart } from '../../atoms/composed';
5
+ import { Card } from '../../atoms/ui/card';
6
+ import { mockSalesData } from '../../atoms/composed/SalesPanel/mockSalesData';
7
+ import { Button } from '../../atoms/ui/button';
8
+ import { Eye, Filter, Calendar, TrendingUp, Users, Target, DollarSign } from 'lucide-react';
9
+
10
+
11
+ // Mock data for main dashboard
12
+ const salesMetrics = [
13
+ { title: 'Total Revenue', value: '$1.2M', trend: { value: 15.3, label: 'from last month' }, icon: <DollarSign className="w-5 h-5" />, category: 2 as const },
14
+ { title: 'Deals Closed', value: '47', trend: { value: 12.8, label: 'from last month' }, icon: <Target className="w-5 h-5" />, category: 3 as const },
15
+ { title: 'Conversion Rate', value: '24.5%', trend: { value: -2.1, label: 'from last month' }, icon: <TrendingUp className="w-5 h-5" />, category: 1 as const },
16
+ { title: 'Active Prospects', value: '156', trend: { value: 8.7, label: 'from last month' }, icon: <Users className="w-5 h-5" />, category: 4 as const }
17
+ ];
18
+
19
+ const salesTrendData = [
20
+ { label: 'Jan', value: 85000 },
21
+ { label: 'Feb', value: 92000 },
22
+ { label: 'Mar', value: 108000 },
23
+ { label: 'Apr', value: 125000 },
24
+ { label: 'May', value: 118000 },
25
+ { label: 'Jun', value: 135000 }
26
+ ];
27
+
28
+ const allSalesColumns = [
29
+ { key: 'customer', header: 'Customer', render: (value: string) => <div className="font-medium">{value}</div> },
30
+ { key: 'product', header: 'Product', render: (value: string) => <div className="text-sm">{value}</div> },
31
+ { key: 'amount', header: 'Value', render: (value: number) => <div className="font-semibold text-green-600">${value.toLocaleString()}</div> },
32
+ { key: 'stage', header: 'Stage', render: (value: string) => <span className="text-sm">{value}</span> },
33
+ { key: 'salesperson', header: 'Sales Rep', render: (value: string) => <div className="text-sm">{value}</div> },
34
+ { key: 'region', header: 'Region', render: (value: string) => <div className="text-sm">{value}</div> }
35
+ ];
36
+
37
+ export const SalesPerformanceDashboard: React.FC = () => {
38
+ const [showSidePanel, setShowSidePanel] = useState(true);
39
+
40
+ const handleSaleClick = (sale: any) => {
41
+ console.log('Deal selected:', sale);
42
+ };
43
+
44
+ return (
45
+ <DashboardWithSidePanel
46
+ showSidePanel={showSidePanel}
47
+ sidePanel={
48
+ <SalesPanel
49
+ sales={mockSalesData}
50
+ onSaleClick={handleSaleClick}
51
+ onClose={() => setShowSidePanel(false)}
52
+ />
53
+ }
54
+ >
55
+ <div className="p-6 space-y-6">
56
+ {/* Header */}
57
+ <div className="flex items-center justify-between">
58
+ <div>
59
+ <h1 className="text-2xl font-bold">Sales Performance</h1>
60
+ <p className="text-muted-foreground">Monitor sales metrics, team performance, and revenue trends</p>
61
+ </div>
62
+ <div className="flex gap-2">
63
+ <Button
64
+ variant="outline"
65
+ size="sm"
66
+ onClick={() => setShowSidePanel(!showSidePanel)}
67
+ >
68
+ <Eye className="w-4 h-4 mr-2" />
69
+ {showSidePanel ? 'Hide' : 'Show'} Pipeline
70
+ </Button>
71
+ <Button variant="outline" size="sm">
72
+ <Filter className="w-4 h-4 mr-2" />
73
+ Filter by Region
74
+ </Button>
75
+ <Button variant="outline" size="sm">
76
+ <Calendar className="w-4 h-4 mr-2" />
77
+ Date Range
78
+ </Button>
79
+ </div>
80
+ </div>
81
+
82
+ {/* Metrics */}
83
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
84
+ {salesMetrics.map((metric, index) => (
85
+ <StatCard
86
+ key={index}
87
+ title={metric.title}
88
+ value={metric.value}
89
+ trend={metric.trend}
90
+ icon={metric.icon}
91
+ category={metric.category}
92
+ />
93
+ ))}
94
+ </div>
95
+
96
+ {/* Charts */}
97
+ <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
98
+ <Card className="p-6">
99
+ <Chart
100
+ title="Revenue Trend"
101
+ type="line"
102
+ data={salesTrendData}
103
+ category={2}
104
+ noWrapper={true}
105
+ />
106
+ </Card>
107
+
108
+ <Card className="p-6">
109
+ <h3 className="font-semibold mb-4">Sales by Region</h3>
110
+ <div className="space-y-3">
111
+ <div className="flex justify-between items-center">
112
+ <span>North America</span>
113
+ <div className="flex items-center gap-2">
114
+ <div className="w-24 h-2 bg-muted rounded-full overflow-hidden">
115
+ <div className="w-3/5 h-full bg-category-2 rounded-full"></div>
116
+ </div>
117
+ <span className="text-sm font-medium">$750K</span>
118
+ </div>
119
+ </div>
120
+ <div className="flex justify-between items-center">
121
+ <span>Europe</span>
122
+ <div className="flex items-center gap-2">
123
+ <div className="w-24 h-2 bg-muted rounded-full overflow-hidden">
124
+ <div className="w-2/5 h-full bg-category-1 rounded-full"></div>
125
+ </div>
126
+ <span className="text-sm font-medium">$320K</span>
127
+ </div>
128
+ </div>
129
+ <div className="flex justify-between items-center">
130
+ <span>Asia Pacific</span>
131
+ <div className="flex items-center gap-2">
132
+ <div className="w-24 h-2 bg-muted rounded-full overflow-hidden">
133
+ <div className="w-1/4 h-full bg-category-3 rounded-full"></div>
134
+ </div>
135
+ <span className="text-sm font-medium">$130K</span>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ </Card>
140
+ </div>
141
+
142
+ {/* Detailed Sales Table */}
143
+ <Card className="p-6">
144
+ <h3 className="font-semibold mb-4">All Sales Opportunities</h3>
145
+ <DataTable
146
+ data={mockSalesData}
147
+ columns={allSalesColumns}
148
+ showSearch={true}
149
+ searchPlaceholder="Search deals, customers, or products..."
150
+ onRowClick={handleSaleClick}
151
+ />
152
+ </Card>
153
+ </div>
154
+ </DashboardWithSidePanel>
155
+ );
156
+ };
157
+
158
+ export default SalesPerformanceDashboard;
@@ -0,0 +1,4 @@
1
+ export { AdminDashboardShowcase } from './AdminDashboardShowcase';
2
+ export { AdminCRUDShowcase } from './AdminCRUDShowcase';
3
+ export { AdminDetailShowcase } from './AdminDetailShowcase';
4
+ export { SalesPerformanceDashboard } from './SalesPerformanceDashboard';