@pattern-stack/frontend-patterns 0.1.2 → 0.2.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +17 -2
  3. package/cli/commands/generate-hooks.ts +316 -0
  4. package/cli/commands/init.ts +33 -0
  5. package/cli/commands/scaffold.ts +224 -0
  6. package/cli/index.ts +122 -0
  7. package/cli/src/codegen/openapi/client-generator.js +659 -0
  8. package/cli/src/codegen/openapi/hook-generator.js +725 -0
  9. package/cli/src/codegen/openapi/parser.js +274 -0
  10. package/cli/src/codegen/openapi/type-generator.js +329 -0
  11. package/dist/atoms/components/core/Avatar/Avatar.d.ts +41 -0
  12. package/dist/atoms/components/core/Avatar/Avatar.d.ts.map +1 -0
  13. package/dist/atoms/components/core/Avatar/index.d.ts +2 -0
  14. package/dist/atoms/components/core/Avatar/index.d.ts.map +1 -0
  15. package/dist/atoms/components/core/Badge/Badge.d.ts +38 -0
  16. package/dist/atoms/components/core/Badge/Badge.d.ts.map +1 -0
  17. package/dist/atoms/components/core/Badge/index.d.ts +2 -0
  18. package/dist/atoms/components/core/Badge/index.d.ts.map +1 -0
  19. package/dist/atoms/components/core/Button/Button.d.ts +28 -0
  20. package/dist/atoms/components/core/Button/Button.d.ts.map +1 -0
  21. package/dist/atoms/components/core/Button/index.d.ts +3 -0
  22. package/dist/atoms/components/core/Button/index.d.ts.map +1 -0
  23. package/dist/atoms/components/core/Card/Card.d.ts +41 -0
  24. package/dist/atoms/components/core/Card/Card.d.ts.map +1 -0
  25. package/dist/atoms/components/core/Card/index.d.ts +3 -0
  26. package/dist/atoms/components/core/Card/index.d.ts.map +1 -0
  27. package/dist/atoms/components/core/Checkbox/Checkbox.d.ts +28 -0
  28. package/dist/atoms/components/core/Checkbox/Checkbox.d.ts.map +1 -0
  29. package/dist/atoms/components/core/Checkbox/index.d.ts +3 -0
  30. package/dist/atoms/components/core/Checkbox/index.d.ts.map +1 -0
  31. package/dist/atoms/components/core/Input/Input.d.ts +37 -0
  32. package/dist/atoms/components/core/Input/Input.d.ts.map +1 -0
  33. package/dist/atoms/components/core/Input/index.d.ts +3 -0
  34. package/dist/atoms/components/core/Input/index.d.ts.map +1 -0
  35. package/dist/atoms/components/core/Label/Label.d.ts +22 -0
  36. package/dist/atoms/components/core/Label/Label.d.ts.map +1 -0
  37. package/dist/atoms/components/core/Label/index.d.ts +3 -0
  38. package/dist/atoms/components/core/Label/index.d.ts.map +1 -0
  39. package/dist/atoms/components/core/Select/Select.d.ts +42 -0
  40. package/dist/atoms/components/core/Select/Select.d.ts.map +1 -0
  41. package/dist/atoms/components/core/Select/index.d.ts +3 -0
  42. package/dist/atoms/components/core/Select/index.d.ts.map +1 -0
  43. package/dist/atoms/components/core/Spinner/Spinner.d.ts +25 -0
  44. package/dist/atoms/components/core/Spinner/Spinner.d.ts.map +1 -0
  45. package/dist/atoms/components/core/Spinner/index.d.ts +3 -0
  46. package/dist/atoms/components/core/Spinner/index.d.ts.map +1 -0
  47. package/dist/atoms/components/core/Switch/Switch.d.ts +35 -0
  48. package/dist/atoms/components/core/Switch/Switch.d.ts.map +1 -0
  49. package/dist/atoms/components/core/Switch/index.d.ts +2 -0
  50. package/dist/atoms/components/core/Switch/index.d.ts.map +1 -0
  51. package/dist/atoms/components/core/index.d.ts +11 -0
  52. package/dist/atoms/components/core/index.d.ts.map +1 -0
  53. package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts +4 -0
  54. package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts.map +1 -0
  55. package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts +9 -0
  56. package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts.map +1 -0
  57. package/dist/atoms/components/data/ActivityFeed/index.d.ts +4 -0
  58. package/dist/atoms/components/data/ActivityFeed/index.d.ts.map +1 -0
  59. package/dist/atoms/components/data/ActivityFeed/types.d.ts +26 -0
  60. package/dist/atoms/components/data/ActivityFeed/types.d.ts.map +1 -0
  61. package/dist/atoms/components/data/ActivityFeed/utils.d.ts +5 -0
  62. package/dist/atoms/components/data/ActivityFeed/utils.d.ts.map +1 -0
  63. package/dist/atoms/components/data/Chart/Chart.d.ts +84 -0
  64. package/dist/atoms/components/data/Chart/Chart.d.ts.map +1 -0
  65. package/dist/atoms/components/data/Chart/index.d.ts +3 -0
  66. package/dist/atoms/components/data/Chart/index.d.ts.map +1 -0
  67. package/dist/atoms/components/data/DataBadge/DataBadge.d.ts +18 -0
  68. package/dist/atoms/components/data/DataBadge/DataBadge.d.ts.map +1 -0
  69. package/dist/atoms/components/data/DataBadge/index.d.ts +2 -0
  70. package/dist/atoms/components/data/DataBadge/index.d.ts.map +1 -0
  71. package/dist/atoms/components/data/DataTable/DataTable.d.ts +5 -0
  72. package/dist/atoms/components/data/DataTable/DataTable.d.ts.map +1 -0
  73. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts +51 -0
  74. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts.map +1 -0
  75. package/dist/atoms/{composed → components/data}/DataTable/TableCellWithTooltip.d.ts +1 -1
  76. package/dist/atoms/components/data/DataTable/TableCellWithTooltip.d.ts.map +1 -0
  77. package/dist/atoms/components/data/DataTable/index.d.ts +3 -0
  78. package/dist/atoms/components/data/DataTable/index.d.ts.map +1 -0
  79. package/dist/atoms/{composed → components/data}/DetailedCard/DetailedCard.d.ts +4 -4
  80. package/dist/atoms/components/data/DetailedCard/DetailedCard.d.ts.map +1 -0
  81. package/dist/atoms/components/data/DetailedCard/index.d.ts +3 -0
  82. package/dist/atoms/components/data/DetailedCard/index.d.ts.map +1 -0
  83. package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts +24 -0
  84. package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts.map +1 -0
  85. package/dist/atoms/components/data/EntityIcon/index.d.ts +2 -0
  86. package/dist/atoms/components/data/EntityIcon/index.d.ts.map +1 -0
  87. package/dist/atoms/components/data/IconBadge/IconBadge.d.ts +17 -0
  88. package/dist/atoms/components/data/IconBadge/IconBadge.d.ts.map +1 -0
  89. package/dist/atoms/components/data/IconBadge/index.d.ts +3 -0
  90. package/dist/atoms/components/data/IconBadge/index.d.ts.map +1 -0
  91. package/dist/atoms/components/data/ListCard/ListCard.d.ts +32 -0
  92. package/dist/atoms/components/data/ListCard/ListCard.d.ts.map +1 -0
  93. package/dist/atoms/components/data/ListCard/index.d.ts +2 -0
  94. package/dist/atoms/components/data/ListCard/index.d.ts.map +1 -0
  95. package/dist/atoms/{composed → components/data}/ProgressBar/ProgressBar.d.ts +5 -5
  96. package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts.map +1 -0
  97. package/dist/atoms/components/data/ProgressBar/index.d.ts +2 -0
  98. package/dist/atoms/components/data/ProgressBar/index.d.ts.map +1 -0
  99. package/dist/atoms/{composed → components/data}/StatCard/StatCard.d.ts +3 -3
  100. package/dist/atoms/components/data/StatCard/StatCard.d.ts.map +1 -0
  101. package/dist/atoms/components/data/StatCard/index.d.ts +2 -0
  102. package/dist/atoms/components/data/StatCard/index.d.ts.map +1 -0
  103. package/dist/atoms/components/data/Table/Table.d.ts +41 -0
  104. package/dist/atoms/components/data/Table/Table.d.ts.map +1 -0
  105. package/dist/atoms/components/data/Table/index.d.ts +2 -0
  106. package/dist/atoms/components/data/Table/index.d.ts.map +1 -0
  107. package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts +26 -0
  108. package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts.map +1 -0
  109. package/dist/atoms/components/data/TruncatedText/index.d.ts +2 -0
  110. package/dist/atoms/components/data/TruncatedText/index.d.ts.map +1 -0
  111. package/dist/atoms/components/data/index.d.ts +13 -0
  112. package/dist/atoms/components/data/index.d.ts.map +1 -0
  113. package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts +19 -0
  114. package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts.map +1 -0
  115. package/dist/atoms/components/domain/SalesPanel/index.d.ts +2 -0
  116. package/dist/atoms/components/domain/SalesPanel/index.d.ts.map +1 -0
  117. package/dist/atoms/components/domain/SalesPanel/mockSalesData.d.ts +63 -0
  118. package/dist/atoms/components/domain/SalesPanel/mockSalesData.d.ts.map +1 -0
  119. package/dist/atoms/components/domain/index.d.ts +2 -0
  120. package/dist/atoms/components/domain/index.d.ts.map +1 -0
  121. package/dist/atoms/{composed → components/feedback}/Alert/Alert.d.ts +4 -4
  122. package/dist/atoms/components/feedback/Alert/Alert.d.ts.map +1 -0
  123. package/dist/atoms/components/feedback/Alert/index.d.ts +2 -0
  124. package/dist/atoms/components/feedback/Alert/index.d.ts.map +1 -0
  125. package/dist/atoms/{composed → components/feedback}/EmptyState/EmptyState.d.ts +3 -3
  126. package/dist/atoms/components/feedback/EmptyState/EmptyState.d.ts.map +1 -0
  127. package/dist/atoms/components/feedback/EmptyState/index.d.ts +2 -0
  128. package/dist/atoms/components/feedback/EmptyState/index.d.ts.map +1 -0
  129. package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts +61 -0
  130. package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
  131. package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts +2 -0
  132. package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts.map +1 -0
  133. package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts +67 -0
  134. package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts.map +1 -0
  135. package/dist/atoms/components/feedback/Skeleton/index.d.ts +2 -0
  136. package/dist/atoms/components/feedback/Skeleton/index.d.ts.map +1 -0
  137. package/dist/atoms/{composed → components/feedback}/Toast/Toast.d.ts +4 -4
  138. package/dist/atoms/components/feedback/Toast/Toast.d.ts.map +1 -0
  139. package/dist/atoms/{composed → components/feedback}/Toast/index.d.ts +1 -1
  140. package/dist/atoms/components/feedback/Toast/index.d.ts.map +1 -0
  141. package/dist/atoms/components/feedback/index.d.ts +6 -0
  142. package/dist/atoms/components/feedback/index.d.ts.map +1 -0
  143. package/dist/atoms/{composed → components/forms}/DateTimePicker/DateTimePicker.d.ts +6 -6
  144. package/dist/atoms/components/forms/DateTimePicker/DateTimePicker.d.ts.map +1 -0
  145. package/dist/atoms/components/forms/DateTimePicker/index.d.ts +3 -0
  146. package/dist/atoms/components/forms/DateTimePicker/index.d.ts.map +1 -0
  147. package/dist/atoms/{composed → components/forms}/FileUpload/FileUpload.d.ts +3 -3
  148. package/dist/atoms/components/forms/FileUpload/FileUpload.d.ts.map +1 -0
  149. package/dist/atoms/components/forms/FileUpload/index.d.ts +3 -0
  150. package/dist/atoms/components/forms/FileUpload/index.d.ts.map +1 -0
  151. package/dist/atoms/{composed → components/forms}/FormField/FormField.d.ts +2 -2
  152. package/dist/atoms/components/forms/FormField/FormField.d.ts.map +1 -0
  153. package/dist/atoms/components/forms/FormField/index.d.ts +2 -0
  154. package/dist/atoms/components/forms/FormField/index.d.ts.map +1 -0
  155. package/dist/atoms/components/forms/index.d.ts +4 -0
  156. package/dist/atoms/components/forms/index.d.ts.map +1 -0
  157. package/dist/atoms/components/index.d.ts +10 -0
  158. package/dist/atoms/components/index.d.ts.map +1 -0
  159. package/dist/atoms/{composed → components/layout}/Accordion/Accordion.d.ts +3 -3
  160. package/dist/atoms/components/layout/Accordion/Accordion.d.ts.map +1 -0
  161. package/dist/atoms/components/layout/Accordion/index.d.ts +2 -0
  162. package/dist/atoms/components/layout/Accordion/index.d.ts.map +1 -0
  163. package/dist/atoms/{composed → components/layout}/Breadcrumb/Breadcrumb.d.ts +2 -3
  164. package/dist/atoms/components/layout/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  165. package/dist/atoms/components/layout/Breadcrumb/index.d.ts +2 -0
  166. package/dist/atoms/components/layout/Breadcrumb/index.d.ts.map +1 -0
  167. package/dist/atoms/components/layout/Dialog/Dialog.d.ts +45 -0
  168. package/dist/atoms/components/layout/Dialog/Dialog.d.ts.map +1 -0
  169. package/dist/atoms/components/layout/Dialog/index.d.ts +3 -0
  170. package/dist/atoms/components/layout/Dialog/index.d.ts.map +1 -0
  171. package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts +40 -0
  172. package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts.map +1 -0
  173. package/dist/atoms/components/layout/Dropdown/index.d.ts +3 -0
  174. package/dist/atoms/components/layout/Dropdown/index.d.ts.map +1 -0
  175. package/dist/atoms/components/layout/Modal/Modal.d.ts +18 -0
  176. package/dist/atoms/components/layout/Modal/Modal.d.ts.map +1 -0
  177. package/dist/atoms/components/layout/Modal/index.d.ts +3 -0
  178. package/dist/atoms/components/layout/Modal/index.d.ts.map +1 -0
  179. package/dist/atoms/components/layout/Tabs/Tabs.d.ts +46 -0
  180. package/dist/atoms/components/layout/Tabs/Tabs.d.ts.map +1 -0
  181. package/dist/atoms/components/layout/Tabs/index.d.ts +2 -0
  182. package/dist/atoms/components/layout/Tabs/index.d.ts.map +1 -0
  183. package/dist/atoms/{composed → components/layout}/Tooltip/Tooltip.d.ts +6 -6
  184. package/dist/atoms/components/layout/Tooltip/Tooltip.d.ts.map +1 -0
  185. package/dist/atoms/components/layout/Tooltip/index.d.ts +2 -0
  186. package/dist/atoms/components/layout/Tooltip/index.d.ts.map +1 -0
  187. package/dist/atoms/components/layout/index.d.ts +8 -0
  188. package/dist/atoms/components/layout/index.d.ts.map +1 -0
  189. package/dist/atoms/{composed → components/navigation}/GlobalSearch/GlobalSearch.d.ts +2 -3
  190. package/dist/atoms/components/navigation/GlobalSearch/GlobalSearch.d.ts.map +1 -0
  191. package/dist/atoms/components/navigation/GlobalSearch/index.d.ts +2 -0
  192. package/dist/atoms/components/navigation/GlobalSearch/index.d.ts.map +1 -0
  193. package/dist/atoms/components/navigation/index.d.ts +2 -0
  194. package/dist/atoms/components/navigation/index.d.ts.map +1 -0
  195. package/dist/atoms/{composed → components/theme}/ColorSwatch/ColorSwatch.d.ts +2 -2
  196. package/dist/atoms/components/theme/ColorSwatch/ColorSwatch.d.ts.map +1 -0
  197. package/dist/atoms/components/theme/ColorSwatch/index.d.ts +2 -0
  198. package/dist/atoms/components/theme/ColorSwatch/index.d.ts.map +1 -0
  199. package/dist/atoms/components/theme/DarkModeToggle.d.ts.map +1 -0
  200. package/dist/atoms/{composed → components/theme}/PaletteSwitcher.d.ts +1 -1
  201. package/dist/atoms/components/theme/PaletteSwitcher.d.ts.map +1 -0
  202. package/dist/atoms/components/theme/StyleGuide.d.ts +3 -0
  203. package/dist/atoms/components/theme/StyleGuide.d.ts.map +1 -0
  204. package/dist/atoms/components/theme/index.d.ts +5 -0
  205. package/dist/atoms/components/theme/index.d.ts.map +1 -0
  206. package/dist/atoms/{composed → components/user}/UserAvatar/UserAvatar.d.ts +2 -3
  207. package/dist/atoms/components/user/UserAvatar/UserAvatar.d.ts.map +1 -0
  208. package/dist/atoms/components/user/UserAvatar/index.d.ts +2 -0
  209. package/dist/atoms/components/user/UserAvatar/index.d.ts.map +1 -0
  210. package/dist/atoms/{composed → components/user}/UserMenu/UserMenu.d.ts +2 -3
  211. package/dist/atoms/components/user/UserMenu/UserMenu.d.ts.map +1 -0
  212. package/dist/atoms/components/user/UserMenu/index.d.ts +2 -0
  213. package/dist/atoms/components/user/UserMenu/index.d.ts.map +1 -0
  214. package/dist/atoms/components/user/index.d.ts +3 -0
  215. package/dist/atoms/components/user/index.d.ts.map +1 -0
  216. package/dist/atoms/config/responsive.d.ts +147 -0
  217. package/dist/atoms/config/responsive.d.ts.map +1 -0
  218. package/dist/atoms/hooks/index.d.ts +5 -0
  219. package/dist/atoms/hooks/index.d.ts.map +1 -0
  220. package/dist/atoms/hooks/use-toast.d.ts +16 -0
  221. package/dist/atoms/hooks/use-toast.d.ts.map +1 -0
  222. package/dist/atoms/hooks/useApi.d.ts +2 -2
  223. package/dist/atoms/hooks/useApi.d.ts.map +1 -1
  224. package/dist/atoms/hooks/useResponsive.d.ts +42 -0
  225. package/dist/atoms/hooks/useResponsive.d.ts.map +1 -0
  226. package/dist/atoms/index.d.ts +6 -8
  227. package/dist/atoms/index.d.ts.map +1 -1
  228. package/dist/atoms/primitives/Badge.d.ts +10 -0
  229. package/dist/atoms/primitives/Badge.d.ts.map +1 -0
  230. package/dist/atoms/{ui → primitives}/ErrorBoundary.d.ts +3 -3
  231. package/dist/atoms/primitives/ErrorBoundary.d.ts.map +1 -0
  232. package/dist/atoms/primitives/Select.d.ts +30 -0
  233. package/dist/atoms/primitives/Select.d.ts.map +1 -0
  234. package/dist/atoms/primitives/Switch.d.ts +10 -0
  235. package/dist/atoms/primitives/Switch.d.ts.map +1 -0
  236. package/dist/atoms/primitives/Tabs.d.ts +30 -0
  237. package/dist/atoms/primitives/Tabs.d.ts.map +1 -0
  238. package/dist/atoms/primitives/avatar.d.ts.map +1 -0
  239. package/dist/atoms/primitives/button.d.ts +11 -0
  240. package/dist/atoms/primitives/button.d.ts.map +1 -0
  241. package/dist/atoms/primitives/button.variants.d.ts +7 -0
  242. package/dist/atoms/primitives/button.variants.d.ts.map +1 -0
  243. package/dist/atoms/{ui → primitives}/card.d.ts +2 -1
  244. package/dist/atoms/primitives/card.d.ts.map +1 -0
  245. package/dist/atoms/primitives/checkbox.d.ts +12 -0
  246. package/dist/atoms/primitives/checkbox.d.ts.map +1 -0
  247. package/dist/atoms/primitives/dialog.d.ts +34 -0
  248. package/dist/atoms/primitives/dialog.d.ts.map +1 -0
  249. package/dist/atoms/primitives/dropdown-menu.d.ts.map +1 -0
  250. package/dist/atoms/primitives/index.d.ts +17 -0
  251. package/dist/atoms/primitives/index.d.ts.map +1 -0
  252. package/dist/atoms/primitives/input.d.ts.map +1 -0
  253. package/dist/atoms/{ui → primitives}/label.d.ts +4 -1
  254. package/dist/atoms/primitives/label.d.ts.map +1 -0
  255. package/dist/atoms/primitives/skeleton.d.ts.map +1 -0
  256. package/dist/atoms/{ui → primitives}/spinner.d.ts +4 -4
  257. package/dist/atoms/primitives/spinner.d.ts.map +1 -0
  258. package/dist/atoms/primitives/table.d.ts.map +1 -0
  259. package/dist/atoms/services/api/client.d.ts +11 -2
  260. package/dist/atoms/services/api/client.d.ts.map +1 -1
  261. package/dist/atoms/services/auth-service.d.ts +1 -1
  262. package/dist/atoms/services/auth-service.d.ts.map +1 -1
  263. package/dist/atoms/services/health.d.ts +2 -2
  264. package/dist/atoms/services/index.d.ts +3 -3
  265. package/dist/atoms/shared/config/dashboard-sizes.d.ts +17 -17
  266. package/dist/atoms/shared/config/dashboard-sizes.d.ts.map +1 -1
  267. package/dist/atoms/shared/config/environment.d.ts.map +1 -1
  268. package/dist/atoms/shared/index.d.ts +4 -3
  269. package/dist/atoms/shared/index.d.ts.map +1 -1
  270. package/dist/atoms/types/auth.d.ts +11 -1
  271. package/dist/atoms/types/auth.d.ts.map +1 -1
  272. package/dist/atoms/types/entity-config.d.ts +117 -0
  273. package/dist/atoms/types/entity-config.d.ts.map +1 -0
  274. package/dist/atoms/types/generated.d.ts.map +1 -1
  275. package/dist/atoms/types/index.d.ts +6 -3
  276. package/dist/atoms/types/index.d.ts.map +1 -1
  277. package/dist/atoms/types/loading.d.ts +1 -1
  278. package/dist/atoms/types/navigation.d.ts +30 -0
  279. package/dist/atoms/types/navigation.d.ts.map +1 -0
  280. package/dist/atoms/types/ui-config.d.ts +50 -0
  281. package/dist/atoms/types/ui-config.d.ts.map +1 -0
  282. package/dist/atoms/utils/animations.d.ts +7 -7
  283. package/dist/atoms/utils/animations.d.ts.map +1 -1
  284. package/dist/atoms/utils/color-manager.d.ts +68 -0
  285. package/dist/atoms/utils/color-manager.d.ts.map +1 -0
  286. package/dist/atoms/utils/debounce.d.ts +6 -0
  287. package/dist/atoms/utils/debounce.d.ts.map +1 -0
  288. package/dist/atoms/utils/field-detection.d.ts +15 -0
  289. package/dist/atoms/utils/field-detection.d.ts.map +1 -0
  290. package/dist/atoms/utils/icon-map.d.ts +68 -0
  291. package/dist/atoms/utils/icon-map.d.ts.map +1 -0
  292. package/dist/atoms/utils/icon-resolver.d.ts +16 -0
  293. package/dist/atoms/utils/icon-resolver.d.ts.map +1 -0
  294. package/dist/atoms/utils/index.d.ts +5 -0
  295. package/dist/atoms/utils/index.d.ts.map +1 -0
  296. package/dist/atoms/utils/metric-engine.d.ts +22 -0
  297. package/dist/atoms/utils/metric-engine.d.ts.map +1 -0
  298. package/dist/atoms/utils/tooltip-helpers.d.ts +1 -1
  299. package/dist/atoms/utils/tooltip-helpers.d.ts.map +1 -1
  300. package/dist/atoms/utils/ui-mapping.d.ts +19 -0
  301. package/dist/atoms/utils/ui-mapping.d.ts.map +1 -0
  302. package/dist/atoms/utils/utils.d.ts +7 -1
  303. package/dist/atoms/utils/utils.d.ts.map +1 -1
  304. package/dist/codegen/openapi/bulk-types.d.ts +142 -0
  305. package/dist/codegen/openapi/bulk-types.d.ts.map +1 -0
  306. package/dist/features/auth/components/LoginForm.d.ts.map +1 -1
  307. package/dist/features/auth/components/LogoutButton.d.ts.map +1 -1
  308. package/dist/features/auth/components/ProtectedRoute.d.ts +2 -2
  309. package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -1
  310. package/dist/features/auth/components/index.d.ts +3 -3
  311. package/dist/features/auth/hooks/auth-context.d.ts +3 -0
  312. package/dist/features/auth/hooks/auth-context.d.ts.map +1 -0
  313. package/dist/features/auth/hooks/index.d.ts +4 -2
  314. package/dist/features/auth/hooks/index.d.ts.map +1 -1
  315. package/dist/features/auth/hooks/use-auth.d.ts +3 -0
  316. package/dist/features/auth/hooks/use-auth.d.ts.map +1 -0
  317. package/dist/features/auth/hooks/useAuth.d.ts +3 -4
  318. package/dist/features/auth/hooks/useAuth.d.ts.map +1 -1
  319. package/dist/features/auth/hooks/useAuthContext.d.ts +7 -0
  320. package/dist/features/auth/hooks/useAuthContext.d.ts.map +1 -0
  321. package/dist/features/auth/hooks/usePermissions.d.ts +3 -3
  322. package/dist/features/auth/index.d.ts +3 -2
  323. package/dist/features/auth/index.d.ts.map +1 -1
  324. package/dist/features/auth/providers/MockAuthProvider.d.ts +8 -0
  325. package/dist/features/auth/providers/MockAuthProvider.d.ts.map +1 -0
  326. package/dist/features/auth/providers/index.d.ts +3 -0
  327. package/dist/features/auth/providers/index.d.ts.map +1 -0
  328. package/dist/features/auth/providers/mock-auth-context.d.ts +3 -0
  329. package/dist/features/auth/providers/mock-auth-context.d.ts.map +1 -0
  330. package/dist/features/auth/providers/use-mock-auth.d.ts +3 -0
  331. package/dist/features/auth/providers/use-mock-auth.d.ts.map +1 -0
  332. package/dist/features/auth/services/mock-auth-service.d.ts +17 -0
  333. package/dist/features/auth/services/mock-auth-service.d.ts.map +1 -0
  334. package/dist/features/index.d.ts +1 -1
  335. package/dist/frontend-patterns.css +5069 -516
  336. package/dist/index.d.ts +17 -9
  337. package/dist/index.d.ts.map +1 -1
  338. package/dist/index.es.js +27080 -8451
  339. package/dist/index.es.js.map +1 -1
  340. package/dist/index.js +27103 -8453
  341. package/dist/index.js.map +1 -1
  342. package/dist/molecules/feedback/index.d.ts +2 -0
  343. package/dist/molecules/feedback/index.d.ts.map +1 -0
  344. package/dist/molecules/forms/FormGroup.d.ts +2 -2
  345. package/dist/molecules/forms/FormGroup.d.ts.map +1 -1
  346. package/dist/molecules/forms/SearchInput.d.ts +1 -1
  347. package/dist/molecules/forms/SearchInput.d.ts.map +1 -1
  348. package/dist/molecules/forms/index.d.ts +2 -2
  349. package/dist/molecules/forms/index.d.ts.map +1 -1
  350. package/dist/molecules/index.d.ts +3 -3
  351. package/dist/molecules/layout/AppHeader/AppHeader.d.ts +1 -1
  352. package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -1
  353. package/dist/molecules/layout/AppHeader/index.d.ts +1 -1
  354. package/dist/molecules/layout/BulkSelectionBar.d.ts +15 -0
  355. package/dist/molecules/layout/BulkSelectionBar.d.ts.map +1 -0
  356. package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts +16 -0
  357. package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts.map +1 -0
  358. package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts +2 -0
  359. package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts.map +1 -0
  360. package/dist/molecules/layout/NavigationContext.d.ts +9 -0
  361. package/dist/molecules/layout/NavigationContext.d.ts.map +1 -0
  362. package/dist/molecules/layout/PageTemplate.d.ts +1 -1
  363. package/dist/molecules/layout/PageTemplate.d.ts.map +1 -1
  364. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts +4 -4
  365. package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts.map +1 -1
  366. package/dist/molecules/layout/SectionHeader/index.d.ts +1 -1
  367. package/dist/molecules/layout/ShowcaseSection.d.ts +4 -4
  368. package/dist/molecules/layout/ShowcaseSection.d.ts.map +1 -1
  369. package/dist/molecules/layout/Sidebar.d.ts.map +1 -1
  370. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +3 -1
  371. package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -1
  372. package/dist/molecules/layout/SidebarButton/index.d.ts +1 -1
  373. package/dist/molecules/layout/SidebarContext.d.ts +1 -8
  374. package/dist/molecules/layout/SidebarContext.d.ts.map +1 -1
  375. package/dist/molecules/layout/index.d.ts +14 -7
  376. package/dist/molecules/layout/index.d.ts.map +1 -1
  377. package/dist/molecules/layout/navigation-context.d.ts +9 -0
  378. package/dist/molecules/layout/navigation-context.d.ts.map +1 -0
  379. package/dist/molecules/layout/sidebar-context.d.ts +7 -0
  380. package/dist/molecules/layout/sidebar-context.d.ts.map +1 -0
  381. package/dist/molecules/layout/use-navigation.d.ts +2 -0
  382. package/dist/molecules/layout/use-navigation.d.ts.map +1 -0
  383. package/dist/molecules/layout/use-sidebar.d.ts +2 -0
  384. package/dist/molecules/layout/use-sidebar.d.ts.map +1 -0
  385. package/dist/molecules/navigation/NavMenu.d.ts +2 -2
  386. package/dist/molecules/navigation/NavMenu.d.ts.map +1 -1
  387. package/dist/molecules/navigation/Pagination.d.ts +2 -2
  388. package/dist/molecules/navigation/index.d.ts +2 -2
  389. package/dist/organisms/index.d.ts +1 -1
  390. package/dist/organisms/showcase/ComponentShowcasePage.d.ts +1 -1
  391. package/dist/organisms/showcase/ComponentShowcasePage.d.ts.map +1 -1
  392. package/dist/templates/AuthTemplate.d.ts +4 -4
  393. package/dist/templates/AuthTemplate.d.ts.map +1 -1
  394. package/dist/templates/ComponentShowcaseTemplate.d.ts +7 -7
  395. package/dist/templates/ComponentShowcaseTemplate.d.ts.map +1 -1
  396. package/dist/templates/DashboardTemplate.d.ts +3 -3
  397. package/dist/templates/DashboardTemplate.d.ts.map +1 -1
  398. package/dist/templates/DataTemplate.d.ts +3 -3
  399. package/dist/templates/DataTemplate.d.ts.map +1 -1
  400. package/dist/templates/EnhancedDataTemplate.d.ts +188 -0
  401. package/dist/templates/EnhancedDataTemplate.d.ts.map +1 -0
  402. package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts +18 -0
  403. package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts.map +1 -0
  404. package/dist/templates/EnhancedDataTemplate.hooks.d.ts +22 -0
  405. package/dist/templates/EnhancedDataTemplate.hooks.d.ts.map +1 -0
  406. package/dist/templates/admin/AdminCRUDTemplate.d.ts +4 -4
  407. package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -1
  408. package/dist/templates/admin/AdminDashboardTemplate.d.ts +10 -13
  409. package/dist/templates/admin/AdminDashboardTemplate.d.ts.map +1 -1
  410. package/dist/templates/admin/AdminDetailTemplate.d.ts +4 -4
  411. package/dist/templates/admin/AdminDetailTemplate.d.ts.map +1 -1
  412. package/dist/templates/admin/index.d.ts +3 -3
  413. package/dist/templates/admin/index.d.ts.map +1 -1
  414. package/dist/templates/api/APIDataTemplate.d.ts +71 -0
  415. package/dist/templates/api/APIDataTemplate.d.ts.map +1 -0
  416. package/dist/templates/api/create-api-data-template.d.ts +4 -0
  417. package/dist/templates/api/create-api-data-template.d.ts.map +1 -0
  418. package/dist/templates/api/index.d.ts +9 -0
  419. package/dist/templates/api/index.d.ts.map +1 -0
  420. package/dist/templates/factory.d.ts +4 -3
  421. package/dist/templates/factory.d.ts.map +1 -1
  422. package/dist/templates/index.d.ts +8 -6
  423. package/dist/templates/index.d.ts.map +1 -1
  424. package/package.json +38 -9
  425. package/dist/atoms/composed/Accordion/Accordion.d.ts.map +0 -1
  426. package/dist/atoms/composed/Accordion/index.d.ts +0 -2
  427. package/dist/atoms/composed/Accordion/index.d.ts.map +0 -1
  428. package/dist/atoms/composed/Alert/Alert.d.ts.map +0 -1
  429. package/dist/atoms/composed/Alert/index.d.ts +0 -2
  430. package/dist/atoms/composed/Alert/index.d.ts.map +0 -1
  431. package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts.map +0 -1
  432. package/dist/atoms/composed/Breadcrumb/index.d.ts +0 -2
  433. package/dist/atoms/composed/Breadcrumb/index.d.ts.map +0 -1
  434. package/dist/atoms/composed/Chart/Chart.d.ts +0 -37
  435. package/dist/atoms/composed/Chart/Chart.d.ts.map +0 -1
  436. package/dist/atoms/composed/Chart/index.d.ts +0 -3
  437. package/dist/atoms/composed/Chart/index.d.ts.map +0 -1
  438. package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts.map +0 -1
  439. package/dist/atoms/composed/ColorSwatch/index.d.ts +0 -2
  440. package/dist/atoms/composed/ColorSwatch/index.d.ts.map +0 -1
  441. package/dist/atoms/composed/DarkModeToggle.d.ts.map +0 -1
  442. package/dist/atoms/composed/DataBadge/DataBadge.d.ts +0 -13
  443. package/dist/atoms/composed/DataBadge/DataBadge.d.ts.map +0 -1
  444. package/dist/atoms/composed/DataBadge/index.d.ts +0 -2
  445. package/dist/atoms/composed/DataBadge/index.d.ts.map +0 -1
  446. package/dist/atoms/composed/DataTable/DataTable.d.ts +0 -28
  447. package/dist/atoms/composed/DataTable/DataTable.d.ts.map +0 -1
  448. package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts.map +0 -1
  449. package/dist/atoms/composed/DataTable/index.d.ts +0 -3
  450. package/dist/atoms/composed/DataTable/index.d.ts.map +0 -1
  451. package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts.map +0 -1
  452. package/dist/atoms/composed/DateTimePicker/index.d.ts +0 -3
  453. package/dist/atoms/composed/DateTimePicker/index.d.ts.map +0 -1
  454. package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts.map +0 -1
  455. package/dist/atoms/composed/DetailedCard/index.d.ts +0 -3
  456. package/dist/atoms/composed/DetailedCard/index.d.ts.map +0 -1
  457. package/dist/atoms/composed/EmptyState/EmptyState.d.ts.map +0 -1
  458. package/dist/atoms/composed/EmptyState/index.d.ts +0 -2
  459. package/dist/atoms/composed/EmptyState/index.d.ts.map +0 -1
  460. package/dist/atoms/composed/FileUpload/FileUpload.d.ts.map +0 -1
  461. package/dist/atoms/composed/FileUpload/index.d.ts +0 -3
  462. package/dist/atoms/composed/FileUpload/index.d.ts.map +0 -1
  463. package/dist/atoms/composed/FormField/FormField.d.ts.map +0 -1
  464. package/dist/atoms/composed/FormField/index.d.ts +0 -2
  465. package/dist/atoms/composed/FormField/index.d.ts.map +0 -1
  466. package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts.map +0 -1
  467. package/dist/atoms/composed/GlobalSearch/index.d.ts +0 -2
  468. package/dist/atoms/composed/GlobalSearch/index.d.ts.map +0 -1
  469. package/dist/atoms/composed/IconBadge/IconBadge.d.ts +0 -16
  470. package/dist/atoms/composed/IconBadge/IconBadge.d.ts.map +0 -1
  471. package/dist/atoms/composed/IconBadge/index.d.ts +0 -3
  472. package/dist/atoms/composed/IconBadge/index.d.ts.map +0 -1
  473. package/dist/atoms/composed/Modal/Modal.d.ts +0 -18
  474. package/dist/atoms/composed/Modal/Modal.d.ts.map +0 -1
  475. package/dist/atoms/composed/Modal/index.d.ts +0 -3
  476. package/dist/atoms/composed/Modal/index.d.ts.map +0 -1
  477. package/dist/atoms/composed/PaletteSwitcher.d.ts.map +0 -1
  478. package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts.map +0 -1
  479. package/dist/atoms/composed/ProgressBar/index.d.ts +0 -2
  480. package/dist/atoms/composed/ProgressBar/index.d.ts.map +0 -1
  481. package/dist/atoms/composed/StatCard/StatCard.d.ts.map +0 -1
  482. package/dist/atoms/composed/StatCard/index.d.ts +0 -2
  483. package/dist/atoms/composed/StatCard/index.d.ts.map +0 -1
  484. package/dist/atoms/composed/StyleGuide.d.ts +0 -3
  485. package/dist/atoms/composed/StyleGuide.d.ts.map +0 -1
  486. package/dist/atoms/composed/Toast/Toast.d.ts.map +0 -1
  487. package/dist/atoms/composed/Toast/index.d.ts.map +0 -1
  488. package/dist/atoms/composed/Tooltip/Tooltip.d.ts.map +0 -1
  489. package/dist/atoms/composed/Tooltip/index.d.ts +0 -2
  490. package/dist/atoms/composed/Tooltip/index.d.ts.map +0 -1
  491. package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts.map +0 -1
  492. package/dist/atoms/composed/UserAvatar/index.d.ts +0 -2
  493. package/dist/atoms/composed/UserAvatar/index.d.ts.map +0 -1
  494. package/dist/atoms/composed/UserMenu/UserMenu.d.ts.map +0 -1
  495. package/dist/atoms/composed/UserMenu/index.d.ts +0 -2
  496. package/dist/atoms/composed/UserMenu/index.d.ts.map +0 -1
  497. package/dist/atoms/composed/index.d.ts +0 -25
  498. package/dist/atoms/composed/index.d.ts.map +0 -1
  499. package/dist/atoms/ui/Badge.d.ts +0 -10
  500. package/dist/atoms/ui/Badge.d.ts.map +0 -1
  501. package/dist/atoms/ui/ErrorBoundary.d.ts.map +0 -1
  502. package/dist/atoms/ui/Select.d.ts +0 -28
  503. package/dist/atoms/ui/Select.d.ts.map +0 -1
  504. package/dist/atoms/ui/Switch.d.ts +0 -9
  505. package/dist/atoms/ui/Switch.d.ts.map +0 -1
  506. package/dist/atoms/ui/Tabs.d.ts +0 -30
  507. package/dist/atoms/ui/Tabs.d.ts.map +0 -1
  508. package/dist/atoms/ui/avatar.d.ts.map +0 -1
  509. package/dist/atoms/ui/button.d.ts +0 -14
  510. package/dist/atoms/ui/button.d.ts.map +0 -1
  511. package/dist/atoms/ui/card.d.ts.map +0 -1
  512. package/dist/atoms/ui/dropdown-menu.d.ts.map +0 -1
  513. package/dist/atoms/ui/index.d.ts +0 -15
  514. package/dist/atoms/ui/index.d.ts.map +0 -1
  515. package/dist/atoms/ui/input.d.ts.map +0 -1
  516. package/dist/atoms/ui/label.d.ts.map +0 -1
  517. package/dist/atoms/ui/skeleton.d.ts.map +0 -1
  518. package/dist/atoms/ui/spinner.d.ts.map +0 -1
  519. package/dist/atoms/ui/table.d.ts.map +0 -1
  520. package/src/App.css +0 -42
  521. package/src/App.tsx +0 -54
  522. package/src/__tests__/README.md +0 -221
  523. package/src/__tests__/atoms/hooks/simple-hooks.test.ts +0 -44
  524. package/src/__tests__/atoms/ui/button.test.tsx +0 -68
  525. package/src/__tests__/atoms/utils/simple.test.ts +0 -18
  526. package/src/__tests__/atoms/utils/utils.test.ts +0 -77
  527. package/src/__tests__/features/auth/simple-auth.test.tsx +0 -40
  528. package/src/__tests__/molecules/layout/simple-layout.test.tsx +0 -81
  529. package/src/__tests__/organisms/showcase/simple-showcase.test.tsx +0 -167
  530. package/src/__tests__/setup.ts +0 -51
  531. package/src/__tests__/utils.tsx +0 -123
  532. package/src/atoms/composed/Accordion/Accordion.tsx +0 -271
  533. package/src/atoms/composed/Accordion/index.ts +0 -1
  534. package/src/atoms/composed/Alert/Alert.tsx +0 -132
  535. package/src/atoms/composed/Alert/index.ts +0 -1
  536. package/src/atoms/composed/Breadcrumb/Breadcrumb.tsx +0 -83
  537. package/src/atoms/composed/Breadcrumb/index.ts +0 -1
  538. package/src/atoms/composed/Chart/Chart.tsx +0 -425
  539. package/src/atoms/composed/Chart/index.ts +0 -2
  540. package/src/atoms/composed/ColorSwatch/ColorSwatch.tsx +0 -72
  541. package/src/atoms/composed/ColorSwatch/index.ts +0 -1
  542. package/src/atoms/composed/DarkModeToggle.tsx +0 -66
  543. package/src/atoms/composed/DataBadge/DataBadge.tsx +0 -81
  544. package/src/atoms/composed/DataBadge/index.ts +0 -1
  545. package/src/atoms/composed/DataTable/DataTable.tsx +0 -394
  546. package/src/atoms/composed/DataTable/TableCellWithTooltip.tsx +0 -41
  547. package/src/atoms/composed/DataTable/index.ts +0 -2
  548. package/src/atoms/composed/DateTimePicker/DateTimePicker.tsx +0 -611
  549. package/src/atoms/composed/DateTimePicker/index.ts +0 -2
  550. package/src/atoms/composed/DetailedCard/DetailedCard.tsx +0 -181
  551. package/src/atoms/composed/DetailedCard/index.ts +0 -2
  552. package/src/atoms/composed/EmptyState/EmptyState.tsx +0 -90
  553. package/src/atoms/composed/EmptyState/index.ts +0 -1
  554. package/src/atoms/composed/FileUpload/FileUpload.tsx +0 -477
  555. package/src/atoms/composed/FileUpload/index.ts +0 -2
  556. package/src/atoms/composed/FormField/FormField.tsx +0 -92
  557. package/src/atoms/composed/FormField/index.ts +0 -1
  558. package/src/atoms/composed/GlobalSearch/GlobalSearch.tsx +0 -37
  559. package/src/atoms/composed/GlobalSearch/index.ts +0 -1
  560. package/src/atoms/composed/IconBadge/IconBadge.tsx +0 -95
  561. package/src/atoms/composed/IconBadge/index.ts +0 -2
  562. package/src/atoms/composed/Modal/Modal.tsx +0 -223
  563. package/src/atoms/composed/Modal/index.ts +0 -2
  564. package/src/atoms/composed/PaletteSwitcher.tsx +0 -386
  565. package/src/atoms/composed/ProgressBar/ProgressBar.tsx +0 -116
  566. package/src/atoms/composed/ProgressBar/index.ts +0 -1
  567. package/src/atoms/composed/StatCard/StatCard.tsx +0 -219
  568. package/src/atoms/composed/StatCard/index.ts +0 -1
  569. package/src/atoms/composed/StyleGuide.tsx +0 -717
  570. package/src/atoms/composed/Toast/Toast.tsx +0 -219
  571. package/src/atoms/composed/Toast/index.ts +0 -1
  572. package/src/atoms/composed/Tooltip/Tooltip.tsx +0 -213
  573. package/src/atoms/composed/Tooltip/index.ts +0 -1
  574. package/src/atoms/composed/UserAvatar/UserAvatar.tsx +0 -139
  575. package/src/atoms/composed/UserAvatar/index.ts +0 -1
  576. package/src/atoms/composed/UserMenu/UserMenu.tsx +0 -16
  577. package/src/atoms/composed/UserMenu/index.ts +0 -1
  578. package/src/atoms/composed/index.ts +0 -29
  579. package/src/atoms/hooks/useApi.ts +0 -80
  580. package/src/atoms/hooks/useHealth.ts +0 -17
  581. package/src/atoms/index.ts +0 -13
  582. package/src/atoms/services/api/client.ts +0 -134
  583. package/src/atoms/services/auth-service.ts +0 -248
  584. package/src/atoms/services/health.ts +0 -15
  585. package/src/atoms/services/index.ts +0 -3
  586. package/src/atoms/shared/config/constants.ts +0 -17
  587. package/src/atoms/shared/config/dashboard-sizes.ts +0 -111
  588. package/src/atoms/shared/config/environment.ts +0 -10
  589. package/src/atoms/shared/index.ts +0 -4
  590. package/src/atoms/shared/styles/color-palettes.css +0 -566
  591. package/src/atoms/types/auth.ts +0 -62
  592. package/src/atoms/types/generated.ts +0 -1469
  593. package/src/atoms/types/index.ts +0 -4
  594. package/src/atoms/types/loading.ts +0 -28
  595. package/src/atoms/ui/Badge.tsx +0 -30
  596. package/src/atoms/ui/ErrorBoundary.tsx +0 -59
  597. package/src/atoms/ui/Select.tsx +0 -53
  598. package/src/atoms/ui/Switch.tsx +0 -42
  599. package/src/atoms/ui/Tabs.tsx +0 -118
  600. package/src/atoms/ui/avatar.tsx +0 -48
  601. package/src/atoms/ui/button.tsx +0 -70
  602. package/src/atoms/ui/card.tsx +0 -76
  603. package/src/atoms/ui/dropdown-menu.tsx +0 -199
  604. package/src/atoms/ui/index.ts +0 -39
  605. package/src/atoms/ui/input.tsx +0 -23
  606. package/src/atoms/ui/label.tsx +0 -23
  607. package/src/atoms/ui/skeleton.tsx +0 -13
  608. package/src/atoms/ui/spinner.tsx +0 -49
  609. package/src/atoms/ui/table.tsx +0 -116
  610. package/src/atoms/utils/animations.ts +0 -135
  611. package/src/atoms/utils/tooltip-helpers.ts +0 -140
  612. package/src/atoms/utils/utils.ts +0 -9
  613. package/src/features/auth/components/LoginForm.tsx +0 -168
  614. package/src/features/auth/components/LogoutButton.tsx +0 -19
  615. package/src/features/auth/components/ProtectedRoute.tsx +0 -60
  616. package/src/features/auth/components/index.ts +0 -4
  617. package/src/features/auth/hooks/index.ts +0 -2
  618. package/src/features/auth/hooks/useAuth.tsx +0 -205
  619. package/src/features/auth/hooks/usePermissions.ts +0 -35
  620. package/src/features/auth/index.ts +0 -2
  621. package/src/features/index.ts +0 -2
  622. package/src/index.css +0 -704
  623. package/src/index.ts +0 -13
  624. package/src/main.tsx +0 -48
  625. package/src/molecules/.gitkeep +0 -0
  626. package/src/molecules/forms/FormGroup.tsx +0 -75
  627. package/src/molecules/forms/SearchInput.tsx +0 -259
  628. package/src/molecules/forms/index.ts +0 -4
  629. package/src/molecules/index.ts +0 -4
  630. package/src/molecules/layout/AppHeader/AppHeader.tsx +0 -42
  631. package/src/molecules/layout/AppHeader/index.ts +0 -1
  632. package/src/molecules/layout/AppLayout.tsx +0 -29
  633. package/src/molecules/layout/PageTemplate.tsx +0 -87
  634. package/src/molecules/layout/SectionHeader/SectionHeader.tsx +0 -87
  635. package/src/molecules/layout/SectionHeader/index.ts +0 -1
  636. package/src/molecules/layout/ShowcaseSection.tsx +0 -57
  637. package/src/molecules/layout/Sidebar.tsx +0 -144
  638. package/src/molecules/layout/SidebarButton/SidebarButton.tsx +0 -99
  639. package/src/molecules/layout/SidebarButton/index.ts +0 -1
  640. package/src/molecules/layout/SidebarContext.tsx +0 -31
  641. package/src/molecules/layout/index.ts +0 -7
  642. package/src/molecules/navigation/NavMenu.tsx +0 -188
  643. package/src/molecules/navigation/Pagination.tsx +0 -172
  644. package/src/molecules/navigation/index.ts +0 -4
  645. package/src/organisms/index.ts +0 -5
  646. package/src/organisms/showcase/ComponentShowcasePage.tsx +0 -2496
  647. package/src/organisms/showcase/index.ts +0 -1
  648. package/src/pages/AdminShowcase/AdminCRUDShowcase.tsx +0 -242
  649. package/src/pages/AdminShowcase/AdminDashboardShowcase.tsx +0 -171
  650. package/src/pages/AdminShowcase/AdminDetailShowcase.tsx +0 -385
  651. package/src/pages/AdminShowcase/index.tsx +0 -3
  652. package/src/pages/ComponentShowcase/BadgesShowcase.tsx +0 -188
  653. package/src/pages/ComponentShowcase/CardsShowcase.tsx +0 -392
  654. package/src/pages/ComponentShowcase/PalettesShowcase.tsx +0 -207
  655. package/src/pages/ComponentShowcase/StatesShowcase.tsx +0 -485
  656. package/src/pages/ComponentShowcase/TablesShowcase.tsx +0 -134
  657. package/src/pages/ComponentShowcase/TypographyShowcase.tsx +0 -255
  658. package/src/pages/ComponentShowcase/index.tsx +0 -188
  659. package/src/pages/index.ts +0 -2
  660. package/src/templates/AuthTemplate.tsx +0 -216
  661. package/src/templates/ComponentShowcaseTemplate.tsx +0 -173
  662. package/src/templates/DashboardTemplate.tsx +0 -232
  663. package/src/templates/DataTemplate.tsx +0 -319
  664. package/src/templates/admin/AdminCRUDTemplate.tsx +0 -630
  665. package/src/templates/admin/AdminDashboardTemplate.tsx +0 -351
  666. package/src/templates/admin/AdminDetailTemplate.tsx +0 -563
  667. package/src/templates/admin/index.ts +0 -29
  668. package/src/templates/factory.tsx +0 -169
  669. package/src/templates/index.ts +0 -37
  670. package/src/vite-env.d.ts +0 -1
  671. /package/dist/atoms/{composed → components/theme}/DarkModeToggle.d.ts +0 -0
  672. /package/dist/atoms/{ui → primitives}/avatar.d.ts +0 -0
  673. /package/dist/atoms/{ui → primitives}/dropdown-menu.d.ts +0 -0
  674. /package/dist/atoms/{ui → primitives}/input.d.ts +0 -0
  675. /package/dist/atoms/{ui → primitives}/skeleton.d.ts +0 -0
  676. /package/dist/atoms/{ui → primitives}/table.d.ts +0 -0
