@pattern-stack/frontend-patterns 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/README.md +310 -0
  2. package/dist/atoms/composed/Accordion/Accordion.d.ts +20 -0
  3. package/dist/atoms/composed/Accordion/Accordion.d.ts.map +1 -0
  4. package/dist/atoms/composed/Accordion/index.d.ts +2 -0
  5. package/dist/atoms/composed/Accordion/index.d.ts.map +1 -0
  6. package/dist/atoms/composed/Alert/Alert.d.ts +25 -0
  7. package/dist/atoms/composed/Alert/Alert.d.ts.map +1 -0
  8. package/dist/atoms/composed/Alert/index.d.ts +2 -0
  9. package/dist/atoms/composed/Alert/index.d.ts.map +1 -0
  10. package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts +17 -0
  11. package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  12. package/dist/atoms/composed/Breadcrumb/index.d.ts +2 -0
  13. package/dist/atoms/composed/Breadcrumb/index.d.ts.map +1 -0
  14. package/dist/atoms/composed/Chart/Chart.d.ts +37 -0
  15. package/dist/atoms/composed/Chart/Chart.d.ts.map +1 -0
  16. package/dist/atoms/composed/Chart/index.d.ts +3 -0
  17. package/dist/atoms/composed/Chart/index.d.ts.map +1 -0
  18. package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts +19 -0
  19. package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts.map +1 -0
  20. package/dist/atoms/composed/ColorSwatch/index.d.ts +2 -0
  21. package/dist/atoms/composed/ColorSwatch/index.d.ts.map +1 -0
  22. package/dist/atoms/composed/DarkModeToggle.d.ts +4 -0
  23. package/dist/atoms/composed/DarkModeToggle.d.ts.map +1 -0
  24. package/dist/atoms/composed/DataBadge/DataBadge.d.ts +13 -0
  25. package/dist/atoms/composed/DataBadge/DataBadge.d.ts.map +1 -0
  26. package/dist/atoms/composed/DataBadge/index.d.ts +2 -0
  27. package/dist/atoms/composed/DataBadge/index.d.ts.map +1 -0
  28. package/dist/atoms/composed/DataTable/DataTable.d.ts +28 -0
  29. package/dist/atoms/composed/DataTable/DataTable.d.ts.map +1 -0
  30. package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts +10 -0
  31. package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts.map +1 -0
  32. package/dist/atoms/composed/DataTable/index.d.ts +3 -0
  33. package/dist/atoms/composed/DataTable/index.d.ts.map +1 -0
  34. package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts +45 -0
  35. package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts.map +1 -0
  36. package/dist/atoms/composed/DateTimePicker/index.d.ts +3 -0
  37. package/dist/atoms/composed/DateTimePicker/index.d.ts.map +1 -0
  38. package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts +30 -0
  39. package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts.map +1 -0
  40. package/dist/atoms/composed/DetailedCard/index.d.ts +3 -0
  41. package/dist/atoms/composed/DetailedCard/index.d.ts.map +1 -0
  42. package/dist/atoms/composed/EmptyState/EmptyState.d.ts +18 -0
  43. package/dist/atoms/composed/EmptyState/EmptyState.d.ts.map +1 -0
  44. package/dist/atoms/composed/EmptyState/index.d.ts +2 -0
  45. package/dist/atoms/composed/EmptyState/index.d.ts.map +1 -0
  46. package/dist/atoms/composed/FileUpload/FileUpload.d.ts +46 -0
  47. package/dist/atoms/composed/FileUpload/FileUpload.d.ts.map +1 -0
  48. package/dist/atoms/composed/FileUpload/index.d.ts +3 -0
  49. package/dist/atoms/composed/FileUpload/index.d.ts.map +1 -0
  50. package/dist/atoms/composed/FormField/FormField.d.ts +23 -0
  51. package/dist/atoms/composed/FormField/FormField.d.ts.map +1 -0
  52. package/dist/atoms/composed/FormField/index.d.ts +2 -0
  53. package/dist/atoms/composed/FormField/index.d.ts.map +1 -0
  54. package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts +8 -0
  55. package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts.map +1 -0
  56. package/dist/atoms/composed/GlobalSearch/index.d.ts +2 -0
  57. package/dist/atoms/composed/GlobalSearch/index.d.ts.map +1 -0
  58. package/dist/atoms/composed/IconBadge/IconBadge.d.ts +16 -0
  59. package/dist/atoms/composed/IconBadge/IconBadge.d.ts.map +1 -0
  60. package/dist/atoms/composed/IconBadge/index.d.ts +3 -0
  61. package/dist/atoms/composed/IconBadge/index.d.ts.map +1 -0
  62. package/dist/atoms/composed/Modal/Modal.d.ts +18 -0
  63. package/dist/atoms/composed/Modal/Modal.d.ts.map +1 -0
  64. package/dist/atoms/composed/Modal/index.d.ts +3 -0
  65. package/dist/atoms/composed/Modal/index.d.ts.map +1 -0
  66. package/dist/atoms/composed/PaletteSwitcher.d.ts +7 -0
  67. package/dist/atoms/composed/PaletteSwitcher.d.ts.map +1 -0
  68. package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts +25 -0
  69. package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts.map +1 -0
  70. package/dist/atoms/composed/ProgressBar/index.d.ts +2 -0
  71. package/dist/atoms/composed/ProgressBar/index.d.ts.map +1 -0
  72. package/dist/atoms/composed/StatCard/StatCard.d.ts +21 -0
  73. package/dist/atoms/composed/StatCard/StatCard.d.ts.map +1 -0
  74. package/dist/atoms/composed/StatCard/index.d.ts +2 -0
  75. package/dist/atoms/composed/StatCard/index.d.ts.map +1 -0
  76. package/dist/atoms/composed/StyleGuide.d.ts +3 -0
  77. package/dist/atoms/composed/StyleGuide.d.ts.map +1 -0
  78. package/dist/atoms/composed/Toast/Toast.d.ts +40 -0
  79. package/dist/atoms/composed/Toast/Toast.d.ts.map +1 -0
  80. package/dist/atoms/composed/Toast/index.d.ts +2 -0
  81. package/dist/atoms/composed/Toast/index.d.ts.map +1 -0
  82. package/dist/atoms/composed/Tooltip/Tooltip.d.ts +16 -0
  83. package/dist/atoms/composed/Tooltip/Tooltip.d.ts.map +1 -0
  84. package/dist/atoms/composed/Tooltip/index.d.ts +2 -0
  85. package/dist/atoms/composed/Tooltip/index.d.ts.map +1 -0
  86. package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts +8 -0
  87. package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts.map +1 -0
  88. package/dist/atoms/composed/UserAvatar/index.d.ts +2 -0
  89. package/dist/atoms/composed/UserAvatar/index.d.ts.map +1 -0
  90. package/dist/atoms/composed/UserMenu/UserMenu.d.ts +8 -0
  91. package/dist/atoms/composed/UserMenu/UserMenu.d.ts.map +1 -0
  92. package/dist/atoms/composed/UserMenu/index.d.ts +2 -0
  93. package/dist/atoms/composed/UserMenu/index.d.ts.map +1 -0
  94. package/dist/atoms/composed/index.d.ts +25 -0
  95. package/dist/atoms/composed/index.d.ts.map +1 -0
  96. package/dist/atoms/hooks/useApi.d.ts +25 -0
  97. package/dist/atoms/hooks/useApi.d.ts.map +1 -0
  98. package/dist/atoms/hooks/useHealth.d.ts +19 -0
  99. package/dist/atoms/hooks/useHealth.d.ts.map +1 -0
  100. package/dist/atoms/index.d.ts +9 -0
  101. package/dist/atoms/index.d.ts.map +1 -0
  102. package/dist/atoms/services/api/client.d.ts +20 -0
  103. package/dist/atoms/services/api/client.d.ts.map +1 -0
  104. package/dist/atoms/services/auth-service.d.ts +24 -0
  105. package/dist/atoms/services/auth-service.d.ts.map +1 -0
  106. package/dist/atoms/services/health.d.ts +7 -0
  107. package/dist/atoms/services/health.d.ts.map +1 -0
  108. package/dist/atoms/services/index.d.ts +4 -0
  109. package/dist/atoms/services/index.d.ts.map +1 -0
  110. package/dist/atoms/shared/config/constants.d.ts +15 -0
  111. package/dist/atoms/shared/config/constants.d.ts.map +1 -0
  112. package/dist/atoms/shared/config/dashboard-sizes.d.ts +83 -0
  113. package/dist/atoms/shared/config/dashboard-sizes.d.ts.map +1 -0
  114. package/dist/atoms/shared/config/environment.d.ts +10 -0
  115. package/dist/atoms/shared/config/environment.d.ts.map +1 -0
  116. package/dist/atoms/shared/index.d.ts +4 -0
  117. package/dist/atoms/shared/index.d.ts.map +1 -0
  118. package/dist/atoms/types/auth.d.ts +56 -0
  119. package/dist/atoms/types/auth.d.ts.map +1 -0
  120. package/dist/atoms/types/generated.d.ts +1469 -0
  121. package/dist/atoms/types/generated.d.ts.map +1 -0
  122. package/dist/atoms/types/index.d.ts +4 -0
  123. package/dist/atoms/types/index.d.ts.map +1 -0
  124. package/dist/atoms/types/loading.d.ts +26 -0
  125. package/dist/atoms/types/loading.d.ts.map +1 -0
  126. package/dist/atoms/ui/Badge.d.ts +10 -0
  127. package/dist/atoms/ui/Badge.d.ts.map +1 -0
  128. package/dist/atoms/ui/ErrorBoundary.d.ts +18 -0
  129. package/dist/atoms/ui/ErrorBoundary.d.ts.map +1 -0
  130. package/dist/atoms/ui/Select.d.ts +28 -0
  131. package/dist/atoms/ui/Select.d.ts.map +1 -0
  132. package/dist/atoms/ui/Switch.d.ts +9 -0
  133. package/dist/atoms/ui/Switch.d.ts.map +1 -0
  134. package/dist/atoms/ui/Tabs.d.ts +30 -0
  135. package/dist/atoms/ui/Tabs.d.ts.map +1 -0
  136. package/dist/atoms/ui/avatar.d.ts +7 -0
  137. package/dist/atoms/ui/avatar.d.ts.map +1 -0
  138. package/dist/atoms/ui/button.d.ts +14 -0
  139. package/dist/atoms/ui/button.d.ts.map +1 -0
  140. package/dist/atoms/ui/card.d.ts +12 -0
  141. package/dist/atoms/ui/card.d.ts.map +1 -0
  142. package/dist/atoms/ui/dropdown-menu.d.ts +28 -0
  143. package/dist/atoms/ui/dropdown-menu.d.ts.map +1 -0
  144. package/dist/atoms/ui/index.d.ts +15 -0
  145. package/dist/atoms/ui/index.d.ts.map +1 -0
  146. package/dist/atoms/ui/input.d.ts +5 -0
  147. package/dist/atoms/ui/input.d.ts.map +1 -0
  148. package/dist/atoms/ui/label.d.ts +6 -0
  149. package/dist/atoms/ui/label.d.ts.map +1 -0
  150. package/dist/atoms/ui/skeleton.d.ts +3 -0
  151. package/dist/atoms/ui/skeleton.d.ts.map +1 -0
  152. package/dist/atoms/ui/spinner.d.ts +14 -0
  153. package/dist/atoms/ui/spinner.d.ts.map +1 -0
  154. package/dist/atoms/ui/table.d.ts +11 -0
  155. package/dist/atoms/ui/table.d.ts.map +1 -0
  156. package/dist/atoms/utils/animations.d.ts +65 -0
  157. package/dist/atoms/utils/animations.d.ts.map +1 -0
  158. package/dist/atoms/utils/tooltip-helpers.d.ts +71 -0
  159. package/dist/atoms/utils/tooltip-helpers.d.ts.map +1 -0
  160. package/dist/atoms/utils/utils.d.ts +4 -0
  161. package/dist/atoms/utils/utils.d.ts.map +1 -0
  162. package/dist/features/auth/components/LoginForm.d.ts +2 -0
  163. package/dist/features/auth/components/LoginForm.d.ts.map +1 -0
  164. package/dist/features/auth/components/LogoutButton.d.ts +2 -0
  165. package/dist/features/auth/components/LogoutButton.d.ts.map +1 -0
  166. package/dist/features/auth/components/ProtectedRoute.d.ts +10 -0
  167. package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -0
  168. package/dist/features/auth/components/index.d.ts +4 -0
  169. package/dist/features/auth/components/index.d.ts.map +1 -0
  170. package/dist/features/auth/hooks/index.d.ts +3 -0
  171. package/dist/features/auth/hooks/index.d.ts.map +1 -0
  172. package/dist/features/auth/hooks/useAuth.d.ts +10 -0
  173. package/dist/features/auth/hooks/useAuth.d.ts.map +1 -0
  174. package/dist/features/auth/hooks/usePermissions.d.ts +13 -0
  175. package/dist/features/auth/hooks/usePermissions.d.ts.map +1 -0
  176. package/dist/features/auth/index.d.ts +3 -0
  177. package/dist/features/auth/index.d.ts.map +1 -0
  178. package/dist/features/index.d.ts +2 -0
  179. package/dist/features/index.d.ts.map +1 -0
  180. package/dist/frontend-patterns.css +567 -0
  181. package/dist/index.d.ts +10 -0
  182. package/dist/index.d.ts.map +1 -0
  183. package/dist/index.es.js +10152 -0
  184. package/dist/index.es.js.map +1 -0
  185. package/dist/index.js +10170 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/molecules/forms/FormGroup.d.ts +17 -0
  188. package/dist/molecules/forms/FormGroup.d.ts.map +1 -0
  189. package/dist/molecules/forms/SearchInput.d.ts +36 -0
  190. package/dist/molecules/forms/SearchInput.d.ts.map +1 -0
  191. package/dist/molecules/forms/index.d.ts +3 -0
  192. package/dist/molecules/forms/index.d.ts.map +1 -0
  193. package/dist/molecules/index.d.ts +4 -0
  194. package/dist/molecules/index.d.ts.map +1 -0
  195. package/dist/molecules/layout/AppHeader/AppHeader.d.ts +7 -0
  196. package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -0
  197. package/dist/molecules/layout/AppHeader/index.d.ts +2 -0
  198. package/dist/molecules/layout/AppHeader/index.d.ts.map +1 -0
  199. package/dist/molecules/layout/AppLayout.d.ts +2 -0
  200. package/dist/molecules/layout/AppLayout.d.ts.map +1 -0
  201. package/dist/molecules/layout/PageTemplate.d.ts +19 -0
  202. package/dist/molecules/layout/PageTemplate.d.ts.map +1 -0
  203. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts +24 -0
  204. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts.map +1 -0
  205. package/dist/molecules/layout/SectionHeader/index.d.ts +2 -0
  206. package/dist/molecules/layout/SectionHeader/index.d.ts.map +1 -0
  207. package/dist/molecules/layout/ShowcaseSection.d.ts +22 -0
  208. package/dist/molecules/layout/ShowcaseSection.d.ts.map +1 -0
  209. package/dist/molecules/layout/Sidebar.d.ts +6 -0
  210. package/dist/molecules/layout/Sidebar.d.ts.map +1 -0
  211. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +13 -0
  212. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -0
  213. package/dist/molecules/layout/SidebarButton/index.d.ts +2 -0
  214. package/dist/molecules/layout/SidebarButton/index.d.ts.map +1 -0
  215. package/dist/molecules/layout/SidebarContext.d.ts +12 -0
  216. package/dist/molecules/layout/SidebarContext.d.ts.map +1 -0
  217. package/dist/molecules/layout/index.d.ts +8 -0
  218. package/dist/molecules/layout/index.d.ts.map +1 -0
  219. package/dist/molecules/navigation/NavMenu.d.ts +20 -0
  220. package/dist/molecules/navigation/NavMenu.d.ts.map +1 -0
  221. package/dist/molecules/navigation/Pagination.d.ts +14 -0
  222. package/dist/molecules/navigation/Pagination.d.ts.map +1 -0
  223. package/dist/molecules/navigation/index.d.ts +3 -0
  224. package/dist/molecules/navigation/index.d.ts.map +1 -0
  225. package/dist/organisms/index.d.ts +2 -0
  226. package/dist/organisms/index.d.ts.map +1 -0
  227. package/dist/organisms/showcase/ComponentShowcasePage.d.ts +3 -0
  228. package/dist/organisms/showcase/ComponentShowcasePage.d.ts.map +1 -0
  229. package/dist/templates/AuthTemplate.d.ts +68 -0
  230. package/dist/templates/AuthTemplate.d.ts.map +1 -0
  231. package/dist/templates/ComponentShowcaseTemplate.d.ts +53 -0
  232. package/dist/templates/ComponentShowcaseTemplate.d.ts.map +1 -0
  233. package/dist/templates/DashboardTemplate.d.ts +62 -0
  234. package/dist/templates/DashboardTemplate.d.ts.map +1 -0
  235. package/dist/templates/DataTemplate.d.ts +78 -0
  236. package/dist/templates/DataTemplate.d.ts.map +1 -0
  237. package/dist/templates/admin/AdminCRUDTemplate.d.ts +105 -0
  238. package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -0
  239. package/dist/templates/admin/AdminDashboardTemplate.d.ts +89 -0
  240. package/dist/templates/admin/AdminDashboardTemplate.d.ts.map +1 -0
  241. package/dist/templates/admin/AdminDetailTemplate.d.ts +132 -0
  242. package/dist/templates/admin/AdminDetailTemplate.d.ts.map +1 -0
  243. package/dist/templates/admin/index.d.ts +4 -0
  244. package/dist/templates/admin/index.d.ts.map +1 -0
  245. package/dist/templates/factory.d.ts +28 -0
  246. package/dist/templates/factory.d.ts.map +1 -0
  247. package/dist/templates/index.d.ts +7 -0
  248. package/dist/templates/index.d.ts.map +1 -0
  249. package/package.json +118 -0
  250. package/src/App.css +42 -0
  251. package/src/App.tsx +54 -0
  252. package/src/__tests__/README.md +221 -0
  253. package/src/__tests__/atoms/hooks/simple-hooks.test.ts +44 -0
  254. package/src/__tests__/atoms/ui/button.test.tsx +68 -0
  255. package/src/__tests__/atoms/utils/simple.test.ts +18 -0
  256. package/src/__tests__/atoms/utils/utils.test.ts +77 -0
  257. package/src/__tests__/features/auth/simple-auth.test.tsx +40 -0
  258. package/src/__tests__/molecules/layout/simple-layout.test.tsx +81 -0
  259. package/src/__tests__/organisms/showcase/simple-showcase.test.tsx +167 -0
  260. package/src/__tests__/setup.ts +51 -0
  261. package/src/__tests__/utils.tsx +123 -0
  262. package/src/atoms/composed/Accordion/Accordion.tsx +271 -0
  263. package/src/atoms/composed/Accordion/index.ts +1 -0
  264. package/src/atoms/composed/Alert/Alert.tsx +132 -0
  265. package/src/atoms/composed/Alert/index.ts +1 -0
  266. package/src/atoms/composed/Breadcrumb/Breadcrumb.tsx +83 -0
  267. package/src/atoms/composed/Breadcrumb/index.ts +1 -0
  268. package/src/atoms/composed/Chart/Chart.tsx +425 -0
  269. package/src/atoms/composed/Chart/index.ts +2 -0
  270. package/src/atoms/composed/ColorSwatch/ColorSwatch.tsx +72 -0
  271. package/src/atoms/composed/ColorSwatch/index.ts +1 -0
  272. package/src/atoms/composed/DarkModeToggle.tsx +66 -0
  273. package/src/atoms/composed/DataBadge/DataBadge.tsx +81 -0
  274. package/src/atoms/composed/DataBadge/index.ts +1 -0
  275. package/src/atoms/composed/DataTable/DataTable.tsx +394 -0
  276. package/src/atoms/composed/DataTable/TableCellWithTooltip.tsx +41 -0
  277. package/src/atoms/composed/DataTable/index.ts +2 -0
  278. package/src/atoms/composed/DateTimePicker/DateTimePicker.tsx +611 -0
  279. package/src/atoms/composed/DateTimePicker/index.ts +2 -0
  280. package/src/atoms/composed/DetailedCard/DetailedCard.tsx +181 -0
  281. package/src/atoms/composed/DetailedCard/index.ts +2 -0
  282. package/src/atoms/composed/EmptyState/EmptyState.tsx +90 -0
  283. package/src/atoms/composed/EmptyState/index.ts +1 -0
  284. package/src/atoms/composed/FileUpload/FileUpload.tsx +477 -0
  285. package/src/atoms/composed/FileUpload/index.ts +2 -0
  286. package/src/atoms/composed/FormField/FormField.tsx +92 -0
  287. package/src/atoms/composed/FormField/index.ts +1 -0
  288. package/src/atoms/composed/GlobalSearch/GlobalSearch.tsx +37 -0
  289. package/src/atoms/composed/GlobalSearch/index.ts +1 -0
  290. package/src/atoms/composed/IconBadge/IconBadge.tsx +95 -0
  291. package/src/atoms/composed/IconBadge/index.ts +2 -0
  292. package/src/atoms/composed/Modal/Modal.tsx +223 -0
  293. package/src/atoms/composed/Modal/index.ts +2 -0
  294. package/src/atoms/composed/PaletteSwitcher.tsx +386 -0
  295. package/src/atoms/composed/ProgressBar/ProgressBar.tsx +116 -0
  296. package/src/atoms/composed/ProgressBar/index.ts +1 -0
  297. package/src/atoms/composed/StatCard/StatCard.tsx +219 -0
  298. package/src/atoms/composed/StatCard/index.ts +1 -0
  299. package/src/atoms/composed/StyleGuide.tsx +717 -0
  300. package/src/atoms/composed/Toast/Toast.tsx +219 -0
  301. package/src/atoms/composed/Toast/index.ts +1 -0
  302. package/src/atoms/composed/Tooltip/Tooltip.tsx +213 -0
  303. package/src/atoms/composed/Tooltip/index.ts +1 -0
  304. package/src/atoms/composed/UserAvatar/UserAvatar.tsx +139 -0
  305. package/src/atoms/composed/UserAvatar/index.ts +1 -0
  306. package/src/atoms/composed/UserMenu/UserMenu.tsx +16 -0
  307. package/src/atoms/composed/UserMenu/index.ts +1 -0
  308. package/src/atoms/composed/index.ts +29 -0
  309. package/src/atoms/hooks/useApi.ts +80 -0
  310. package/src/atoms/hooks/useHealth.ts +17 -0
  311. package/src/atoms/index.ts +13 -0
  312. package/src/atoms/services/api/client.ts +134 -0
  313. package/src/atoms/services/auth-service.ts +248 -0
  314. package/src/atoms/services/health.ts +15 -0
  315. package/src/atoms/services/index.ts +3 -0
  316. package/src/atoms/shared/config/constants.ts +17 -0
  317. package/src/atoms/shared/config/dashboard-sizes.ts +111 -0
  318. package/src/atoms/shared/config/environment.ts +10 -0
  319. package/src/atoms/shared/index.ts +4 -0
  320. package/src/atoms/shared/styles/color-palettes.css +566 -0
  321. package/src/atoms/types/auth.ts +62 -0
  322. package/src/atoms/types/generated.ts +1469 -0
  323. package/src/atoms/types/index.ts +4 -0
  324. package/src/atoms/types/loading.ts +28 -0
  325. package/src/atoms/ui/Badge.tsx +30 -0
  326. package/src/atoms/ui/ErrorBoundary.tsx +59 -0
  327. package/src/atoms/ui/Select.tsx +53 -0
  328. package/src/atoms/ui/Switch.tsx +42 -0
  329. package/src/atoms/ui/Tabs.tsx +118 -0
  330. package/src/atoms/ui/avatar.tsx +48 -0
  331. package/src/atoms/ui/button.tsx +70 -0
  332. package/src/atoms/ui/card.tsx +76 -0
  333. package/src/atoms/ui/dropdown-menu.tsx +199 -0
  334. package/src/atoms/ui/index.ts +39 -0
  335. package/src/atoms/ui/input.tsx +23 -0
  336. package/src/atoms/ui/label.tsx +23 -0
  337. package/src/atoms/ui/skeleton.tsx +13 -0
  338. package/src/atoms/ui/spinner.tsx +49 -0
  339. package/src/atoms/ui/table.tsx +116 -0
  340. package/src/atoms/utils/animations.ts +135 -0
  341. package/src/atoms/utils/tooltip-helpers.ts +140 -0
  342. package/src/atoms/utils/utils.ts +9 -0
  343. package/src/features/auth/components/LoginForm.tsx +168 -0
  344. package/src/features/auth/components/LogoutButton.tsx +19 -0
  345. package/src/features/auth/components/ProtectedRoute.tsx +60 -0
  346. package/src/features/auth/components/index.ts +4 -0
  347. package/src/features/auth/hooks/index.ts +2 -0
  348. package/src/features/auth/hooks/useAuth.tsx +205 -0
  349. package/src/features/auth/hooks/usePermissions.ts +35 -0
  350. package/src/features/auth/index.ts +2 -0
  351. package/src/features/index.ts +2 -0
  352. package/src/index.css +704 -0
  353. package/src/index.ts +13 -0
  354. package/src/main.tsx +48 -0
  355. package/src/molecules/.gitkeep +0 -0
  356. package/src/molecules/forms/FormGroup.tsx +75 -0
  357. package/src/molecules/forms/SearchInput.tsx +259 -0
  358. package/src/molecules/forms/index.ts +4 -0
  359. package/src/molecules/index.ts +4 -0
  360. package/src/molecules/layout/AppHeader/AppHeader.tsx +42 -0
  361. package/src/molecules/layout/AppHeader/index.ts +1 -0
  362. package/src/molecules/layout/AppLayout.tsx +29 -0
  363. package/src/molecules/layout/PageTemplate.tsx +87 -0
  364. package/src/molecules/layout/SectionHeader/SectionHeader.tsx +87 -0
  365. package/src/molecules/layout/SectionHeader/index.ts +1 -0
  366. package/src/molecules/layout/ShowcaseSection.tsx +57 -0
  367. package/src/molecules/layout/Sidebar.tsx +144 -0
  368. package/src/molecules/layout/SidebarButton/SidebarButton.tsx +99 -0
  369. package/src/molecules/layout/SidebarButton/index.ts +1 -0
  370. package/src/molecules/layout/SidebarContext.tsx +31 -0
  371. package/src/molecules/layout/index.ts +7 -0
  372. package/src/molecules/navigation/NavMenu.tsx +188 -0
  373. package/src/molecules/navigation/Pagination.tsx +172 -0
  374. package/src/molecules/navigation/index.ts +4 -0
  375. package/src/organisms/index.ts +5 -0
  376. package/src/organisms/showcase/ComponentShowcasePage.tsx +2496 -0
  377. package/src/organisms/showcase/index.ts +1 -0
  378. package/src/pages/AdminShowcase/AdminCRUDShowcase.tsx +242 -0
  379. package/src/pages/AdminShowcase/AdminDashboardShowcase.tsx +171 -0
  380. package/src/pages/AdminShowcase/AdminDetailShowcase.tsx +385 -0
  381. package/src/pages/AdminShowcase/index.tsx +3 -0
  382. package/src/pages/ComponentShowcase/BadgesShowcase.tsx +188 -0
  383. package/src/pages/ComponentShowcase/CardsShowcase.tsx +392 -0
  384. package/src/pages/ComponentShowcase/PalettesShowcase.tsx +207 -0
  385. package/src/pages/ComponentShowcase/StatesShowcase.tsx +485 -0
  386. package/src/pages/ComponentShowcase/TablesShowcase.tsx +134 -0
  387. package/src/pages/ComponentShowcase/TypographyShowcase.tsx +255 -0
  388. package/src/pages/ComponentShowcase/index.tsx +188 -0
  389. package/src/pages/index.ts +2 -0
  390. package/src/templates/AuthTemplate.tsx +216 -0
  391. package/src/templates/ComponentShowcaseTemplate.tsx +173 -0
  392. package/src/templates/DashboardTemplate.tsx +232 -0
  393. package/src/templates/DataTemplate.tsx +319 -0
  394. package/src/templates/admin/AdminCRUDTemplate.tsx +630 -0
  395. package/src/templates/admin/AdminDashboardTemplate.tsx +351 -0
  396. package/src/templates/admin/AdminDetailTemplate.tsx +563 -0
  397. package/src/templates/admin/index.ts +29 -0
  398. package/src/templates/factory.tsx +169 -0
  399. package/src/templates/index.ts +37 -0
  400. package/src/vite-env.d.ts +1 -0
@@ -0,0 +1,485 @@
1
+ import React, { useState } from 'react';
2
+ import { ComponentShowcaseTemplate } from '../../templates';
3
+ import { EmptyState, Modal, Tooltip } from '../../atoms/composed';
4
+ import { Skeleton, Spinner, Card } from '../../atoms/ui';
5
+ import { Button } from '../../atoms/ui/button';
6
+ import { Info, AlertCircle, CheckCircle, HelpCircle } from 'lucide-react';
7
+
8
+ export const StatesShowcase: React.FC = () => {
9
+ const [isDefaultModalOpen, setIsDefaultModalOpen] = useState(false);
10
+ const [isDestructiveModalOpen, setIsDestructiveModalOpen] = useState(false);
11
+ const [isSuccessModalOpen, setIsSuccessModalOpen] = useState(false);
12
+ const [isLargeModalOpen, setIsLargeModalOpen] = useState(false);
13
+
14
+ return (
15
+ <ComponentShowcaseTemplate
16
+ category={1}
17
+ title="States, Modals & Tooltips"
18
+ description="Loading indicators, skeleton states, empty state patterns, modal dialogs, and tooltips for enhanced user experiences."
19
+ primaryComponent={{
20
+ title: "Loading Components",
21
+ description: "Foundation loading components including skeleton placeholders and spinners for consistent loading experiences.",
22
+ badge: {
23
+ text: "UI Foundation",
24
+ variant: "category",
25
+ category: 1
26
+ },
27
+ children: (
28
+ <div className="space-y-6">
29
+ {/* Skeleton Components */}
30
+ <div className="space-y-4">
31
+ <h4 className="text-base font-medium">Skeleton Placeholders</h4>
32
+ <div className="grid md:grid-cols-2 gap-4">
33
+ <Card category={1} className="p-4">
34
+ <h5 className="font-medium mb-3">Content Placeholders</h5>
35
+ <div className="space-y-2">
36
+ <Skeleton className="h-4 w-3/4" />
37
+ <Skeleton className="h-4 w-1/2" />
38
+ <Skeleton className="h-4 w-2/3" />
39
+ </div>
40
+ </Card>
41
+ <Card category={1} className="p-4">
42
+ <h5 className="font-medium mb-3">Card Placeholders</h5>
43
+ <div className="flex items-center space-x-4">
44
+ <Skeleton className="h-12 w-12 rounded-full" />
45
+ <div className="space-y-2 flex-1">
46
+ <Skeleton className="h-4 w-full" />
47
+ <Skeleton className="h-4 w-4/5" />
48
+ </div>
49
+ </div>
50
+ </Card>
51
+ </div>
52
+ </div>
53
+
54
+ {/* Spinner Components */}
55
+ <div className="space-y-4">
56
+ <h4 className="text-base font-medium">Spinners</h4>
57
+ <div className="grid md:grid-cols-3 gap-4">
58
+ <Card category={1} className="p-4 text-center">
59
+ <h5 className="font-medium mb-3">Small</h5>
60
+ <Spinner size="sm" />
61
+ </Card>
62
+ <Card category={1} className="p-4 text-center">
63
+ <h5 className="font-medium mb-3">Medium</h5>
64
+ <Spinner size="md" />
65
+ </Card>
66
+ <Card category={1} className="p-4 text-center">
67
+ <h5 className="font-medium mb-3">Large</h5>
68
+ <Spinner size="lg" />
69
+ </Card>
70
+ </div>
71
+ </div>
72
+
73
+ {/* Inline Loading */}
74
+ <div className="space-y-4">
75
+ <h4 className="text-base font-medium">Inline Usage</h4>
76
+ <Card category={1} className="p-4">
77
+ <div className="flex items-center gap-2">
78
+ <Spinner size="sm" />
79
+ <span>Loading data...</span>
80
+ </div>
81
+ </Card>
82
+ </div>
83
+ </div>
84
+ )
85
+ }}
86
+ composedExamples={{
87
+ title: "Business State Components",
88
+ description: "Complete user experience patterns that compose loading primitives with business logic and messaging.",
89
+ sections: [
90
+ {
91
+ title: "EmptyState Component",
92
+ description: "Contextual empty state component with support for different scenarios, custom actions, and helpful messaging.",
93
+ badge: {
94
+ text: "Business Component",
95
+ variant: "category",
96
+ category: 2
97
+ },
98
+ category: 2,
99
+ children: (
100
+ <div className="grid md:grid-cols-2 gap-6">
101
+ <Card className="p-6" category={2}>
102
+ <EmptyState
103
+ variant="no-data"
104
+ title="No models found"
105
+ description="Get started by creating your first dbt model to see analytics and insights."
106
+ action={{
107
+ label: "Create Model",
108
+ onClick: () => alert('Create model!')
109
+ }}
110
+ />
111
+ </Card>
112
+ <Card className="p-6" category={2}>
113
+ <EmptyState
114
+ variant="no-results"
115
+ title="No search results"
116
+ description="Try adjusting your search terms or filters to find what you're looking for."
117
+ action={{
118
+ label: "Clear Filters",
119
+ onClick: () => alert('Clear filters!')
120
+ }}
121
+ secondaryAction={{
122
+ label: "Browse All",
123
+ onClick: () => alert('Browse all!')
124
+ }}
125
+ />
126
+ </Card>
127
+ <Card className="p-6" category={2}>
128
+ <EmptyState
129
+ variant="error"
130
+ title="Connection failed"
131
+ description="Unable to connect to the database. Please check your connection and try again."
132
+ action={{
133
+ label: "Retry",
134
+ onClick: () => alert('Retry!')
135
+ }}
136
+ />
137
+ </Card>
138
+ <Card className="p-6" category={2}>
139
+ <EmptyState
140
+ variant="loading"
141
+ title="Loading data"
142
+ description="Please wait while we fetch your analytics data."
143
+ />
144
+ </Card>
145
+ </div>
146
+ )
147
+ },
148
+ {
149
+ title: "Modal Component",
150
+ description: "Accessible modal dialogs with multiple variants, sizes, and interaction patterns for forms, confirmations, and content display.",
151
+ badge: {
152
+ text: "Business Component",
153
+ variant: "category",
154
+ category: 3
155
+ },
156
+ category: 3,
157
+ children: (
158
+ <div className="space-y-6">
159
+ {/* Modal Triggers */}
160
+ <div className="grid md:grid-cols-2 gap-4">
161
+ <Card className="p-4" category={3}>
162
+ <h5 className="font-medium mb-3">Modal Variants</h5>
163
+ <div className="flex flex-wrap gap-2">
164
+ <Button onClick={() => setIsDefaultModalOpen(true)}>
165
+ Default Modal
166
+ </Button>
167
+ <Button
168
+ variant="destructive"
169
+ onClick={() => setIsDestructiveModalOpen(true)}
170
+ >
171
+ Destructive Modal
172
+ </Button>
173
+ <Button
174
+ variant="outline"
175
+ onClick={() => setIsSuccessModalOpen(true)}
176
+ >
177
+ Success Modal
178
+ </Button>
179
+ </div>
180
+ </Card>
181
+
182
+ <Card className="p-4" category={3}>
183
+ <h5 className="font-medium mb-3">Modal Sizes</h5>
184
+ <div className="flex flex-wrap gap-2">
185
+ <Button
186
+ variant="outline"
187
+ onClick={() => setIsLargeModalOpen(true)}
188
+ >
189
+ Large Modal
190
+ </Button>
191
+ </div>
192
+ </Card>
193
+ </div>
194
+
195
+ {/* Modal Examples */}
196
+ <Modal
197
+ isOpen={isDefaultModalOpen}
198
+ onClose={() => setIsDefaultModalOpen(false)}
199
+ title="Create New Model"
200
+ footer={
201
+ <>
202
+ <Button variant="outline" onClick={() => setIsDefaultModalOpen(false)}>
203
+ Cancel
204
+ </Button>
205
+ <Button onClick={() => setIsDefaultModalOpen(false)}>
206
+ Create Model
207
+ </Button>
208
+ </>
209
+ }
210
+ >
211
+ <div className="space-y-4">
212
+ <p className="text-sm text-muted-foreground">
213
+ Configure your new dbt model with the following settings.
214
+ </p>
215
+ <div className="space-y-2">
216
+ <label className="text-sm font-medium">Model Name</label>
217
+ <input
218
+ type="text"
219
+ placeholder="customer_analytics"
220
+ className="w-full px-3 py-2 border border-border rounded-md"
221
+ />
222
+ </div>
223
+ <div className="space-y-2">
224
+ <label className="text-sm font-medium">Description</label>
225
+ <textarea
226
+ placeholder="Describe your model..."
227
+ className="w-full px-3 py-2 border border-border rounded-md"
228
+ rows={3}
229
+ />
230
+ </div>
231
+ </div>
232
+ </Modal>
233
+
234
+ <Modal
235
+ isOpen={isDestructiveModalOpen}
236
+ onClose={() => setIsDestructiveModalOpen(false)}
237
+ title="Delete Model"
238
+ variant="destructive"
239
+ footer={
240
+ <>
241
+ <Button variant="outline" onClick={() => setIsDestructiveModalOpen(false)}>
242
+ Cancel
243
+ </Button>
244
+ <Button variant="destructive" onClick={() => setIsDestructiveModalOpen(false)}>
245
+ Delete Model
246
+ </Button>
247
+ </>
248
+ }
249
+ >
250
+ <div className="space-y-4">
251
+ <div className="flex items-start gap-3">
252
+ <AlertCircle className="w-5 h-5 text-status-error flex-shrink-0 mt-0.5" />
253
+ <div>
254
+ <p className="text-sm">
255
+ Are you sure you want to delete this model? This action cannot be undone.
256
+ </p>
257
+ <p className="text-sm text-muted-foreground mt-2">
258
+ All associated data and tests will be permanently removed.
259
+ </p>
260
+ </div>
261
+ </div>
262
+ </div>
263
+ </Modal>
264
+
265
+ <Modal
266
+ isOpen={isSuccessModalOpen}
267
+ onClose={() => setIsSuccessModalOpen(false)}
268
+ title="Model Created Successfully"
269
+ variant="success"
270
+ footer={
271
+ <Button onClick={() => setIsSuccessModalOpen(false)}>
272
+ View Model
273
+ </Button>
274
+ }
275
+ >
276
+ <div className="flex items-start gap-3">
277
+ <CheckCircle className="w-5 h-5 text-status-success flex-shrink-0 mt-0.5" />
278
+ <div>
279
+ <p className="text-sm">
280
+ Your model has been created and is now available in the project.
281
+ </p>
282
+ <p className="text-sm text-muted-foreground mt-2">
283
+ Model ID: <code className="bg-muted px-1 rounded">mdl_1234567890</code>
284
+ </p>
285
+ </div>
286
+ </div>
287
+ </Modal>
288
+
289
+ <Modal
290
+ isOpen={isLargeModalOpen}
291
+ onClose={() => setIsLargeModalOpen(false)}
292
+ title="Model Documentation"
293
+ size="xl"
294
+ footer={
295
+ <Button onClick={() => setIsLargeModalOpen(false)}>
296
+ Close
297
+ </Button>
298
+ }
299
+ >
300
+ <div className="space-y-4">
301
+ <div>
302
+ <h4 className="font-medium mb-2">Overview</h4>
303
+ <p className="text-sm text-muted-foreground">
304
+ This model aggregates customer data from multiple sources to provide comprehensive analytics.
305
+ </p>
306
+ </div>
307
+ <div>
308
+ <h4 className="font-medium mb-2">Schema</h4>
309
+ <div className="border border-border rounded p-3 bg-muted/30">
310
+ <code className="text-xs">
311
+ {`CREATE TABLE customer_analytics AS
312
+ SELECT
313
+ customer_id,
314
+ first_purchase_date,
315
+ total_purchases,
316
+ lifetime_value
317
+ FROM staging.customers`}
318
+ </code>
319
+ </div>
320
+ </div>
321
+ <div>
322
+ <h4 className="font-medium mb-2">Dependencies</h4>
323
+ <ul className="list-disc list-inside text-sm text-muted-foreground space-y-1">
324
+ <li>staging.customers</li>
325
+ <li>staging.orders</li>
326
+ <li>staging.products</li>
327
+ </ul>
328
+ </div>
329
+ </div>
330
+ </Modal>
331
+ </div>
332
+ )
333
+ },
334
+ {
335
+ title: "Tooltip Component",
336
+ description: "Contextual tooltips with smart positioning, multiple variants, and customizable triggers for enhanced user guidance.",
337
+ badge: {
338
+ text: "Business Component",
339
+ variant: "category",
340
+ category: 4
341
+ },
342
+ category: 4,
343
+ children: (
344
+ <div className="space-y-6">
345
+ {/* Tooltip Examples */}
346
+ <Card className="p-6" category={4}>
347
+ <h5 className="font-medium mb-4">Tooltip Positions</h5>
348
+ <div className="flex flex-wrap items-center gap-8 justify-center">
349
+ <Tooltip content="Top tooltip" position="top">
350
+ <Button variant="outline" size="sm">Top</Button>
351
+ </Tooltip>
352
+ <Tooltip content="Bottom tooltip" position="bottom">
353
+ <Button variant="outline" size="sm">Bottom</Button>
354
+ </Tooltip>
355
+ <Tooltip content="Left tooltip" position="left">
356
+ <Button variant="outline" size="sm">Left</Button>
357
+ </Tooltip>
358
+ <Tooltip content="Right tooltip" position="right">
359
+ <Button variant="outline" size="sm">Right</Button>
360
+ </Tooltip>
361
+ </div>
362
+ </Card>
363
+
364
+ <Card className="p-6" category={4}>
365
+ <h5 className="font-medium mb-4">Tooltip Variants</h5>
366
+ <div className="flex flex-wrap items-center gap-4">
367
+ <Tooltip content="Default tooltip with helpful information">
368
+ <Button variant="ghost" size="icon">
369
+ <HelpCircle className="w-4 h-4" />
370
+ </Button>
371
+ </Tooltip>
372
+
373
+ <Tooltip
374
+ content="This is an informational tooltip"
375
+ variant="info"
376
+ >
377
+ <div className="inline-flex items-center gap-1 text-sm">
378
+ <Info className="w-4 h-4 text-status-info" />
379
+ <span>Info Tooltip</span>
380
+ </div>
381
+ </Tooltip>
382
+
383
+ <Tooltip
384
+ content="Warning: This action may affect other models"
385
+ variant="warning"
386
+ >
387
+ <div className="inline-flex items-center gap-1 text-sm">
388
+ <AlertCircle className="w-4 h-4 text-status-warning" />
389
+ <span>Warning Tooltip</span>
390
+ </div>
391
+ </Tooltip>
392
+
393
+ <Tooltip
394
+ content="Error: Invalid configuration detected"
395
+ variant="error"
396
+ >
397
+ <div className="inline-flex items-center gap-1 text-sm">
398
+ <AlertCircle className="w-4 h-4 text-status-error" />
399
+ <span>Error Tooltip</span>
400
+ </div>
401
+ </Tooltip>
402
+ </div>
403
+ </Card>
404
+
405
+ <Card className="p-6" category={4}>
406
+ <h5 className="font-medium mb-4">Tooltip Sizes & Triggers</h5>
407
+ <div className="space-y-4">
408
+ <div className="flex flex-wrap items-center gap-4">
409
+ <Tooltip content="Small" size="sm">
410
+ <Button variant="outline" size="sm">Small Tooltip</Button>
411
+ </Tooltip>
412
+ <Tooltip content="Medium tooltip with more content" size="md">
413
+ <Button variant="outline" size="sm">Medium Tooltip</Button>
414
+ </Tooltip>
415
+ <Tooltip
416
+ content="Large tooltip that can contain much more detailed information and spans multiple lines when needed"
417
+ size="lg"
418
+ >
419
+ <Button variant="outline" size="sm">Large Tooltip</Button>
420
+ </Tooltip>
421
+ </div>
422
+
423
+ <div className="flex flex-wrap items-center gap-4">
424
+ <Tooltip content="Hover only" trigger="hover">
425
+ <Button variant="outline" size="sm">Hover Only</Button>
426
+ </Tooltip>
427
+ <Tooltip content="Focus only" trigger="focus">
428
+ <Button variant="outline" size="sm">Focus Only</Button>
429
+ </Tooltip>
430
+ <Tooltip content="Hover & Focus" trigger="both">
431
+ <Button variant="outline" size="sm">Both Triggers</Button>
432
+ </Tooltip>
433
+ </div>
434
+ </div>
435
+ </Card>
436
+
437
+ <Card className="p-6" category={4}>
438
+ <h5 className="font-medium mb-4">Rich Content Tooltips</h5>
439
+ <div className="flex flex-wrap items-center gap-4">
440
+ <Tooltip
441
+ content={
442
+ <div className="space-y-2">
443
+ <div className="font-medium">Model Performance</div>
444
+ <div className="text-xs space-y-1">
445
+ <div>Success Rate: 99.2%</div>
446
+ <div>Avg Runtime: 2.4s</div>
447
+ <div>Last Run: 5 min ago</div>
448
+ </div>
449
+ </div>
450
+ }
451
+ size="lg"
452
+ >
453
+ <Button variant="outline">View Stats</Button>
454
+ </Tooltip>
455
+
456
+ <Tooltip
457
+ content={
458
+ <div className="space-y-2">
459
+ <div className="flex items-center gap-2">
460
+ <CheckCircle className="w-4 h-4 text-status-success" />
461
+ <span className="font-medium">All Tests Passing</span>
462
+ </div>
463
+ <div className="text-xs text-muted-foreground">
464
+ Click to view detailed test results
465
+ </div>
466
+ </div>
467
+ }
468
+ size="lg"
469
+ delay={100}
470
+ >
471
+ <Button variant="outline" className="text-status-success">
472
+ <CheckCircle className="w-4 h-4 mr-2" />
473
+ Tests Passed
474
+ </Button>
475
+ </Tooltip>
476
+ </div>
477
+ </Card>
478
+ </div>
479
+ )
480
+ }
481
+ ]
482
+ }}
483
+ />
484
+ );
485
+ };
@@ -0,0 +1,134 @@
1
+ import React from 'react';
2
+ import { ComponentShowcaseTemplate } from '../../templates';
3
+ import { DataTable } from '../../atoms/composed';
4
+ import { Card } from '../../atoms/ui';
5
+
6
+ interface SampleDataItem extends Record<string, unknown> {
7
+ id: number;
8
+ name: string;
9
+ status: 'success' | 'warning' | 'error';
10
+ category: string;
11
+ runs: number;
12
+ }
13
+
14
+ export const TablesShowcase: React.FC = () => {
15
+ const sampleData: SampleDataItem[] = [
16
+ { id: 1, name: 'Customer Analysis', status: 'success', category: 'Analytics', runs: 24 },
17
+ { id: 2, name: 'Revenue Model', status: 'warning', category: 'Finance', runs: 18 },
18
+ { id: 3, name: 'User Behavior', status: 'error', category: 'Product', runs: 31 },
19
+ { id: 4, name: 'Sales Forecast', status: 'success', category: 'Sales', runs: 12 }
20
+ ];
21
+
22
+ const tableColumns = [
23
+ { key: 'name', header: 'Model Name' },
24
+ { key: 'status', header: 'Status', type: 'status' as const },
25
+ { key: 'category', header: 'Category', type: 'category' as const },
26
+ { key: 'runs', header: 'Runs' }
27
+ ];
28
+
29
+ return (
30
+ <ComponentShowcaseTemplate
31
+ category={1}
32
+ title="Tables"
33
+ description="Flexible data tables with sorting, filtering, and pagination for displaying structured data."
34
+ primaryComponent={{
35
+ title: "Table Component",
36
+ description: "Base table component providing semantic HTML structure, consistent styling, and responsive behavior.",
37
+ badge: {
38
+ text: "UI Foundation",
39
+ variant: "category",
40
+ category: 1
41
+ },
42
+ children: (
43
+ <div className="space-y-6">
44
+ {/* Basic Table */}
45
+ <div className="space-y-4">
46
+ <h4 className="text-base font-medium">Basic Table</h4>
47
+ <Card category={1} className="p-4">
48
+ <table className="w-full">
49
+ <thead>
50
+ <tr className="border-b">
51
+ <th className="text-left p-2">Name</th>
52
+ <th className="text-left p-2">Status</th>
53
+ <th className="text-left p-2">Category</th>
54
+ <th className="text-right p-2">Runs</th>
55
+ </tr>
56
+ </thead>
57
+ <tbody>
58
+ <tr className="border-b">
59
+ <td className="p-2 font-medium">Customer Analysis</td>
60
+ <td className="p-2">Success</td>
61
+ <td className="p-2">Analytics</td>
62
+ <td className="p-2 text-right">24</td>
63
+ </tr>
64
+ <tr className="border-b">
65
+ <td className="p-2 font-medium">Revenue Model</td>
66
+ <td className="p-2">Warning</td>
67
+ <td className="p-2">Finance</td>
68
+ <td className="p-2 text-right">18</td>
69
+ </tr>
70
+ </tbody>
71
+ </table>
72
+ </Card>
73
+ </div>
74
+
75
+ {/* Compact Table */}
76
+ <div className="space-y-4">
77
+ <h4 className="text-base font-medium">Compact Styling</h4>
78
+ <Card category={1} className="p-4">
79
+ <table className="w-full text-sm">
80
+ <thead>
81
+ <tr className="border-b">
82
+ <th className="text-left p-1">Name</th>
83
+ <th className="text-left p-1">Status</th>
84
+ <th className="text-right p-1">Runs</th>
85
+ </tr>
86
+ </thead>
87
+ <tbody>
88
+ <tr className="border-b">
89
+ <td className="p-1 font-medium">User Behavior</td>
90
+ <td className="p-1">Error</td>
91
+ <td className="p-1 text-right">31</td>
92
+ </tr>
93
+ <tr>
94
+ <td className="p-1 font-medium">Sales Forecast</td>
95
+ <td className="p-1">Success</td>
96
+ <td className="p-1 text-right">12</td>
97
+ </tr>
98
+ </tbody>
99
+ </table>
100
+ </Card>
101
+ </div>
102
+ </div>
103
+ )
104
+ }}
105
+ composedExamples={{
106
+ title: "Business Table Components",
107
+ description: "Enhanced table components with advanced functionality for data interfaces and analytics applications.",
108
+ sections: [
109
+ {
110
+ title: "DataTable Component",
111
+ description: "Feature-rich table component with built-in search, sorting, pagination, and status indicators for data interfaces.",
112
+ badge: {
113
+ text: "Business Component",
114
+ variant: "category",
115
+ category: 2
116
+ },
117
+ category: 2,
118
+ children: (
119
+ <Card className="p-6" category={2}>
120
+ <DataTable
121
+ data={sampleData}
122
+ columns={tableColumns}
123
+ searchPlaceholder="Search models..."
124
+ onRowClick={(item) => alert(`Clicked: ${item.name}`)}
125
+ hover={true}
126
+ />
127
+ </Card>
128
+ )
129
+ }
130
+ ]
131
+ }}
132
+ />
133
+ );
134
+ };