@@ -1,2496 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { Card } from '../../atoms/ui/card';
3
- import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../atoms/ui/Tabs';
4
- import { DataBadge, StatCard, DetailedCard, DataTable, EmptyState, ColorSwatch, IconBadge, Accordion, ToastContainer, FileUpload, DateTimePicker, Chart } from '../../atoms/composed';
5
- import { Badge } from '../../atoms/ui/Badge';
6
- import { Switch } from '../../atoms/ui/Switch';
7
- import { ShowcaseSection } from '../../molecules/layout';
8
- import { Pagination, NavMenu } from '../../molecules/navigation';
9
- import { FormGroup, SearchInput } from '../../molecules/forms';
10
- import { Alert, ProgressBar, FormField, Breadcrumb } from '../../atoms/composed';
11
- import { Input } from '../../atoms/ui/input';
12
- import { Label } from '../../atoms/ui/label';
13
- import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../atoms/ui/table';
14
- import { Spinner } from '../../atoms/ui/spinner';
15
- import { Skeleton } from '../../atoms/ui/skeleton';
16
- import { Button } from '../../atoms/ui/button';
17
- import {
18
- Database,
19
- TrendingUp,
20
- Users,
21
- Activity,
22
- CheckCircle,
23
- AlertTriangle,
24
- XCircle,
25
- Info,
26
- Clock,
27
- Layers,
28
- Palette,
29
- Grid3X3,
30
- Home,
31
- Settings,
32
- FileText,
33
- ChevronRight
34
- } from 'lucide-react';
35
-
36
- interface SampleDataItem extends Record<string, unknown> {
37
- id: number;
38
- name: string;
39
- status: 'success' | 'warning' | 'error';
40
- category: string;
41
- runs: number;
42
- }
43
-
44
- export const ComponentShowcasePage: React.FC = () => {
45
- const [activeSection, setActiveSection] = useState('badges');
46
- const [showCode, setShowCode] = useState(false);
47
- const [toasts, setToasts] = useState<Array<{ id: string; status: 'success' | 'warning' | 'error' | 'info'; title: string; message: string }>>([]);
48
- const [selectedDate, setSelectedDate] = useState<Date | undefined>(undefined);
49
- const [dateRange, setDateRange] = useState<{ start: Date | undefined; end: Date | undefined }>({ start: undefined, end: undefined });
50
-
51
- // Sample data for DataTable
52
- const sampleData: SampleDataItem[] = [
53
- { id: 1, name: 'Customer Analysis', status: 'success', category: 'Analytics', runs: 24 },
54
- { id: 2, name: 'Revenue Model', status: 'warning', category: 'Finance', runs: 18 },
55
- { id: 3, name: 'User Behavior', status: 'error', category: 'Product', runs: 31 },
56
- { id: 4, name: 'Sales Forecast', status: 'success', category: 'Sales', runs: 12 }
57
- ];
58
-
59
- const tableColumns = [
60
- { key: 'name', header: 'Model Name' },
61
- { key: 'status', header: 'Status', type: 'status' as const },
62
- { key: 'category', header: 'Category', type: 'category' as const },
63
- { key: 'runs', header: 'Runs' }
64
- ];
65
-
66
- return (
67
- <div className="min-h-screen bg-background">
68
- {/* Hero Section */}
69
- <div className="bg-gradient-to-br from-category-1/5 via-category-2/5 to-category-3/5 border-b border-border/50">
70
- <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12">
71
- <div className="flex items-center justify-between">
72
- <div className="flex items-center space-x-4">
73
- <IconBadge
74
- variant="category"
75
- category={1}
76
- size="lg"
77
- icon={<Grid3X3 className="w-6 h-6" />}
78
- />
79
- <div>
80
- <h1 className="text-4xl font-bold text-foreground">Component Showcase</h1>
81
- <p className="text-lg text-muted-foreground mt-2">
82
- Explore our comprehensive design system and component library built for data analytics interfaces
83
- </p>
84
- </div>
85
- </div>
86
-
87
- <div className="flex items-center space-x-3">
88
- <div className="flex items-center gap-3 bg-card/80 backdrop-blur-sm border border-border/50 rounded px-3 py-2">
89
- <Layers className="w-4 h-4 text-muted-foreground" />
90
- <span className="text-sm font-medium text-foreground">Show Code</span>
91
- <Switch
92
- checked={showCode}
93
- onCheckedChange={setShowCode}
94
- />
95
- </div>
96
- </div>
97
- </div>
98
-
99
- {/* Quick Stats */}
100
- <div className="mt-8 grid grid-cols-1 md:grid-cols-4 gap-4">
101
- <StatCard
102
- title="Components"
103
- value="20+"
104
- subtitle="Design system components"
105
- category={1}
106
- icon={<Database className="w-4 h-4" />}
107
- />
108
- <StatCard
109
- title="Colors"
110
- value="20+"
111
- subtitle="System colors & variants"
112
- category={2}
113
- icon={<Palette className="w-4 h-4" />}
114
- />
115
- <StatCard
116
- title="Variants"
117
- value="50+"
118
- subtitle="Component variations"
119
- category={3}
120
- icon={<CheckCircle className="w-4 h-4" />}
121
- />
122
- <StatCard
123
- title="Interactive"
124
- value="100%"
125
- subtitle="Fully interactive components"
126
- category={4}
127
- icon={<Activity className="w-4 h-4" />}
128
- />
129
- </div>
130
- </div>
131
- </div>
132
-
133
- {/* Main Content */}
134
- <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8">
135
- <div className="space-y-8">
136
-
137
- {/* Navigation */}
138
- <Tabs value={activeSection} onValueChange={setActiveSection} className="w-full">
139
- {
140
- <TabsList className="grid w-full grid-cols-10 lg:w-fit lg:mx-auto mb-8">
141
- <TabsTrigger value="badges" category={1}>Badges</TabsTrigger>
142
- <TabsTrigger value="cards" category={2}>Cards</TabsTrigger>
143
- <TabsTrigger value="tables" category={3}>Data</TabsTrigger>
144
- <TabsTrigger value="forms" category={4}>Forms</TabsTrigger>
145
- <TabsTrigger value="navigation" category={5}>Navigation</TabsTrigger>
146
- <TabsTrigger value="feedback" category={6}>Feedback</TabsTrigger>
147
- <TabsTrigger value="states" category={7}>States</TabsTrigger>
148
- <TabsTrigger value="palettes" category={8}>Palettes</TabsTrigger>
149
- <TabsTrigger value="typography" category={1}>Typography</TabsTrigger>
150
- <TabsTrigger value="debug" category={2}>Debug</TabsTrigger>
151
- </TabsList>
152
- }
153
-
154
- {/* Badges Section */}
155
- <TabsContent value="badges" className="space-y-6">
156
- <div className="space-y-2 mb-8">
157
- <h2 className="text-2xl font-bold text-foreground">Badge Components</h2>
158
- <p className="text-muted-foreground">
159
- From base UI badges to semantic data badges with design tokens and theming.
160
- </p>
161
- </div>
162
-
163
- <div className="grid gap-6">
164
- {/* Base Badge Component */}
165
- <Card className="p-6" category={1}>
166
- <ShowcaseSection
167
- title="Base Badge Component"
168
- description="Foundation UI badge with default variants and sizes"
169
- badge={{ text: "UI Component", variant: "category", category: 1 }}
170
- >
171
- <div className="space-y-4">
172
- <div>
173
- <h4 className="text-sm font-medium mb-3">Variants</h4>
174
- <div className="flex flex-wrap gap-2">
175
- <Badge variant="default">Default</Badge>
176
- <Badge variant="secondary">Secondary</Badge>
177
- <Badge variant="destructive">Destructive</Badge>
178
- <Badge variant="outline">Outline</Badge>
179
- </div>
180
- </div>
181
-
182
- <div>
183
- <h4 className="text-sm font-medium mb-3">Sizes</h4>
184
- <div className="flex flex-wrap items-center gap-2">
185
- <Badge size="sm">Small</Badge>
186
- <Badge size="md">Medium</Badge>
187
- <Badge size="lg">Large</Badge>
188
- </div>
189
- </div>
190
-
191
- {showCode && (
192
- <div className="mt-3 p-3 bg-muted/50 rounded text-sm font-mono">
193
- <code>{`<Badge variant="default">Default</Badge>
194
- <Badge variant="secondary">Secondary</Badge>`}</code>
195
- </div>
196
- )}
197
- </div>
198
- </ShowcaseSection>
199
- </Card>
200
-
201
- {/* DataBadge - Category */}
202
- <Card className="p-6" category={2}>
203
- <ShowcaseSection
204
- title="DataBadge with Category Theming"
205
- description="Extended badge component using design tokens for data categorization"
206
- badge={{ text: "Business Component", variant: "category", category: 2 }}
207
- >
208
- <div className="space-y-4">
209
- <div>
210
- <h4 className="text-sm font-medium mb-3">Category Colors (Design Tokens)</h4>
211
- <div className="flex flex-wrap gap-2">
212
- {[1, 2, 3, 4, 5, 6, 7, 8].map(category => (
213
- <DataBadge key={category} variant="category" category={category as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8}>
214
- Category {category}
215
- </DataBadge>
216
- ))}
217
- </div>
218
- </div>
219
-
220
- <div>
221
- <h4 className="text-sm font-medium mb-3">Sizes & Interactive States</h4>
222
- <div className="flex flex-wrap items-center gap-2">
223
- <DataBadge variant="category" category={1} size="sm">Small</DataBadge>
224
- <DataBadge variant="category" category={2} size="md">Medium</DataBadge>
225
- <DataBadge variant="category" category={3} size="lg">Large</DataBadge>
226
- <DataBadge variant="category" category={4} interactive onClick={() => alert('Interactive badge clicked!')}>
227
- Interactive (Click me)
228
- </DataBadge>
229
- </div>
230
- </div>
231
-
232
- {showCode && (
233
- <div className="mt-3 p-3 bg-muted/50 rounded text-sm font-mono">
234
- <code>{`<DataBadge variant="category" category={1}>
235
- Category 1
236
- </DataBadge>`}</code>
237
- </div>
238
- )}
239
- </div>
240
- </ShowcaseSection>
241
- </Card>
242
-
243
- {/* DataBadge - Status */}
244
- <Card className="p-6" category={3}>
245
- <ShowcaseSection
246
- title="DataBadge with Status Theming"
247
- description="Semantic status indicators using design system colors"
248
- badge={{ text: "Business Component", variant: "category", category: 3 }}
249
- >
250
- <div className="space-y-4">
251
- <div>
252
- <h4 className="text-sm font-medium mb-3">Status Variants (Semantic Colors)</h4>
253
- <div className="flex flex-wrap gap-2">
254
- <DataBadge variant="status" status="success">
255
- <CheckCircle className="w-3 h-3 mr-1" />
256
- Success
257
- </DataBadge>
258
- <DataBadge variant="status" status="warning">
259
- <AlertTriangle className="w-3 h-3 mr-1" />
260
- Warning
261
- </DataBadge>
262
- <DataBadge variant="status" status="error">
263
- <XCircle className="w-3 h-3 mr-1" />
264
- Error
265
- </DataBadge>
266
- <DataBadge variant="status" status="info">
267
- <Info className="w-3 h-3 mr-1" />
268
- Info
269
- </DataBadge>
270
- <DataBadge variant="status" status="neutral">
271
- <Clock className="w-3 h-3 mr-1" />
272
- Neutral
273
- </DataBadge>
274
- </div>
275
- </div>
276
-
277
- {showCode && (
278
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
279
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
280
- <code>{`<DataBadge variant="status" status="success">Success</DataBadge>
281
- <DataBadge variant="status" status="warning">Warning</DataBadge>
282
- <DataBadge variant="status" status="error">Error</DataBadge>
283
- <DataBadge variant="status" status="info">Info</DataBadge>`}</code>
284
- </pre>
285
- </div>
286
- )}
287
- </div>
288
- </ShowcaseSection>
289
- </Card>
290
-
291
- {/* Token Usage Example */}
292
- <Card className="p-6" category={4}>
293
- <ShowcaseSection
294
- title="Design Token Usage"
295
- description="How components leverage design tokens for consistent theming"
296
- badge={{ text: "Architecture", variant: "category", category: 4 }}
297
- >
298
- <div className="space-y-4">
299
- <div className="grid md:grid-cols-2 gap-4">
300
- <div>
301
- <h4 className="text-sm font-medium mb-3">CSS Variables Applied</h4>
302
- <div className="space-y-2 text-xs font-mono">
303
- <div className="p-2 bg-category-1/10 text-category-1 rounded border border-category-1/20">
304
- --category-1: {getComputedStyle(document.documentElement).getPropertyValue('--category-1') || '217 91% 60%'}
305
- </div>
306
- <div className="p-2 bg-status-success/10 text-status-success rounded border border-status-success/20">
307
- --status-success: {getComputedStyle(document.documentElement).getPropertyValue('--status-success') || '142 76% 36%'}
308
- </div>
309
- </div>
310
- </div>
311
-
312
- <div>
313
- <h4 className="text-sm font-medium mb-3">Component Classes</h4>
314
- <div className="space-y-2 text-xs">
315
- <div className="p-2 bg-muted rounded">
316
- <code>.badge-category-1</code> uses <code>var(--category-1)</code>
317
- </div>
318
- <div className="p-2 bg-muted rounded">
319
- <code>.status-success</code> uses <code>var(--status-success)</code>
320
- </div>
321
- </div>
322
- </div>
323
- </div>
324
- </div>
325
- </ShowcaseSection>
326
- </Card>
327
- </div>
328
- </TabsContent>
329
-
330
- {/* Cards Section */}
331
- <TabsContent value="cards" className="space-y-6">
332
- <div className="space-y-2 mb-8">
333
- <h2 className="text-2xl font-bold text-foreground">Card Components</h2>
334
- <p className="text-muted-foreground">
335
- From base cards to specialized data visualization cards with metrics and analytics.
336
- </p>
337
- </div>
338
-
339
- <div className="grid gap-6">
340
- {/* Base Card Component */}
341
- <Card className="p-6" category={1}>
342
- <ShowcaseSection
343
- title="Base Card Component"
344
- description="Foundation card with optional category theming"
345
- badge={{ text: "UI Component", variant: "category", category: 1 }}
346
- >
347
- <div className="space-y-4">
348
- <div className="grid md:grid-cols-3 gap-4">
349
- <Card className="p-4">
350
- <h4 className="font-medium mb-2">Basic Card</h4>
351
- <p className="text-sm text-muted-foreground">Standard card with default styling</p>
352
- </Card>
353
-
354
- <Card className="p-4" category={2}>
355
- <h4 className="font-medium mb-2">Category Card</h4>
356
- <p className="text-sm text-muted-foreground">Card with category color accent</p>
357
- </Card>
358
-
359
- <Card className="p-4" category={4}>
360
- <h4 className="font-medium mb-2">Themed Card</h4>
361
- <p className="text-sm text-muted-foreground">Using design token theming</p>
362
- </Card>
363
- </div>
364
-
365
- {showCode && (
366
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
367
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
368
- <code>
369
- {`<Card category={2}>Card with category theming</Card>`}
370
- </code>
371
- </pre>
372
- </div>
373
- )}
374
- </div>
375
- </ShowcaseSection>
376
- </Card>
377
-
378
- {/* StatCard Component */}
379
- <Card className="p-6" category={2}>
380
- <ShowcaseSection
381
- title="StatCard Component"
382
- description="Specialized card for displaying key metrics with trends"
383
- badge={{ text: "Business Component", variant: "category", category: 2 }}
384
- >
385
- <div className="space-y-4">
386
- <div className="grid md:grid-cols-2 lg:grid-cols-3 gap-4">
387
- <StatCard
388
- title="Total Models"
389
- value="1,234"
390
- subtitle="Active dbt models"
391
- category={1}
392
- icon={<Database className="w-5 h-5" />}
393
- trend={{ value: 12.5, label: "vs last month" }}
394
- />
395
- <StatCard
396
- title="Success Rate"
397
- value="99.2%"
398
- subtitle="Test pass rate"
399
- category={2}
400
- icon={<CheckCircle className="w-5 h-5" />}
401
- trend={{ value: 2.1, label: "vs last week" }}
402
- />
403
- <StatCard
404
- title="Active Users"
405
- value="567"
406
- subtitle="Monthly active users"
407
- category={3}
408
- icon={<Users className="w-5 h-5" />}
409
- trend={{ value: -3.2, label: "vs last month" }}
410
- />
411
- </div>
412
-
413
- {showCode && (
414
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
415
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
416
- <code>{`<StatCard
417
- title="Total Models"
418
- value="1,234"
419
- subtitle="Active dbt models"
420
- category={1}
421
- icon={<Database />}
422
- trend={{ value: 12.5, label: "vs last month" }}
423
- />`}</code>
424
- </pre>
425
- </div>
426
- )}
427
- </div>
428
- </ShowcaseSection>
429
- </Card>
430
-
431
- {/* DetailedCard Component */}
432
- <Card className="p-6" category={3}>
433
- <ShowcaseSection
434
- title="DetailedCard Component"
435
- description="Rich information card with multiple metrics and interactive elements"
436
- badge={{ text: "Business Component", variant: "category", category: 3 }}
437
- >
438
- <DetailedCard
439
- title="Customer Analytics Model"
440
- subtitle="Production Model"
441
- description="Advanced analytics model for customer behavior tracking and segmentation."
442
- category={1}
443
- icon={<Database className="w-5 h-5" />}
444
- primaryMetric={{
445
- label: "Success Rate",
446
- value: "98.7%",
447
- trend: { value: 5.2, label: "vs last week" }
448
- }}
449
- secondaryMetrics={[
450
- { label: "Daily Runs", value: "24", status: "success" },
451
- { label: "Avg Runtime", value: "2.4min", status: "info" },
452
- { label: "Data Quality", value: "95%", status: "warning" },
453
- { label: "Test Coverage", value: "87%", status: "success" }
454
- ]}
455
- tags={[
456
- { label: "Production", status: "success" },
457
- { label: "Analytics", category: 1 },
458
- { label: "Customer Data", category: 3 }
459
- ]}
460
- onClick={() => alert('Model details clicked!')}
461
- />
462
- </ShowcaseSection>
463
- </Card>
464
-
465
- {/* Card Design Tokens */}
466
- <Card className="p-6" category={4}>
467
- <ShowcaseSection
468
- title="Card Theming & Composition"
469
- description="How cards leverage design tokens and compose with other components"
470
- badge={{ text: "Architecture", variant: "category", category: 4 }}
471
- >
472
- <div className="space-y-4">
473
- <div className="grid md:grid-cols-2 gap-4">
474
- <div>
475
- <h4 className="text-sm font-medium mb-3">Component Hierarchy</h4>
476
- <div className="space-y-2 text-xs">
477
- <div className="p-2 bg-muted rounded flex items-center gap-2">
478
- <span className="font-mono">Card</span>
479
- <span className="text-muted-foreground">→ Base container</span>
480
- </div>
481
- <div className="p-2 bg-muted rounded flex items-center gap-2 ml-4">
482
- <span className="font-mono">StatCard</span>
483
- <span className="text-muted-foreground">→ Metrics display</span>
484
- </div>
485
- <div className="p-2 bg-muted rounded flex items-center gap-2 ml-4">
486
- <span className="font-mono">DetailedCard</span>
487
- <span className="text-muted-foreground">→ Rich content</span>
488
- </div>
489
- </div>
490
- </div>
491
-
492
- <div>
493
- <h4 className="text-sm font-medium mb-3">Composed Elements</h4>
494
- <div className="space-y-2 text-xs">
495
- <div className="p-2 bg-muted rounded">
496
- Uses <code>DataBadge</code> for tags
497
- </div>
498
- <div className="p-2 bg-muted rounded">
499
- Uses <code>IconBadge</code> for icons
500
- </div>
501
- <div className="p-2 bg-muted rounded">
502
- Category theming via CSS variables
503
- </div>
504
- </div>
505
- </div>
506
- </div>
507
- </div>
508
- </ShowcaseSection>
509
- </Card>
510
- </div>
511
- </TabsContent>
512
-
513
- {/* Tables Section */}
514
- <TabsContent value="tables" className="space-y-6">
515
- <div className="space-y-2 mb-8">
516
- <h2 className="text-2xl font-bold text-foreground">Data Visualization</h2>
517
- <p className="text-muted-foreground">
518
- Tables and charts for displaying and visualizing data with sorting, filtering, and interactive features.
519
- </p>
520
- </div>
521
-
522
- <div className="grid gap-6">
523
- {/* Base Table Component */}
524
- <Card className="p-6" category={1}>
525
- <ShowcaseSection
526
- title="Base Table Component"
527
- description="Foundation table components with semantic HTML structure"
528
- badge={{ text: "UI Component", variant: "category", category: 1 }}
529
- >
530
- <div className="space-y-4">
531
- <Table>
532
- <TableHeader>
533
- <TableRow>
534
- <TableHead>Name</TableHead>
535
- <TableHead>Status</TableHead>
536
- <TableHead>Category</TableHead>
537
- <TableHead className="text-right">Value</TableHead>
538
- </TableRow>
539
- </TableHeader>
540
- <TableBody>
541
- <TableRow>
542
- <TableCell>Customer Analytics</TableCell>
543
- <TableCell>Active</TableCell>
544
- <TableCell>Analytics</TableCell>
545
- <TableCell className="text-right">1,234</TableCell>
546
- </TableRow>
547
- <TableRow>
548
- <TableCell>Revenue Model</TableCell>
549
- <TableCell>Pending</TableCell>
550
- <TableCell>Finance</TableCell>
551
- <TableCell className="text-right">567</TableCell>
552
- </TableRow>
553
- </TableBody>
554
- </Table>
555
-
556
- {showCode && (
557
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
558
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
559
- <code>{`<Table>
560
- <TableHeader>
561
- <TableRow>
562
- <TableHead>Name</TableHead>
563
- </TableRow>
564
- </TableHeader>
565
- <TableBody>
566
- <TableRow>
567
- <TableCell>Data</TableCell>
568
- </TableRow>
569
- </TableBody>
570
- </Table>`}</code>
571
- </pre>
572
- </div>
573
- )}
574
- </div>
575
- </ShowcaseSection>
576
- </Card>
577
-
578
- {/* DataTable Component */}
579
- <Card className="p-6" category={2}>
580
- <ShowcaseSection
581
- title="DataTable Component"
582
- description="Feature-rich table with search, sorting, hover states, and click handlers"
583
- badge={{ text: "Business Component", variant: "category", category: 2 }}
584
- >
585
- <DataTable
586
- data={sampleData}
587
- columns={tableColumns}
588
- searchPlaceholder="Search models..."
589
- onRowClick={(item) => alert(`Clicked: ${item.name}`)}
590
- hover={true}
591
- />
592
-
593
- {showCode && (
594
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
595
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
596
- <code>{`<DataTable
597
- data={sampleData}
598
- columns={[
599
- { key: 'name', header: 'Model Name' },
600
- { key: 'status', header: 'Status', type: 'status' },
601
- { key: 'category', header: 'Category', type: 'category' }
602
- ]}
603
- searchPlaceholder="Search models..."
604
- onRowClick={(item) => alert(item.name)}
605
- hover={true}
606
- />`}</code>
607
- </pre>
608
- </div>
609
- )}
610
- </ShowcaseSection>
611
- </Card>
612
-
613
- {/* Table Features */}
614
- <Card className="p-6" category={3}>
615
- <ShowcaseSection
616
- title="Table Features & Composition"
617
- description="How DataTable composes UI elements and leverages the design system"
618
- badge={{ text: "Architecture", variant: "category", category: 3 }}
619
- >
620
- <div className="space-y-4">
621
- <div className="grid md:grid-cols-2 gap-4">
622
- <div>
623
- <h4 className="text-sm font-medium mb-3">Integrated Components</h4>
624
- <div className="space-y-2 text-xs">
625
- <div className="p-2 bg-muted rounded">
626
- <code>Input</code> for search functionality
627
- </div>
628
- <div className="p-2 bg-muted rounded">
629
- <code>DataBadge</code> for status/category cells
630
- </div>
631
- <div className="p-2 bg-muted rounded">
632
- <code>Button</code> for actions
633
- </div>
634
- </div>
635
- </div>
636
-
637
- <div>
638
- <h4 className="text-sm font-medium mb-3">Features</h4>
639
- <div className="space-y-2 text-xs">
640
- <div className="p-2 bg-muted rounded">
641
- ✓ Client-side search/filter
642
- </div>
643
- <div className="p-2 bg-muted rounded">
644
- ✓ Hover row highlighting
645
- </div>
646
- <div className="p-2 bg-muted rounded">
647
- ✓ Click handlers
648
- </div>
649
- <div className="p-2 bg-muted rounded">
650
- ✓ Type-aware cell rendering
651
- </div>
652
- </div>
653
- </div>
654
- </div>
655
- </div>
656
- </ShowcaseSection>
657
- </Card>
658
-
659
- {/* Chart Component */}
660
- <Card className="p-6" category={4}>
661
- <ShowcaseSection
662
- title="Chart Component"
663
- description="Data visualization charts with multiple types, interactive features, and accessibility support"
664
- badge={{ text: "Business Component", variant: "category", category: 4 }}
665
- >
666
- <div className="space-y-6">
667
- <div className="grid md:grid-cols-2 gap-6">
668
- {/* Bar Chart */}
669
- <Chart
670
- title="Monthly Revenue"
671
- subtitle="Revenue by month"
672
- type="bar"
673
- category={1}
674
- height="medium"
675
- data={[
676
- { label: 'Jan', value: 4200 },
677
- { label: 'Feb', value: 5300 },
678
- { label: 'Mar', value: 6100 },
679
- { label: 'Apr', value: 5900 },
680
- { label: 'May', value: 7200 },
681
- { label: 'Jun', value: 8100 }
682
- ]}
683
- showValues
684
- showTrend
685
- trend={{ value: 12.5, label: "vs last period" }}
686
- onClick={() => alert('Chart clicked!')}
687
- />
688
-
689
- {/* Line Chart */}
690
- <Chart
691
- title="User Growth"
692
- subtitle="Active users over time"
693
- type="line"
694
- category={2}
695
- height="medium"
696
- data={[
697
- { label: 'Week 1', value: 120 },
698
- { label: 'Week 2', value: 145 },
699
- { label: 'Week 3', value: 139 },
700
- { label: 'Week 4', value: 167 },
701
- { label: 'Week 5', value: 185 },
702
- { label: 'Week 6', value: 201 }
703
- ]}
704
- showTrend
705
- trend={{ value: 8.3, label: "growth" }}
706
- />
707
- </div>
708
-
709
- <div className="grid md:grid-cols-2 gap-6">
710
- {/* Area Chart */}
711
- <Chart
712
- title="System Load"
713
- subtitle="CPU usage over time"
714
- type="area"
715
- category={4}
716
- data={[
717
- { label: '00:00', value: 45 },
718
- { label: '04:00', value: 32 },
719
- { label: '08:00', value: 67 },
720
- { label: '12:00', value: 78 },
721
- { label: '16:00', value: 82 },
722
- { label: '20:00', value: 54 }
723
- ]}
724
- height="compact"
725
- />
726
- </div>
727
-
728
- <div>
729
- <h4 className="text-sm font-medium mb-3">Chart Variants</h4>
730
- <div className="grid md:grid-cols-3 gap-4">
731
- <Chart
732
- title="Minimal Chart"
733
- type="bar"
734
- variant="minimal"
735
- category={5}
736
- data={[
737
- { label: 'A', value: 20 },
738
- { label: 'B', value: 35 },
739
- { label: 'C', value: 45 },
740
- { label: 'D', value: 30 }
741
- ]}
742
- height="sidebar"
743
- />
744
-
745
- <Chart
746
- title="Loading State"
747
- type="line"
748
- category={6}
749
- data={[]}
750
- isLoading
751
- height="sidebar"
752
- />
753
-
754
- <Chart
755
- title="Custom Colors"
756
- type="bar"
757
- category={7}
758
- data={[
759
- { label: 'Q1', value: 100 },
760
- { label: 'Q2', value: 150 },
761
- { label: 'Q3', value: 120 },
762
- { label: 'Q4', value: 180 }
763
- ]}
764
- colorOverrides={['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']}
765
- height="sidebar"
766
- />
767
- </div>
768
- </div>
769
-
770
- {showCode && (
771
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
772
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
773
- <code>{`<Chart
774
- title="Monthly Revenue"
775
- type="bar"
776
- category={1}
777
- data={chartData}
778
- showValues
779
- showTrend
780
- trend={{ value: 12.5, label: "vs last period" }}
781
- onClick={() => handleChartClick()}
782
- />`}</code>
783
- </pre>
784
- </div>
785
- )}
786
- </div>
787
- </ShowcaseSection>
788
- </Card>
789
-
790
- </div>
791
- </TabsContent>
792
-
793
- {/* Forms Section */}
794
- <TabsContent value="forms" className="space-y-6">
795
- <div className="space-y-2 mb-8">
796
- <h2 className="text-2xl font-bold text-foreground">Form Components</h2>
797
- <p className="text-muted-foreground">
798
- From base form inputs to complete form patterns with validation and organization.
799
- </p>
800
- </div>
801
-
802
- <div className="grid gap-6">
803
- {/* Base Form Elements */}
804
- <Card className="p-6" category={1}>
805
- <ShowcaseSection
806
- title="Base Form Elements"
807
- description="Foundation form components with labels and inputs"
808
- badge={{ text: "UI Components", variant: "category", category: 1 }}
809
- >
810
- <div className="space-y-4 max-w-md">
811
- <div className="space-y-2">
812
- <Label htmlFor="basic-input">Basic Label</Label>
813
- <Input id="basic-input" placeholder="Enter text..." />
814
- </div>
815
-
816
- <div className="space-y-2">
817
- <Label htmlFor="email-input">Email Address</Label>
818
- <Input id="email-input" type="email" placeholder="email@example.com" />
819
- </div>
820
-
821
- <div className="space-y-2">
822
- <Label htmlFor="password-input">Password</Label>
823
- <Input id="password-input" type="password" placeholder="Enter password" />
824
- </div>
825
-
826
- {showCode && (
827
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
828
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
829
- <code>{`<Label htmlFor="input">Label</Label>
830
- <Input id="input" placeholder="Enter text..." />`}</code>
831
- </pre>
832
- </div>
833
- )}
834
- </div>
835
- </ShowcaseSection>
836
- </Card>
837
-
838
- {/* FormField Component */}
839
- <Card className="p-6" category={2}>
840
- <ShowcaseSection
841
- title="FormField Component"
842
- description="Enhanced form field with label, description, and error states"
843
- badge={{ text: "Molecule Component", variant: "category", category: 2 }}
844
- >
845
- <div className="space-y-6 max-w-md">
846
- <FormField
847
- label="Username"
848
- description="This will be your display name"
849
- required
850
- htmlFor="username"
851
- >
852
- <Input id="username" placeholder="johndoe" />
853
- </FormField>
854
-
855
- <FormField
856
- label="Email"
857
- description="We'll never share your email"
858
- error="Please enter a valid email address"
859
- required
860
- htmlFor="email"
861
- >
862
- <Input id="email" type="email" placeholder="email@example.com" />
863
- </FormField>
864
-
865
- <FormField
866
- label="Bio"
867
- layout="horizontal"
868
- htmlFor="bio"
869
- >
870
- <Input id="bio" placeholder="Tell us about yourself" />
871
- </FormField>
872
-
873
- {showCode && (
874
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
875
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
876
- <code>{`<FormField
877
- label="Email"
878
- description="We'll never share your email"
879
- error={errors.email}
880
- required
881
- >
882
- <Input type="email" />
883
- </FormField>`}</code>
884
- </pre>
885
- </div>
886
- )}
887
- </div>
888
- </ShowcaseSection>
889
- </Card>
890
-
891
- {/* FormGroup Component */}
892
- <Card className="p-6" category={3}>
893
- <ShowcaseSection
894
- title="FormGroup Component"
895
- description="Organize related form fields into logical sections"
896
- badge={{ text: "Molecule Component", variant: "category", category: 3 }}
897
- >
898
- <div className="space-y-6">
899
- <FormGroup
900
- title="Personal Information"
901
- description="Basic details about your account"
902
- variant="card"
903
- category={6}
904
- >
905
- <FormField label="First Name" required htmlFor="firstName">
906
- <Input id="firstName" placeholder="John" />
907
- </FormField>
908
- <FormField label="Last Name" required htmlFor="lastName">
909
- <Input id="lastName" placeholder="Doe" />
910
- </FormField>
911
- <FormField label="Email" required htmlFor="groupEmail">
912
- <Input id="groupEmail" type="email" placeholder="john@example.com" />
913
- </FormField>
914
- </FormGroup>
915
-
916
- <FormGroup
917
- title="Preferences"
918
- description="Customize your experience"
919
- variant="section"
920
- >
921
- <FormField label="Language" htmlFor="language">
922
- <Input id="language" placeholder="English" />
923
- </FormField>
924
- <FormField label="Timezone" htmlFor="timezone">
925
- <Input id="timezone" placeholder="UTC-5" />
926
- </FormField>
927
- </FormGroup>
928
- </div>
929
- </ShowcaseSection>
930
- </Card>
931
-
932
- {/* SearchInput Component */}
933
- <Card className="p-6" category={4}>
934
- <ShowcaseSection
935
- title="SearchInput Component"
936
- description="Advanced search with autocomplete and keyboard navigation"
937
- badge={{ text: "Molecule Component", variant: "category", category: 4 }}
938
- >
939
- <div className="space-y-6">
940
- <div className="max-w-md">
941
- <h4 className="text-sm font-medium mb-3">With Results</h4>
942
- <SearchInput
943
- placeholder="Search users..."
944
- results={[
945
- { id: '1', label: 'John Doe', description: 'john@example.com', category: 'User', icon: <Users className="w-4 h-4" /> },
946
- { id: '2', label: 'Jane Smith', description: 'jane@example.com', category: 'Admin', icon: <Users className="w-4 h-4" /> },
947
- { id: '3', label: 'Analytics Dashboard', description: 'View analytics', category: 'Page', icon: <Database className="w-4 h-4" /> }
948
- ]}
949
- category={7}
950
- onSelect={(result) => alert(`Selected: ${result.label}`)}
951
- />
952
- </div>
953
-
954
- <div className="max-w-md">
955
- <h4 className="text-sm font-medium mb-3">Simple Search</h4>
956
- <SearchInput
957
- placeholder="Search anything..."
958
- clearable={false}
959
- category={2}
960
- />
961
- </div>
962
-
963
- {showCode && (
964
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
965
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
966
- <code>{`<SearchInput
967
- placeholder="Search users..."
968
- results={searchResults}
969
- category={7}
970
- onSelect={(result) => handleSelect(result)}
971
- />`}</code>
972
- </pre>
973
- </div>
974
- )}
975
- </div>
976
- </ShowcaseSection>
977
- </Card>
978
-
979
- {/* FileUpload Component */}
980
- <Card className="p-6" category={5}>
981
- <ShowcaseSection
982
- title="FileUpload Component"
983
- description="Advanced file upload with drag-and-drop, previews, validation, and progress tracking"
984
- badge={{ text: "Business Component", variant: "category", category: 5 }}
985
- >
986
- <div className="space-y-6">
987
- <div>
988
- <h4 className="text-sm font-medium mb-3">Default File Upload</h4>
989
- <FileUpload
990
- accept="image/*,.pdf,.doc,.docx"
991
- multiple
992
- maxSize={5 * 1024 * 1024}
993
- maxFiles={5}
994
- onChange={(files) => console.log('Files:', files)}
995
- onUpload={async (files) => {
996
- console.log('Uploading:', files);
997
- // Simulate upload
998
- await new Promise(resolve => setTimeout(resolve, 2000));
999
- }}
1000
- />
1001
- </div>
1002
-
1003
- <div className="grid md:grid-cols-2 gap-6">
1004
- <div>
1005
- <h4 className="text-sm font-medium mb-3">Compact Variant</h4>
1006
- <FileUpload
1007
- variant="compact"
1008
- accept=".csv,.xlsx"
1009
- maxSize={1 * 1024 * 1024}
1010
- uploadText="Upload spreadsheet"
1011
- />
1012
- </div>
1013
-
1014
- <div>
1015
- <h4 className="text-sm font-medium mb-3">Large Variant</h4>
1016
- <FileUpload
1017
- variant="large"
1018
- accept="image/*"
1019
- showPreview
1020
- uploadText="Drop images here"
1021
- dragText="Release to upload"
1022
- />
1023
- </div>
1024
- </div>
1025
-
1026
- {showCode && (
1027
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1028
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1029
- <code>{`<FileUpload
1030
- accept="image/*,.pdf"
1031
- multiple
1032
- maxSize={5 * 1024 * 1024}
1033
- showPreview
1034
- onUpload={async (files) => {
1035
- await uploadFiles(files);
1036
- }}
1037
- />`}</code>
1038
- </pre>
1039
- </div>
1040
- )}
1041
- </div>
1042
- </ShowcaseSection>
1043
- </Card>
1044
-
1045
- {/* DateTimePicker Component */}
1046
- <Card className="p-6" category={6}>
1047
- <ShowcaseSection
1048
- title="DateTimePicker Component"
1049
- description="Flexible date and time selection with multiple modes, formats, and range support"
1050
- badge={{ text: "Business Component", variant: "category", category: 6 }}
1051
- >
1052
- <div className="space-y-6">
1053
- <div className="grid md:grid-cols-2 gap-6">
1054
- <div>
1055
- <h4 className="text-sm font-medium mb-3">Date Picker</h4>
1056
- <DateTimePicker
1057
- mode="date"
1058
- value={selectedDate}
1059
- onChange={(date) => setSelectedDate(date || undefined)}
1060
- placeholder="Select date"
1061
- />
1062
- </div>
1063
-
1064
- <div>
1065
- <h4 className="text-sm font-medium mb-3">Time Picker</h4>
1066
- <DateTimePicker
1067
- mode="time"
1068
- value={selectedDate}
1069
- onChange={(date) => setSelectedDate(date || undefined)}
1070
- placeholder="Select time"
1071
- timeFormat="12h"
1072
- />
1073
- </div>
1074
-
1075
- <div>
1076
- <h4 className="text-sm font-medium mb-3">DateTime Picker</h4>
1077
- <DateTimePicker
1078
- mode="datetime"
1079
- value={selectedDate}
1080
- onChange={(date) => setSelectedDate(date || undefined)}
1081
- placeholder="Select date and time"
1082
- />
1083
- </div>
1084
-
1085
- <div>
1086
- <h4 className="text-sm font-medium mb-3">Date Range</h4>
1087
- <DateTimePicker
1088
- mode="date"
1089
- isRange
1090
- rangeValue={{ start: dateRange.start || null, end: dateRange.end || null }}
1091
- onRangeChange={(range) => setDateRange({ start: range.start || undefined, end: range.end || undefined })}
1092
- placeholder="Select date range"
1093
- />
1094
- </div>
1095
- </div>
1096
-
1097
- <div>
1098
- <h4 className="text-sm font-medium mb-3">Inline Calendar</h4>
1099
- <div className="flex justify-center">
1100
- <DateTimePicker
1101
- mode="date"
1102
- variant="inline"
1103
- value={selectedDate}
1104
- onChange={(date) => setSelectedDate(date || undefined)}
1105
- />
1106
- </div>
1107
- </div>
1108
-
1109
- <div className="grid md:grid-cols-3 gap-4">
1110
- <div>
1111
- <h4 className="text-sm font-medium mb-3">Compact Variant</h4>
1112
- <DateTimePicker
1113
- variant="compact"
1114
- mode="date"
1115
- value={selectedDate}
1116
- onChange={(date) => setSelectedDate(date || undefined)}
1117
- />
1118
- </div>
1119
-
1120
- <div>
1121
- <h4 className="text-sm font-medium mb-3">With Min/Max</h4>
1122
- <DateTimePicker
1123
- mode="date"
1124
- minDate={new Date()}
1125
- maxDate={new Date(Date.now() + 30 * 24 * 60 * 60 * 1000)}
1126
- placeholder="Next 30 days"
1127
- />
1128
- </div>
1129
-
1130
- <div>
1131
- <h4 className="text-sm font-medium mb-3">Error State</h4>
1132
- <DateTimePicker
1133
- mode="date"
1134
- error
1135
- placeholder="Invalid date"
1136
- />
1137
- </div>
1138
- </div>
1139
-
1140
- {showCode && (
1141
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1142
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1143
- <code>{`<DateTimePicker
1144
- mode="datetime"
1145
- value={selectedDate}
1146
- onChange={setSelectedDate}
1147
- minDate={new Date()}
1148
- timeFormat="12h"
1149
- />`}</code>
1150
- </pre>
1151
- </div>
1152
- )}
1153
- </div>
1154
- </ShowcaseSection>
1155
- </Card>
1156
-
1157
- {/* Form Architecture */}
1158
- <Card className="p-6" category={7}>
1159
- <ShowcaseSection
1160
- title="Form Composition & Validation"
1161
- description="How form components compose and integrate"
1162
- badge={{ text: "Architecture", variant: "category", category: 7 }}
1163
- >
1164
- <div className="space-y-4">
1165
- <div className="grid md:grid-cols-2 gap-4">
1166
- <div>
1167
- <h4 className="text-sm font-medium mb-3">Component Layers</h4>
1168
- <div className="space-y-2 text-xs">
1169
- <div className="p-2 bg-muted rounded">
1170
- <code>Input/Label</code> → Base elements
1171
- </div>
1172
- <div className="p-2 bg-muted rounded ml-4">
1173
- <code>FormField</code> → Field wrapper
1174
- </div>
1175
- <div className="p-2 bg-muted rounded ml-8">
1176
- <code>FormGroup</code> → Section organizer
1177
- </div>
1178
- </div>
1179
- </div>
1180
-
1181
- <div>
1182
- <h4 className="text-sm font-medium mb-3">Features</h4>
1183
- <div className="space-y-2 text-xs">
1184
- <div className="p-2 bg-muted rounded">
1185
- ✓ Built-in validation states
1186
- </div>
1187
- <div className="p-2 bg-muted rounded">
1188
- ✓ Required field indicators
1189
- </div>
1190
- <div className="p-2 bg-muted rounded">
1191
- ✓ Horizontal/vertical layouts
1192
- </div>
1193
- <div className="p-2 bg-muted rounded">
1194
- ✓ Category theming support
1195
- </div>
1196
- </div>
1197
- </div>
1198
- </div>
1199
- </div>
1200
- </ShowcaseSection>
1201
- </Card>
1202
-
1203
- </div>
1204
- </TabsContent>
1205
-
1206
- {/* Navigation Section */}
1207
- <TabsContent value="navigation" className="space-y-6">
1208
- <div className="space-y-2 mb-8">
1209
- <h2 className="text-2xl font-bold text-foreground">Navigation Components</h2>
1210
- <p className="text-muted-foreground">
1211
- Navigation patterns for breadcrumbs, menus, and pagination.
1212
- </p>
1213
- </div>
1214
-
1215
- <div className="grid gap-6">
1216
- {/* Breadcrumb Component */}
1217
- <Card className="p-6" category={1}>
1218
- <ShowcaseSection
1219
- title="Breadcrumb Component"
1220
- description="Navigation breadcrumbs with home icon and separators"
1221
- badge={{ text: "Molecule Component", variant: "category", category: 1 }}
1222
- >
1223
- <div className="space-y-4">
1224
- <Breadcrumb
1225
- items={[
1226
- { label: 'Dashboard', href: '/dashboard' },
1227
- { label: 'Projects', href: '/projects' },
1228
- { label: 'Analytics', active: true }
1229
- ]}
1230
- category={2}
1231
- />
1232
-
1233
- <Breadcrumb
1234
- items={[
1235
- { label: 'Settings', href: '/settings' },
1236
- { label: 'Users', href: '/users' },
1237
- { label: 'Edit Profile', active: true }
1238
- ]}
1239
- showHome={false}
1240
- separator={<ChevronRight className="w-3 h-3" />}
1241
- category={5}
1242
- />
1243
-
1244
- {showCode && (
1245
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1246
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1247
- <code>{`<Breadcrumb
1248
- items={[
1249
- { label: 'Dashboard', href: '/dashboard' },
1250
- { label: 'Projects', href: '/projects' },
1251
- { label: 'Analytics', active: true }
1252
- ]}
1253
- category={2}
1254
- />`}</code>
1255
- </pre>
1256
- </div>
1257
- )}
1258
- </div>
1259
- </ShowcaseSection>
1260
- </Card>
1261
-
1262
- {/* Pagination Component */}
1263
- <Card className="p-6" category={2}>
1264
- <ShowcaseSection
1265
- title="Pagination Component"
1266
- description="Page navigation with first/last controls and ellipsis"
1267
- badge={{ text: "Molecule Component", variant: "category", category: 2 }}
1268
- >
1269
- <div className="space-y-6">
1270
- <div>
1271
- <h4 className="text-sm font-medium mb-3">Full Pagination</h4>
1272
- <Pagination
1273
- currentPage={5}
1274
- totalPages={12}
1275
- onPageChange={(page) => console.log('Page:', page)}
1276
- category={3}
1277
- />
1278
- </div>
1279
-
1280
- <div>
1281
- <h4 className="text-sm font-medium mb-3">Simple Pagination</h4>
1282
- <Pagination
1283
- currentPage={1}
1284
- totalPages={3}
1285
- onPageChange={(page) => console.log('Page:', page)}
1286
- showFirstLast={false}
1287
- category={6}
1288
- size="sm"
1289
- />
1290
- </div>
1291
-
1292
- {showCode && (
1293
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1294
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1295
- <code>{`<Pagination
1296
- currentPage={5}
1297
- totalPages={12}
1298
- onPageChange={(page) => setPage(page)}
1299
- category={3}
1300
- />`}</code>
1301
- </pre>
1302
- </div>
1303
- )}
1304
- </div>
1305
- </ShowcaseSection>
1306
- </Card>
1307
-
1308
- {/* NavMenu Component */}
1309
- <Card className="p-6" category={3}>
1310
- <ShowcaseSection
1311
- title="NavMenu Component"
1312
- description="Navigation menus with horizontal and vertical orientations"
1313
- badge={{ text: "Molecule Component", variant: "category", category: 3 }}
1314
- >
1315
- <div className="space-y-8">
1316
- <div>
1317
- <h4 className="text-sm font-medium mb-4">Horizontal Menu</h4>
1318
- <NavMenu
1319
- items={[
1320
- { id: 'home', label: 'Home', href: '/home', icon: <Home className="w-4 h-4" />, category: 1 },
1321
- { id: 'projects', label: 'Projects', href: '/projects', icon: <FileText className="w-4 h-4" />, category: 2 },
1322
- { id: 'settings', label: 'Settings', href: '/settings', icon: <Settings className="w-4 h-4" />, category: 3 }
1323
- ]}
1324
- orientation="horizontal"
1325
- defaultCategory={4}
1326
- />
1327
- </div>
1328
-
1329
- <div>
1330
- <h4 className="text-sm font-medium mb-4">Vertical Menu</h4>
1331
- <div className="max-w-64">
1332
- <NavMenu
1333
- items={[
1334
- { id: 'dashboard', label: 'Dashboard', href: '/dashboard', icon: <Database className="w-4 h-4" />, category: 1 },
1335
- { id: 'analytics', label: 'Analytics', href: '/analytics', icon: <TrendingUp className="w-4 h-4" />, category: 2 },
1336
- { id: 'users', label: 'Users', href: '/users', icon: <Users className="w-4 h-4" />, category: 3 }
1337
- ]}
1338
- orientation="vertical"
1339
- defaultCategory={4}
1340
- />
1341
- </div>
1342
- </div>
1343
- </div>
1344
- </ShowcaseSection>
1345
- </Card>
1346
-
1347
- {/* Accordion Component */}
1348
- <Card className="p-6" category={4}>
1349
- <ShowcaseSection
1350
- title="Accordion Component"
1351
- description="Collapsible content sections with smooth animations and keyboard navigation"
1352
- badge={{ text: "Business Component", variant: "category", category: 4 }}
1353
- >
1354
- <div className="space-y-8">
1355
- <div>
1356
- <h4 className="text-sm font-medium mb-4">Default Accordion</h4>
1357
- <Accordion
1358
- items={[
1359
- {
1360
- id: 'section1',
1361
- title: 'Getting Started',
1362
- icon: <Home className="w-4 h-4" />,
1363
- content: (
1364
- <div className="space-y-2">
1365
- <p>Welcome to our platform! This section covers the basics of getting started.</p>
1366
- <ul className="list-disc list-inside space-y-1 text-sm">
1367
- <li>Create your account</li>
1368
- <li>Set up your profile</li>
1369
- <li>Explore the dashboard</li>
1370
- </ul>
1371
- </div>
1372
- )
1373
- },
1374
- {
1375
- id: 'section2',
1376
- title: 'API Documentation',
1377
- icon: <FileText className="w-4 h-4" />,
1378
- content: (
1379
- <div className="space-y-2">
1380
- <p>Complete API reference and integration guides.</p>
1381
- <div className="grid grid-cols-2 gap-2 text-sm">
1382
- <div className="p-2 bg-muted/30 rounded">Authentication</div>
1383
- <div className="p-2 bg-muted/30 rounded">Endpoints</div>
1384
- <div className="p-2 bg-muted/30 rounded">Examples</div>
1385
- <div className="p-2 bg-muted/30 rounded">SDKs</div>
1386
- </div>
1387
- </div>
1388
- )
1389
- },
1390
- {
1391
- id: 'section3',
1392
- title: 'Advanced Features',
1393
- icon: <Settings className="w-4 h-4" />,
1394
- content: (
1395
- <div className="space-y-2">
1396
- <p>Explore advanced functionality and customization options.</p>
1397
- <p className="text-sm">Advanced features include custom integrations, webhooks, and enterprise-level analytics.</p>
1398
- </div>
1399
- )
1400
- }
1401
- ]}
1402
- category={4}
1403
- defaultOpen="section1"
1404
- />
1405
- </div>
1406
-
1407
- <div>
1408
- <h4 className="text-sm font-medium mb-4">Multiple Open (Bordered Variant)</h4>
1409
- <Accordion
1410
- items={[
1411
- {
1412
- id: 'faq1',
1413
- title: 'How do I reset my password?',
1414
- content: 'You can reset your password by clicking the "Forgot Password" link on the login page.'
1415
- },
1416
- {
1417
- id: 'faq2',
1418
- title: 'What are the subscription plans?',
1419
- content: (
1420
- <div className="space-y-2">
1421
- <p>We offer three subscription tiers:</p>
1422
- <div className="space-y-1 text-sm">
1423
- <div>• <strong>Starter</strong>: $9/month - Basic features</div>
1424
- <div>• <strong>Pro</strong>: $29/month - Advanced features</div>
1425
- <div>• <strong>Enterprise</strong>: Custom pricing - Full suite</div>
1426
- </div>
1427
- </div>
1428
- )
1429
- },
1430
- {
1431
- id: 'faq3',
1432
- title: 'How can I contact support?',
1433
- content: 'You can reach our support team via email at support@example.com or through the in-app chat.'
1434
- }
1435
- ]}
1436
- variant="bordered"
1437
- allowMultiple={true}
1438
- category={5}
1439
- defaultOpen={['faq1', 'faq2']}
1440
- />
1441
- </div>
1442
-
1443
- <div>
1444
- <h4 className="text-sm font-medium mb-4">Filled Variant with Categories</h4>
1445
- <Accordion
1446
- items={[
1447
- {
1448
- id: 'analytics',
1449
- title: 'Analytics & Reporting',
1450
- icon: <TrendingUp className="w-4 h-4" />,
1451
- content: 'Comprehensive analytics dashboard with real-time metrics, custom reports, and data export capabilities.'
1452
- },
1453
- {
1454
- id: 'users',
1455
- title: 'User Management',
1456
- icon: <Users className="w-4 h-4" />,
1457
- content: 'Manage user accounts, permissions, roles, and access controls across your organization.'
1458
- },
1459
- {
1460
- id: 'database',
1461
- title: 'Data Integration',
1462
- icon: <Database className="w-4 h-4" />,
1463
- content: 'Connect multiple data sources, set up automated pipelines, and manage data transformations.'
1464
- }
1465
- ]}
1466
- variant="filled"
1467
- category={6}
1468
- />
1469
- </div>
1470
-
1471
- {showCode && (
1472
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1473
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1474
- <code>{`<Accordion
1475
- items={[
1476
- {
1477
- id: 'section1',
1478
- title: 'Getting Started',
1479
- icon: <Home className="w-4 h-4" />,
1480
- content: 'Welcome to our platform!'
1481
- },
1482
- {
1483
- id: 'section2',
1484
- title: 'API Documentation',
1485
- content: 'Complete API reference...'
1486
- }
1487
- ]}
1488
- category={4}
1489
- defaultOpen="section1"
1490
- />`}</code>
1491
- </pre>
1492
- </div>
1493
- )}
1494
- </div>
1495
- </ShowcaseSection>
1496
- </Card>
1497
- </div>
1498
- </TabsContent>
1499
-
1500
- {/* Feedback Section */}
1501
- <TabsContent value="feedback" className="space-y-6">
1502
- <div className="space-y-2 mb-8">
1503
- <h2 className="text-2xl font-bold text-foreground">Feedback Components</h2>
1504
- <p className="text-muted-foreground">
1505
- User feedback patterns including alerts, progress indicators, and notifications.
1506
- </p>
1507
- </div>
1508
-
1509
- <div className="grid gap-6">
1510
- {/* Alert Component */}
1511
- <Card className="p-6" category={1}>
1512
- <ShowcaseSection
1513
- title="Alert Component"
1514
- description="Status-based alerts with dismissible options"
1515
- badge={{ text: "Molecule Component", variant: "category", category: 1 }}
1516
- >
1517
- <div className="space-y-4">
1518
- <Alert status="success" title="Success!" dismissible>
1519
- Your changes have been saved successfully.
1520
- </Alert>
1521
-
1522
- <Alert status="warning" title="Warning" variant="outlined">
1523
- Please review your settings before continuing.
1524
- </Alert>
1525
-
1526
- <Alert status="error" dismissible>
1527
- There was an error processing your request. Please try again.
1528
- </Alert>
1529
-
1530
- <Alert status="info" variant="filled" hideIcon>
1531
- This is an informational message with no icon.
1532
- </Alert>
1533
-
1534
- {showCode && (
1535
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1536
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1537
- <code>{`<Alert status="success" title="Success!" dismissible>
1538
- Your changes have been saved successfully.
1539
- </Alert>`}</code>
1540
- </pre>
1541
- </div>
1542
- )}
1543
- </div>
1544
- </ShowcaseSection>
1545
- </Card>
1546
-
1547
- {/* ProgressBar Component */}
1548
- <Card className="p-6" category={2}>
1549
- <ShowcaseSection
1550
- title="ProgressBar Component"
1551
- description="Progress indicators with status colors and animations"
1552
- badge={{ text: "Molecule Component", variant: "category", category: 2 }}
1553
- >
1554
- <div className="space-y-6">
1555
- <ProgressBar
1556
- value={75}
1557
- status="success"
1558
- showLabel
1559
- label="Upload Progress"
1560
- />
1561
-
1562
- <ProgressBar
1563
- value={45}
1564
- category={3}
1565
- showLabel
1566
- size="lg"
1567
- />
1568
-
1569
- <ProgressBar
1570
- value={90}
1571
- status="warning"
1572
- variant="striped"
1573
- size="sm"
1574
- />
1575
-
1576
- <ProgressBar
1577
- value={60}
1578
- category={6}
1579
- variant="animated"
1580
- showLabel
1581
- />
1582
-
1583
- {showCode && (
1584
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1585
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1586
- <code>{`<ProgressBar
1587
- value={75}
1588
- status="success"
1589
- showLabel
1590
- label="Upload Progress"
1591
- />`}</code>
1592
- </pre>
1593
- </div>
1594
- )}
1595
- </div>
1596
- </ShowcaseSection>
1597
- </Card>
1598
-
1599
- {/* Toast Component */}
1600
- <Card className="p-6" category={3}>
1601
- <ShowcaseSection
1602
- title="Toast Component"
1603
- description="Non-intrusive notifications with auto-dismiss, progress indicators, and multiple positions"
1604
- badge={{ text: "Molecule Component", variant: "category", category: 3 }}
1605
- >
1606
- <div className="space-y-6">
1607
- <div className="grid md:grid-cols-2 gap-4">
1608
- <div>
1609
- <h4 className="text-sm font-medium mb-3">Toast Types</h4>
1610
- <div className="flex flex-wrap gap-2">
1611
- <Button
1612
- variant="outline"
1613
- size="sm"
1614
- onClick={() => {
1615
- const id = Date.now().toString();
1616
- setToasts([...toasts, { id, status: 'success', title: 'Success!', message: 'Model saved successfully.' }]);
1617
- setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);
1618
- }}
1619
- >
1620
- Success Toast
1621
- </Button>
1622
- <Button
1623
- variant="outline"
1624
- size="sm"
1625
- onClick={() => {
1626
- const id = Date.now().toString();
1627
- setToasts([...toasts, { id, status: 'warning', title: 'Warning', message: 'Model runtime exceeded threshold.' }]);
1628
- setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);
1629
- }}
1630
- >
1631
- Warning Toast
1632
- </Button>
1633
- <Button
1634
- variant="outline"
1635
- size="sm"
1636
- onClick={() => {
1637
- const id = Date.now().toString();
1638
- setToasts([...toasts, { id, status: 'error', title: 'Error', message: 'Failed to connect to database.' }]);
1639
- setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);
1640
- }}
1641
- >
1642
- Error Toast
1643
- </Button>
1644
- <Button
1645
- variant="outline"
1646
- size="sm"
1647
- onClick={() => {
1648
- const id = Date.now().toString();
1649
- setToasts([...toasts, { id, status: 'info', title: 'Info', message: 'New update available.' }]);
1650
- setTimeout(() => setToasts(prev => prev.filter(t => t.id !== id)), 5000);
1651
- }}
1652
- >
1653
- Info Toast
1654
- </Button>
1655
- </div>
1656
- </div>
1657
-
1658
- <div>
1659
- <h4 className="text-sm font-medium mb-3">Features</h4>
1660
- <ul className="text-sm text-muted-foreground space-y-1">
1661
- <li>• Auto-dismiss with configurable duration</li>
1662
- <li>• Progress indicator for timed dismissal</li>
1663
- <li>• Multiple positioning options</li>
1664
- <li>• Dismissible with close button</li>
1665
- <li>• Status-based theming</li>
1666
- </ul>
1667
- </div>
1668
- </div>
1669
-
1670
- {showCode && (
1671
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1672
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1673
- <code>{`<Toast
1674
- status="success"
1675
- title="Success!"
1676
- duration={5000}
1677
- showProgress
1678
- onDismiss={() => handleDismiss()}
1679
- >
1680
- Model saved successfully.
1681
- </Toast>`}</code>
1682
- </pre>
1683
- </div>
1684
- )}
1685
- </div>
1686
- </ShowcaseSection>
1687
- </Card>
1688
-
1689
- {/* Feedback Composition */}
1690
- <Card className="p-6" category={3}>
1691
- <ShowcaseSection
1692
- title="Feedback System Architecture"
1693
- description="How feedback components integrate with the design system"
1694
- badge={{ text: "Architecture", variant: "category", category: 3 }}
1695
- >
1696
- <div className="space-y-4">
1697
- <div className="grid md:grid-cols-2 gap-4">
1698
- <div>
1699
- <h4 className="text-sm font-medium mb-3">Status Theming</h4>
1700
- <div className="space-y-2 text-xs">
1701
- <div className="p-2 bg-status-success/10 text-status-success rounded">
1702
- Success states use <code>--status-success</code>
1703
- </div>
1704
- <div className="p-2 bg-status-warning/10 text-status-warning rounded">
1705
- Warning states use <code>--status-warning</code>
1706
- </div>
1707
- <div className="p-2 bg-status-error/10 text-status-error rounded">
1708
- Error states use <code>--status-error</code>
1709
- </div>
1710
- </div>
1711
- </div>
1712
-
1713
- <div>
1714
- <h4 className="text-sm font-medium mb-3">Toast Notifications</h4>
1715
- <div className="space-y-2 text-xs">
1716
- <div className="p-2 bg-muted rounded">
1717
- <p className="font-medium mb-1">Toast component features:</p>
1718
- <ul className="list-disc list-inside space-y-1 text-muted-foreground">
1719
- <li>Auto-dismiss timer</li>
1720
- <li>Progress indicator</li>
1721
- <li>Stacking behavior</li>
1722
- <li>Status-based styling</li>
1723
- </ul>
1724
- </div>
1725
- </div>
1726
- </div>
1727
- </div>
1728
- </div>
1729
- </ShowcaseSection>
1730
- </Card>
1731
-
1732
- </div>
1733
- </TabsContent>
1734
-
1735
- {/* States Section */}
1736
- <TabsContent value="states" className="space-y-6">
1737
- <div className="space-y-2 mb-8">
1738
- <h2 className="text-2xl font-bold text-foreground">State Components</h2>
1739
- <p className="text-muted-foreground">
1740
- Loading states, empty states, and error states for better user experience.
1741
- </p>
1742
- </div>
1743
-
1744
- <div className="grid gap-6">
1745
- {/* Loading States */}
1746
- <Card className="p-6" category={1}>
1747
- <ShowcaseSection
1748
- title="Loading States"
1749
- description="Base loading indicators and skeleton components"
1750
- badge={{ text: "UI Components", variant: "category", category: 1 }}
1751
- >
1752
- <div className="space-y-4">
1753
- <div className="flex items-center gap-4">
1754
- <Spinner size="sm" />
1755
- <Spinner size="md" />
1756
- <Spinner size="lg" />
1757
- <span className="text-sm text-muted-foreground">Spinner component</span>
1758
- </div>
1759
-
1760
- <div className="space-y-2">
1761
- <Skeleton className="h-4 w-full" />
1762
- <Skeleton className="h-4 w-3/4" />
1763
- <Skeleton className="h-4 w-1/2" />
1764
- <span className="text-sm text-muted-foreground">Skeleton loader</span>
1765
- </div>
1766
-
1767
- {showCode && (
1768
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1769
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1770
- <code>{`<Spinner size="md" />
1771
- <Skeleton className="h-4 w-full" />`}</code>
1772
- </pre>
1773
- </div>
1774
- )}
1775
- </div>
1776
- </ShowcaseSection>
1777
- </Card>
1778
-
1779
- {/* EmptyState Component */}
1780
- <Card className="p-6" category={2}>
1781
- <ShowcaseSection
1782
- title="EmptyState Component"
1783
- description="Informative empty states with actions for different scenarios"
1784
- badge={{ text: "Business Component", variant: "category", category: 2 }}
1785
- >
1786
- <div className="grid md:grid-cols-2 gap-6">
1787
- <EmptyState
1788
- variant="no-data"
1789
- title="No models found"
1790
- description="Get started by creating your first dbt model."
1791
- action={{
1792
- label: "Create Model",
1793
- onClick: () => alert('Create model!')
1794
- }}
1795
- />
1796
-
1797
- <EmptyState
1798
- variant="no-results"
1799
- title="No search results"
1800
- description="Try adjusting your search terms."
1801
- action={{
1802
- label: "Clear Filters",
1803
- onClick: () => alert('Clear filters!')
1804
- }}
1805
- secondaryAction={{
1806
- label: "Browse All",
1807
- onClick: () => alert('Browse all!')
1808
- }}
1809
- />
1810
-
1811
- <EmptyState
1812
- variant="error"
1813
- title="Connection failed"
1814
- description="Unable to connect to the database."
1815
- action={{
1816
- label: "Retry",
1817
- onClick: () => alert('Retry!')
1818
- }}
1819
- />
1820
-
1821
- <EmptyState
1822
- variant="loading"
1823
- title="Loading data"
1824
- description="Please wait while we fetch your data."
1825
- />
1826
- </div>
1827
-
1828
- {showCode && (
1829
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1830
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1831
- <code>{`<EmptyState
1832
- variant="no-data"
1833
- title="No models found"
1834
- description="Get started by creating your first model."
1835
- action={{
1836
- label: "Create Model",
1837
- onClick: () => createModel()
1838
- }}
1839
- />`}</code>
1840
- </pre>
1841
- </div>
1842
- )}
1843
- </ShowcaseSection>
1844
- </Card>
1845
-
1846
- {/* State Architecture */}
1847
- <Card className="p-6" category={3}>
1848
- <ShowcaseSection
1849
- title="State Management Architecture"
1850
- description="How state components compose and provide user feedback"
1851
- badge={{ text: "Architecture", variant: "category", category: 3 }}
1852
- >
1853
- <div className="space-y-4">
1854
- <div className="grid md:grid-cols-2 gap-4">
1855
- <div>
1856
- <h4 className="text-sm font-medium mb-3">State Types</h4>
1857
- <div className="space-y-2 text-xs">
1858
- <div className="p-2 bg-muted rounded">
1859
- <code>loading</code> → Data fetching
1860
- </div>
1861
- <div className="p-2 bg-muted rounded">
1862
- <code>no-data</code> → Empty initial state
1863
- </div>
1864
- <div className="p-2 bg-muted rounded">
1865
- <code>no-results</code> → Search/filter empty
1866
- </div>
1867
- <div className="p-2 bg-muted rounded">
1868
- <code>error</code> → Operation failed
1869
- </div>
1870
- </div>
1871
- </div>
1872
-
1873
- <div>
1874
- <h4 className="text-sm font-medium mb-3">Components Used</h4>
1875
- <div className="space-y-2 text-xs">
1876
- <div className="p-2 bg-muted rounded">
1877
- Uses <code>Button</code> for actions
1878
- </div>
1879
- <div className="p-2 bg-muted rounded">
1880
- Uses <code>Card</code> for container
1881
- </div>
1882
- <div className="p-2 bg-muted rounded">
1883
- SVG illustrations for visual interest
1884
- </div>
1885
- <div className="p-2 bg-muted rounded">
1886
- Consistent typography hierarchy
1887
- </div>
1888
- </div>
1889
- </div>
1890
- </div>
1891
- </div>
1892
- </ShowcaseSection>
1893
- </Card>
1894
- </div>
1895
- </TabsContent>
1896
-
1897
-
1898
- {/* Typography Section */}
1899
- <TabsContent value="typography" className="space-y-6">
1900
- <div className="space-y-2 mb-8">
1901
- <h2 className="text-2xl font-bold text-foreground">Typography System</h2>
1902
- <p className="text-muted-foreground">
1903
- From base typography to data-focused patterns optimized for analytics interfaces.
1904
- </p>
1905
- </div>
1906
-
1907
- <div className="grid gap-6">
1908
- {/* Base Typography */}
1909
- <Card className="p-6" category={1}>
1910
- <ShowcaseSection
1911
- title="Base Typography"
1912
- description="Foundation type scale for headings, body text, and UI elements"
1913
- badge={{ text: "UI Typography", variant: "category", category: 1 }}
1914
- >
1915
- <div className="space-y-6">
1916
- <div>
1917
- <h4 className="text-sm font-medium mb-4">Headings</h4>
1918
- <div className="space-y-3">
1919
- <h1 className="text-4xl font-bold">Heading 1 - 36px Bold</h1>
1920
- <h2 className="text-3xl font-semibold">Heading 2 - 30px Semibold</h2>
1921
- <h3 className="text-2xl font-semibold">Heading 3 - 24px Semibold</h3>
1922
- <h4 className="text-xl font-medium">Heading 4 - 20px Medium</h4>
1923
- <h5 className="text-lg font-medium">Heading 5 - 18px Medium</h5>
1924
- <h6 className="text-base font-medium">Heading 6 - 16px Medium</h6>
1925
- </div>
1926
- </div>
1927
-
1928
- <div>
1929
- <h4 className="text-sm font-medium mb-4">Body Text</h4>
1930
- <div className="space-y-3">
1931
- <p className="text-lg">Large body text for emphasis - 18px regular</p>
1932
- <p className="text-base">Base body text for content - 16px regular</p>
1933
- <p className="text-sm">Small body text for secondary content - 14px regular</p>
1934
- <p className="text-xs">Extra small text for metadata - 12px regular</p>
1935
- </div>
1936
- </div>
1937
-
1938
- {showCode && (
1939
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
1940
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
1941
- <code>
1942
- {`<h1 className="text-4xl font-bold">Heading</h1>
1943
- <p className="text-base">Body text</p>`}
1944
- </code>
1945
- </pre>
1946
- </div>
1947
- )}
1948
- </div>
1949
- </ShowcaseSection>
1950
- </Card>
1951
-
1952
- {/* Data Typography */}
1953
- <Card className="p-6" category={2}>
1954
- <ShowcaseSection
1955
- title="Data Typography Patterns"
1956
- description="Specialized typography for data presentation and analytics"
1957
- badge={{ text: "Business Patterns", variant: "category", category: 2 }}
1958
- >
1959
- <div className="space-y-6">
1960
- <div className="grid md:grid-cols-2 gap-6">
1961
- <div>
1962
- <h4 className="text-sm font-medium mb-4">Data Display</h4>
1963
- <div className="space-y-4">
1964
- <Card className="p-4 bg-background">
1965
- <div className="text-data-label mb-1">METRIC LABEL</div>
1966
- <div className="text-data-value">1,234.56</div>
1967
- <div className="text-data-meta">+12.3% from last period</div>
1968
- </Card>
1969
-
1970
- <Card className="p-4 bg-background">
1971
- <div className="text-data-label mb-1">STATUS</div>
1972
- <div className="text-data-value text-status-success">Healthy</div>
1973
- <div className="text-data-meta">All systems operational</div>
1974
- </Card>
1975
- </div>
1976
- </div>
1977
-
1978
- <div>
1979
- <h4 className="text-sm font-medium mb-4">Table Typography</h4>
1980
- <Table>
1981
- <TableHeader>
1982
- <TableRow>
1983
- <TableHead className="text-data-label">COLUMN</TableHead>
1984
- <TableHead className="text-data-label text-right">VALUE</TableHead>
1985
- </TableRow>
1986
- </TableHeader>
1987
- <TableBody>
1988
- <TableRow>
1989
- <TableCell className="text-data-value">Row Item</TableCell>
1990
- <TableCell className="text-data-value text-right">123</TableCell>
1991
- </TableRow>
1992
- <TableRow>
1993
- <TableCell className="text-data-meta">Metadata</TableCell>
1994
- <TableCell className="text-data-meta text-right">Info</TableCell>
1995
- </TableRow>
1996
- </TableBody>
1997
- </Table>
1998
- </div>
1999
- </div>
2000
-
2001
- {showCode && (
2002
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
2003
- <pre className="text-sm font-mono text-foreground overflow-x-auto">
2004
- <code>{`<div className="text-data-label">METRIC LABEL</div>
2005
- <div className="text-data-value">1,234.56</div>
2006
- <div className="text-data-meta">+12.3% from last period</div>`}</code>
2007
- </pre>
2008
- </div>
2009
- )}
2010
- </div>
2011
- </ShowcaseSection>
2012
- </Card>
2013
-
2014
- {/* Typography Utilities */}
2015
- <Card className="p-6" category={3}>
2016
- <ShowcaseSection
2017
- title="Typography Utilities"
2018
- description="Utility classes for text styling and layout"
2019
- badge={{ text: "Utilities", variant: "category", category: 3 }}
2020
- >
2021
- <div className="space-y-6">
2022
- <div className="grid md:grid-cols-2 gap-6">
2023
- <div>
2024
- <h4 className="text-sm font-medium mb-4">Text Colors</h4>
2025
- <div className="space-y-2">
2026
- <p className="text-foreground">text-foreground - Primary text</p>
2027
- <p className="text-muted-foreground">text-muted-foreground - Secondary text</p>
2028
- <p className="text-primary">text-primary - Brand color</p>
2029
- <p className="text-status-success">text-status-success - Success state</p>
2030
- <p className="text-status-error">text-status-error - Error state</p>
2031
- </div>
2032
- </div>
2033
-
2034
- <div>
2035
- <h4 className="text-sm font-medium mb-4">Font Weights</h4>
2036
- <div className="space-y-2">
2037
- <p className="font-thin">font-thin - 100</p>
2038
- <p className="font-light">font-light - 300</p>
2039
- <p className="font-normal">font-normal - 400</p>
2040
- <p className="font-medium">font-medium - 500</p>
2041
- <p className="font-semibold">font-semibold - 600</p>
2042
- <p className="font-bold">font-bold - 700</p>
2043
- </div>
2044
- </div>
2045
- </div>
2046
-
2047
- <div>
2048
- <h4 className="text-sm font-medium mb-4">Text Alignment & Spacing</h4>
2049
- <div className="grid md:grid-cols-3 gap-4">
2050
- <Card className="p-4 text-left" category={1}>
2051
- <p className="font-medium">Left Aligned</p>
2052
- <p className="text-sm text-muted-foreground">text-left</p>
2053
- </Card>
2054
- <Card className="p-4 text-center" category={2}>
2055
- <p className="font-medium">Center Aligned</p>
2056
- <p className="text-sm text-muted-foreground">text-center</p>
2057
- </Card>
2058
- <Card className="p-4 text-right" category={3}>
2059
- <p className="font-medium">Right Aligned</p>
2060
- <p className="text-sm text-muted-foreground">text-right</p>
2061
- </Card>
2062
- </div>
2063
- </div>
2064
- </div>
2065
- </ShowcaseSection>
2066
- </Card>
2067
-
2068
- {/* Typography in Components */}
2069
- <Card className="p-6" category={4}>
2070
- <ShowcaseSection
2071
- title="Typography in Context"
2072
- description="How typography works within component compositions"
2073
- badge={{ text: "Integration", variant: "category", category: 4 }}
2074
- >
2075
- <div className="space-y-6">
2076
- <div className="grid md:grid-cols-2 gap-6">
2077
- <StatCard
2078
- title="Typography in StatCard"
2079
- value="99.9%"
2080
- subtitle="Uses data typography patterns"
2081
- category={1}
2082
- icon={<Database className="w-5 h-5" />}
2083
- trend={{ value: 2.3, label: "improvement" }}
2084
- />
2085
-
2086
- <Card className="p-4" category={2}>
2087
- <div className="flex items-start justify-between mb-2">
2088
- <h3 className="text-lg font-semibold">Card Title</h3>
2089
- <DataBadge variant="category" category={2} size="sm">Active</DataBadge>
2090
- </div>
2091
- <p className="text-sm text-muted-foreground mb-4">
2092
- Card description using muted foreground color for secondary text.
2093
- </p>
2094
- <div className="flex items-center gap-4">
2095
- <div>
2096
- <div className="text-data-label">STATUS</div>
2097
- <div className="text-data-value">Online</div>
2098
- </div>
2099
- <div>
2100
- <div className="text-data-label">UPTIME</div>
2101
- <div className="text-data-value">99.9%</div>
2102
- </div>
2103
- </div>
2104
- </Card>
2105
- </div>
2106
-
2107
- <Alert status="info" title="Typography Best Practices">
2108
- <ul className="list-disc list-inside space-y-1 text-sm">
2109
- <li>Use <code className="text-xs bg-muted px-1 rounded">text-data-label</code> for metric labels</li>
2110
- <li>Use <code className="text-xs bg-muted px-1 rounded">text-data-value</code> for prominent values</li>
2111
- <li>Use <code className="text-xs bg-muted px-1 rounded">text-muted-foreground</code> for secondary text</li>
2112
- <li>Maintain consistent hierarchy with font sizes and weights</li>
2113
- </ul>
2114
- </Alert>
2115
- </div>
2116
- </ShowcaseSection>
2117
- </Card>
2118
-
2119
- {/* Typography Architecture */}
2120
- <Card className="p-6" category={5}>
2121
- <ShowcaseSection
2122
- title="Typography System Architecture"
2123
- description="Design tokens and CSS variables powering the typography system"
2124
- badge={{ text: "Architecture", variant: "category", category: 5 }}
2125
- >
2126
- <div className="space-y-4">
2127
- <div className="grid md:grid-cols-2 gap-4">
2128
- <div>
2129
- <h4 className="text-sm font-medium mb-3">Type Scale</h4>
2130
- <div className="space-y-2 text-xs font-mono">
2131
- <div className="p-2 bg-muted rounded">
2132
- --font-size-xs: 0.75rem (12px)
2133
- </div>
2134
- <div className="p-2 bg-muted rounded">
2135
- --font-size-sm: 0.875rem (14px)
2136
- </div>
2137
- <div className="p-2 bg-muted rounded">
2138
- --font-size-base: 1rem (16px)
2139
- </div>
2140
- <div className="p-2 bg-muted rounded">
2141
- --font-size-lg: 1.125rem (18px)
2142
- </div>
2143
- <div className="p-2 bg-muted rounded">
2144
- --font-size-xl: 1.25rem (20px)
2145
- </div>
2146
- </div>
2147
- </div>
2148
-
2149
- <div>
2150
- <h4 className="text-sm font-medium mb-3">Data Typography Classes</h4>
2151
- <div className="space-y-2 text-xs">
2152
- <div className="p-2 bg-muted rounded">
2153
- <code>.text-data-label</code> → Uppercase, smaller, medium weight
2154
- </div>
2155
- <div className="p-2 bg-muted rounded">
2156
- <code>.text-data-value</code> → Larger, semibold, high contrast
2157
- </div>
2158
- <div className="p-2 bg-muted rounded">
2159
- <code>.text-data-meta</code> → Smaller, muted color
2160
- </div>
2161
- <div className="p-2 bg-muted rounded">
2162
- <code>.text-data-*</code> → Sized variants (xs, sm, base, lg, xl)
2163
- </div>
2164
- </div>
2165
- </div>
2166
- </div>
2167
-
2168
- {showCode && (
2169
- <div className="mt-4 p-4 bg-muted border border-border rounded-md">
2170
- <h5 className="font-medium mb-2">Usage Guidelines</h5>
2171
- <ul className="text-sm space-y-1 text-muted-foreground">
2172
- <li>• Use base typography for general UI text</li>
2173
- <li>• Use data typography for metrics, values, and data presentation</li>
2174
- <li>• Maintain consistent hierarchy within components</li>
2175
- <li>• Leverage color utilities for semantic meaning</li>
2176
- </ul>
2177
- </div>
2178
- )}
2179
- </div>
2180
- </ShowcaseSection>
2181
- </Card>
2182
- </div>
2183
- </TabsContent>
2184
-
2185
- {/* Palettes Section */}
2186
- <TabsContent value="palettes" className="space-y-6">
2187
- <div className="space-y-2 mb-8">
2188
- <h2 className="text-2xl font-bold text-foreground">Color System & Palettes</h2>
2189
- <p className="text-muted-foreground">
2190
- Complete color system including individual color swatches and predefined palette combinations for data visualization and interface design.
2191
- </p>
2192
- </div>
2193
-
2194
- <div className="grid gap-6">
2195
- {/* Category Colors - Individual Swatches */}
2196
- <Card className="p-6" category={1}>
2197
- <ShowcaseSection
2198
- title="Category Colors"
2199
- description="Primary colors for categorizing different types of data, models, and content sections."
2200
- badge={{ text: "Data Classification", variant: "category", category: 1 }}
2201
- >
2202
- <div className="grid grid-cols-4 md:grid-cols-8 gap-4">
2203
- {[
2204
- { num: 1, name: 'Blue', usage: 'Primary data' },
2205
- { num: 2, name: 'Teal', usage: 'Models' },
2206
- { num: 3, name: 'Orange', usage: 'Tests' },
2207
- { num: 4, name: 'Purple', usage: 'Sources' },
2208
- { num: 5, name: 'Pink', usage: 'Analytics' },
2209
- { num: 6, name: 'Green', usage: 'Jobs' },
2210
- { num: 7, name: 'Yellow', usage: 'Documentation' },
2211
- { num: 8, name: 'Red', usage: 'Issues' }
2212
- ].map(category => (
2213
- <ColorSwatch
2214
- key={category.num}
2215
- color={`hsl(var(--category-${category.num}))`}
2216
- name={category.name}
2217
- label={category.usage}
2218
- interactive
2219
- />
2220
- ))}
2221
- </div>
2222
- </ShowcaseSection>
2223
- </Card>
2224
-
2225
- {/* Category Palette - Combined */}
2226
- <Card className="p-6" category={6}>
2227
- <ShowcaseSection
2228
- title="Category Palette"
2229
- description="Complete 8-color palette for data categorization with excellent contrast and accessibility."
2230
- badge={{ text: "8 Colors", variant: "category", category: 6 }}
2231
- >
2232
- <div className="flex gap-1 rounded overflow-hidden border border-border">
2233
- {[1, 2, 3, 4, 5, 6, 7, 8].map(num => (
2234
- <div
2235
- key={num}
2236
- className="flex-1 h-24 group relative cursor-pointer"
2237
- style={{ backgroundColor: `hsl(var(--category-${num}))` }}
2238
- >
2239
- <div className="absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center">
2240
- <span className="text-white font-medium opacity-0 group-hover:opacity-100 transition-opacity">
2241
- {num}
2242
- </span>
2243
- </div>
2244
- </div>
2245
- ))}
2246
- </div>
2247
- </ShowcaseSection>
2248
- </Card>
2249
-
2250
- {/* Status Colors - Individual Swatches */}
2251
- <Card className="p-6" category={2}>
2252
- <ShowcaseSection
2253
- title="Status Colors"
2254
- description="Semantic colors for indicating status, health, and operational states across the system."
2255
- badge={{ text: "System States", variant: "status", status: "success" }}
2256
- >
2257
- <div className="grid grid-cols-5 gap-4">
2258
- {[
2259
- { name: 'Success', usage: 'Completed', cssVar: '--status-success' },
2260
- { name: 'Warning', usage: 'Attention', cssVar: '--status-warning' },
2261
- { name: 'Error', usage: 'Failed', cssVar: '--status-error' },
2262
- { name: 'Info', usage: 'Information', cssVar: '--status-info' },
2263
- { name: 'Neutral', usage: 'Pending', cssVar: '--status-neutral' }
2264
- ].map(color => (
2265
- <ColorSwatch
2266
- key={color.name}
2267
- color={`hsl(var(${color.cssVar}))`}
2268
- name={color.name}
2269
- label={color.usage}
2270
- interactive
2271
- />
2272
- ))}
2273
- </div>
2274
- </ShowcaseSection>
2275
- </Card>
2276
-
2277
- {/* Status Palette - Combined */}
2278
- <Card className="p-6" category={7}>
2279
- <ShowcaseSection
2280
- title="Status Palette"
2281
- description="Semantic color palette for system states and operational indicators."
2282
- badge={{ text: "5 States", variant: "status", status: "info" }}
2283
- >
2284
- <div className="flex gap-1 rounded overflow-hidden border border-border">
2285
- {[
2286
- { name: 'Success', var: '--status-success' },
2287
- { name: 'Warning', var: '--status-warning' },
2288
- { name: 'Error', var: '--status-error' },
2289
- { name: 'Info', var: '--status-info' },
2290
- { name: 'Neutral', var: '--status-neutral' }
2291
- ].map(status => (
2292
- <div
2293
- key={status.name}
2294
- className="flex-1 h-24 group relative cursor-pointer"
2295
- style={{ backgroundColor: `hsl(var(${status.var}))` }}
2296
- >
2297
- <div className="absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center">
2298
- <span className="text-white font-medium text-xs opacity-0 group-hover:opacity-100 transition-opacity">
2299
- {status.name}
2300
- </span>
2301
- </div>
2302
- </div>
2303
- ))}
2304
- </div>
2305
- </ShowcaseSection>
2306
- </Card>
2307
-
2308
- {/* Extended Grays - Individual Swatches */}
2309
- <Card className="p-6" category={3}>
2310
- <ShowcaseSection
2311
- title="Extended Grays"
2312
- description="Comprehensive gray scale for backgrounds, borders, text, and subtle UI elements."
2313
- badge={{ text: "Neutrals", variant: "status", status: "neutral" }}
2314
- >
2315
- <div className="grid grid-cols-6 md:grid-cols-11 gap-2">
2316
- {[25, 75, 150, 250, 350, 450, 550, 650, 750, 850, 925].map(shade => (
2317
- <ColorSwatch
2318
- key={shade}
2319
- color={`hsl(var(--gray-${shade}))`}
2320
- name={shade.toString()}
2321
- size="sm"
2322
- interactive
2323
- />
2324
- ))}
2325
- </div>
2326
- </ShowcaseSection>
2327
- </Card>
2328
-
2329
- {/* Gray Palette - Combined */}
2330
- <Card className="p-6" category={8}>
2331
- <ShowcaseSection
2332
- title="Extended Gray Palette"
2333
- description="Comprehensive neutral palette for backgrounds, borders, and subtle interface elements."
2334
- badge={{ text: "11 Shades", variant: "status", status: "neutral" }}
2335
- >
2336
- <div className="flex gap-1 rounded overflow-hidden border border-border">
2337
- {[25, 75, 150, 250, 350, 450, 550, 650, 750, 850, 925].map(shade => (
2338
- <div
2339
- key={shade}
2340
- className="flex-1 h-24 group relative cursor-pointer"
2341
- style={{ backgroundColor: `hsl(var(--gray-${shade}))` }}
2342
- >
2343
- <div className="absolute inset-0 bg-black/0 group-hover:bg-black/10 flex items-center justify-center">
2344
- <span className="text-white font-medium text-xs opacity-0 group-hover:opacity-100 transition-opacity">
2345
- {shade}
2346
- </span>
2347
- </div>
2348
- </div>
2349
- ))}
2350
- </div>
2351
- </ShowcaseSection>
2352
- </Card>
2353
-
2354
- {/* UI System Colors - Individual Swatches */}
2355
- <Card className="p-6" category={4}>
2356
- <ShowcaseSection
2357
- title="UI System Colors"
2358
- description="Core UI colors for backgrounds, surfaces, borders, and interactive elements."
2359
- badge={{ text: "Interface", variant: "category", category: 4 }}
2360
- >
2361
- <div className="grid grid-cols-3 md:grid-cols-6 gap-4">
2362
- {[
2363
- { name: 'Background', cssVar: '--background', usage: 'Page background' },
2364
- { name: 'Foreground', cssVar: '--foreground', usage: 'Primary text' },
2365
- { name: 'Card', cssVar: '--card', usage: 'Card backgrounds' },
2366
- { name: 'Border', cssVar: '--border', usage: 'Dividers' },
2367
- { name: 'Primary', cssVar: '--primary', usage: 'Brand color' },
2368
- { name: 'Secondary', cssVar: '--secondary', usage: 'Secondary actions' }
2369
- ].map(color => (
2370
- <ColorSwatch
2371
- key={color.name}
2372
- color={`hsl(var(${color.cssVar}))`}
2373
- name={color.name}
2374
- label={color.usage}
2375
- size="lg"
2376
- interactive
2377
- />
2378
- ))}
2379
- </div>
2380
- </ShowcaseSection>
2381
- </Card>
2382
- </div>
2383
- </TabsContent>
2384
-
2385
- {/* Debug Section */}
2386
- <TabsContent value="debug" className="space-y-6">
2387
- <div className="space-y-2 mb-8">
2388
- <h2 className="text-2xl font-bold text-foreground">Debug Tools</h2>
2389
- <p className="text-muted-foreground">
2390
- Development utilities for testing, debugging, and validating the design system.
2391
- </p>
2392
- </div>
2393
-
2394
- <div className="grid gap-6">
2395
- {/* Color Variables Debug */}
2396
- <Card className="p-6" category={8}>
2397
- <h3 className="text-lg font-medium mb-4 flex items-center gap-2">
2398
- CSS Variables
2399
- <DataBadge variant="category" category={8} size="sm">Debug</DataBadge>
2400
- </h3>
2401
- <p className="text-sm text-muted-foreground mb-6">
2402
- Live CSS custom property values currently applied to the system.
2403
- </p>
2404
- <div className="grid grid-cols-2 md:grid-cols-4 gap-4 text-sm font-mono">
2405
- {[
2406
- '--category-1', '--category-2', '--category-3', '--category-4',
2407
- '--status-success', '--status-warning', '--status-error', '--status-info',
2408
- '--background', '--foreground', '--border', '--primary'
2409
- ].map(variable => (
2410
- <Card key={variable} className="p-3">
2411
- <div className="text-xs text-muted-foreground mb-1">{variable}</div>
2412
- <div
2413
- className="w-full h-8 rounded border border-border"
2414
- style={{ backgroundColor: `hsl(var(${variable}))` }}
2415
- />
2416
- </Card>
2417
- ))}
2418
- </div>
2419
- </Card>
2420
-
2421
- {/* Component States */}
2422
- <Card className="p-6" category={5}>
2423
- <h3 className="text-lg font-medium mb-4 flex items-center gap-2">
2424
- Component States
2425
- <DataBadge variant="status" status="info" size="sm">Interactive</DataBadge>
2426
- </h3>
2427
- <p className="text-sm text-muted-foreground mb-6">
2428
- Test different states and interactions of design system components.
2429
- </p>
2430
- <div className="grid grid-cols-2 md:grid-cols-4 gap-4">
2431
- {[1, 2, 3, 4].map(category => (
2432
- <Card key={category} category={category as 1 | 2 | 3 | 4} className="p-4">
2433
- <h4 className="font-medium mb-2">Category {category}</h4>
2434
- <DataBadge variant="category" category={category as 1 | 2 | 3 | 4} size="sm">
2435
- Test Badge
2436
- </DataBadge>
2437
- <div className="mt-3 space-y-2">
2438
- <div className="text-xs text-muted-foreground">
2439
- Color: hsl(var(--category-{category}))
2440
- </div>
2441
- <div className="text-xs text-muted-foreground">
2442
- Background: hsl(var(--category-{category}) / 0.02)
2443
- </div>
2444
- </div>
2445
- </Card>
2446
- ))}
2447
- </div>
2448
- </Card>
2449
- </div>
2450
- </TabsContent>
2451
- </Tabs>
2452
- </div>
2453
- </div>
2454
-
2455
- {/* Toast Container */}
2456
- <ToastContainer
2457
- toasts={toasts.map(t => ({
2458
- id: t.id,
2459
- status: t.status,
2460
- title: t.title,
2461
- children: t.message,
2462
- duration: 5000,
2463
- showProgress: true,
2464
- onDismiss: () => setToasts(prev => prev.filter(toast => toast.id !== t.id))
2465
- }))}
2466
- position="top-right"
2467
- />
2468
-
2469
- {/* Footer */}
2470
- <footer className="bg-card/30 backdrop-blur-sm border-t border-border/50">
2471
- <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8">
2472
- <div className="flex items-center justify-between">
2473
- <div className="flex items-center space-x-4">
2474
- <IconBadge
2475
- variant="category"
2476
- category={1}
2477
- size="sm"
2478
- >
2479
- DT
2480
- </IconBadge>
2481
- <div>
2482
- <p className="text-sm font-medium text-foreground">Data Trust Navigator</p>
2483
- <p className="text-xs text-muted-foreground">Design System Showcase • Built with Atomic Architecture</p>
2484
- </div>
2485
- </div>
2486
-
2487
- <div className="flex items-center space-x-4">
2488
- <DataBadge variant="category" category={1} size="sm">Design System</DataBadge>
2489
- <DataBadge variant="status" status="success" size="sm">v1.0</DataBadge>
2490
- </div>
2491
- </div>
2492
- </div>
2493
- </footer>
2494
- </div>
2495
- );
2496
- };