@pattern-stack/frontend-patterns 1.0.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.
- package/README.md +310 -0
- package/dist/atoms/composed/Accordion/Accordion.d.ts +20 -0
- package/dist/atoms/composed/Accordion/Accordion.d.ts.map +1 -0
- package/dist/atoms/composed/Accordion/index.d.ts +2 -0
- package/dist/atoms/composed/Accordion/index.d.ts.map +1 -0
- package/dist/atoms/composed/Alert/Alert.d.ts +25 -0
- package/dist/atoms/composed/Alert/Alert.d.ts.map +1 -0
- package/dist/atoms/composed/Alert/index.d.ts +2 -0
- package/dist/atoms/composed/Alert/index.d.ts.map +1 -0
- package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts +17 -0
- package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/atoms/composed/Breadcrumb/index.d.ts +2 -0
- package/dist/atoms/composed/Breadcrumb/index.d.ts.map +1 -0
- package/dist/atoms/composed/Chart/Chart.d.ts +37 -0
- package/dist/atoms/composed/Chart/Chart.d.ts.map +1 -0
- package/dist/atoms/composed/Chart/index.d.ts +3 -0
- package/dist/atoms/composed/Chart/index.d.ts.map +1 -0
- package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts +19 -0
- package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts.map +1 -0
- package/dist/atoms/composed/ColorSwatch/index.d.ts +2 -0
- package/dist/atoms/composed/ColorSwatch/index.d.ts.map +1 -0
- package/dist/atoms/composed/DarkModeToggle.d.ts +4 -0
- package/dist/atoms/composed/DarkModeToggle.d.ts.map +1 -0
- package/dist/atoms/composed/DataBadge/DataBadge.d.ts +13 -0
- package/dist/atoms/composed/DataBadge/DataBadge.d.ts.map +1 -0
- package/dist/atoms/composed/DataBadge/index.d.ts +2 -0
- package/dist/atoms/composed/DataBadge/index.d.ts.map +1 -0
- package/dist/atoms/composed/DataTable/DataTable.d.ts +28 -0
- package/dist/atoms/composed/DataTable/DataTable.d.ts.map +1 -0
- package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts +10 -0
- package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts.map +1 -0
- package/dist/atoms/composed/DataTable/index.d.ts +3 -0
- package/dist/atoms/composed/DataTable/index.d.ts.map +1 -0
- package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts +45 -0
- package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/atoms/composed/DateTimePicker/index.d.ts +3 -0
- package/dist/atoms/composed/DateTimePicker/index.d.ts.map +1 -0
- package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts +30 -0
- package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts.map +1 -0
- package/dist/atoms/composed/DetailedCard/index.d.ts +3 -0
- package/dist/atoms/composed/DetailedCard/index.d.ts.map +1 -0
- package/dist/atoms/composed/EmptyState/EmptyState.d.ts +18 -0
- package/dist/atoms/composed/EmptyState/EmptyState.d.ts.map +1 -0
- package/dist/atoms/composed/EmptyState/index.d.ts +2 -0
- package/dist/atoms/composed/EmptyState/index.d.ts.map +1 -0
- package/dist/atoms/composed/FileUpload/FileUpload.d.ts +46 -0
- package/dist/atoms/composed/FileUpload/FileUpload.d.ts.map +1 -0
- package/dist/atoms/composed/FileUpload/index.d.ts +3 -0
- package/dist/atoms/composed/FileUpload/index.d.ts.map +1 -0
- package/dist/atoms/composed/FormField/FormField.d.ts +23 -0
- package/dist/atoms/composed/FormField/FormField.d.ts.map +1 -0
- package/dist/atoms/composed/FormField/index.d.ts +2 -0
- package/dist/atoms/composed/FormField/index.d.ts.map +1 -0
- package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts +8 -0
- package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts.map +1 -0
- package/dist/atoms/composed/GlobalSearch/index.d.ts +2 -0
- package/dist/atoms/composed/GlobalSearch/index.d.ts.map +1 -0
- package/dist/atoms/composed/IconBadge/IconBadge.d.ts +16 -0
- package/dist/atoms/composed/IconBadge/IconBadge.d.ts.map +1 -0
- package/dist/atoms/composed/IconBadge/index.d.ts +3 -0
- package/dist/atoms/composed/IconBadge/index.d.ts.map +1 -0
- package/dist/atoms/composed/Modal/Modal.d.ts +18 -0
- package/dist/atoms/composed/Modal/Modal.d.ts.map +1 -0
- package/dist/atoms/composed/Modal/index.d.ts +3 -0
- package/dist/atoms/composed/Modal/index.d.ts.map +1 -0
- package/dist/atoms/composed/PaletteSwitcher.d.ts +7 -0
- package/dist/atoms/composed/PaletteSwitcher.d.ts.map +1 -0
- package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts +25 -0
- package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts.map +1 -0
- package/dist/atoms/composed/ProgressBar/index.d.ts +2 -0
- package/dist/atoms/composed/ProgressBar/index.d.ts.map +1 -0
- package/dist/atoms/composed/StatCard/StatCard.d.ts +21 -0
- package/dist/atoms/composed/StatCard/StatCard.d.ts.map +1 -0
- package/dist/atoms/composed/StatCard/index.d.ts +2 -0
- package/dist/atoms/composed/StatCard/index.d.ts.map +1 -0
- package/dist/atoms/composed/StyleGuide.d.ts +3 -0
- package/dist/atoms/composed/StyleGuide.d.ts.map +1 -0
- package/dist/atoms/composed/Toast/Toast.d.ts +40 -0
- package/dist/atoms/composed/Toast/Toast.d.ts.map +1 -0
- package/dist/atoms/composed/Toast/index.d.ts +2 -0
- package/dist/atoms/composed/Toast/index.d.ts.map +1 -0
- package/dist/atoms/composed/Tooltip/Tooltip.d.ts +16 -0
- package/dist/atoms/composed/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/atoms/composed/Tooltip/index.d.ts +2 -0
- package/dist/atoms/composed/Tooltip/index.d.ts.map +1 -0
- package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts +8 -0
- package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts.map +1 -0
- package/dist/atoms/composed/UserAvatar/index.d.ts +2 -0
- package/dist/atoms/composed/UserAvatar/index.d.ts.map +1 -0
- package/dist/atoms/composed/UserMenu/UserMenu.d.ts +8 -0
- package/dist/atoms/composed/UserMenu/UserMenu.d.ts.map +1 -0
- package/dist/atoms/composed/UserMenu/index.d.ts +2 -0
- package/dist/atoms/composed/UserMenu/index.d.ts.map +1 -0
- package/dist/atoms/composed/index.d.ts +25 -0
- package/dist/atoms/composed/index.d.ts.map +1 -0
- package/dist/atoms/hooks/useApi.d.ts +25 -0
- package/dist/atoms/hooks/useApi.d.ts.map +1 -0
- package/dist/atoms/hooks/useHealth.d.ts +19 -0
- package/dist/atoms/hooks/useHealth.d.ts.map +1 -0
- package/dist/atoms/index.d.ts +9 -0
- package/dist/atoms/index.d.ts.map +1 -0
- package/dist/atoms/services/api/client.d.ts +20 -0
- package/dist/atoms/services/api/client.d.ts.map +1 -0
- package/dist/atoms/services/auth-service.d.ts +24 -0
- package/dist/atoms/services/auth-service.d.ts.map +1 -0
- package/dist/atoms/services/health.d.ts +7 -0
- package/dist/atoms/services/health.d.ts.map +1 -0
- package/dist/atoms/services/index.d.ts +4 -0
- package/dist/atoms/services/index.d.ts.map +1 -0
- package/dist/atoms/shared/config/constants.d.ts +15 -0
- package/dist/atoms/shared/config/constants.d.ts.map +1 -0
- package/dist/atoms/shared/config/dashboard-sizes.d.ts +83 -0
- package/dist/atoms/shared/config/dashboard-sizes.d.ts.map +1 -0
- package/dist/atoms/shared/config/environment.d.ts +10 -0
- package/dist/atoms/shared/config/environment.d.ts.map +1 -0
- package/dist/atoms/shared/index.d.ts +4 -0
- package/dist/atoms/shared/index.d.ts.map +1 -0
- package/dist/atoms/types/auth.d.ts +56 -0
- package/dist/atoms/types/auth.d.ts.map +1 -0
- package/dist/atoms/types/generated.d.ts +1469 -0
- package/dist/atoms/types/generated.d.ts.map +1 -0
- package/dist/atoms/types/index.d.ts +4 -0
- package/dist/atoms/types/index.d.ts.map +1 -0
- package/dist/atoms/types/loading.d.ts +26 -0
- package/dist/atoms/types/loading.d.ts.map +1 -0
- package/dist/atoms/ui/Badge.d.ts +10 -0
- package/dist/atoms/ui/Badge.d.ts.map +1 -0
- package/dist/atoms/ui/ErrorBoundary.d.ts +18 -0
- package/dist/atoms/ui/ErrorBoundary.d.ts.map +1 -0
- package/dist/atoms/ui/Select.d.ts +28 -0
- package/dist/atoms/ui/Select.d.ts.map +1 -0
- package/dist/atoms/ui/Switch.d.ts +9 -0
- package/dist/atoms/ui/Switch.d.ts.map +1 -0
- package/dist/atoms/ui/Tabs.d.ts +30 -0
- package/dist/atoms/ui/Tabs.d.ts.map +1 -0
- package/dist/atoms/ui/avatar.d.ts +7 -0
- package/dist/atoms/ui/avatar.d.ts.map +1 -0
- package/dist/atoms/ui/button.d.ts +14 -0
- package/dist/atoms/ui/button.d.ts.map +1 -0
- package/dist/atoms/ui/card.d.ts +12 -0
- package/dist/atoms/ui/card.d.ts.map +1 -0
- package/dist/atoms/ui/dropdown-menu.d.ts +28 -0
- package/dist/atoms/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/atoms/ui/index.d.ts +15 -0
- package/dist/atoms/ui/index.d.ts.map +1 -0
- package/dist/atoms/ui/input.d.ts +5 -0
- package/dist/atoms/ui/input.d.ts.map +1 -0
- package/dist/atoms/ui/label.d.ts +6 -0
- package/dist/atoms/ui/label.d.ts.map +1 -0
- package/dist/atoms/ui/skeleton.d.ts +3 -0
- package/dist/atoms/ui/skeleton.d.ts.map +1 -0
- package/dist/atoms/ui/spinner.d.ts +14 -0
- package/dist/atoms/ui/spinner.d.ts.map +1 -0
- package/dist/atoms/ui/table.d.ts +11 -0
- package/dist/atoms/ui/table.d.ts.map +1 -0
- package/dist/atoms/utils/animations.d.ts +65 -0
- package/dist/atoms/utils/animations.d.ts.map +1 -0
- package/dist/atoms/utils/tooltip-helpers.d.ts +71 -0
- package/dist/atoms/utils/tooltip-helpers.d.ts.map +1 -0
- package/dist/atoms/utils/utils.d.ts +4 -0
- package/dist/atoms/utils/utils.d.ts.map +1 -0
- package/dist/features/auth/components/LoginForm.d.ts +2 -0
- package/dist/features/auth/components/LoginForm.d.ts.map +1 -0
- package/dist/features/auth/components/LogoutButton.d.ts +2 -0
- package/dist/features/auth/components/LogoutButton.d.ts.map +1 -0
- package/dist/features/auth/components/ProtectedRoute.d.ts +10 -0
- package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -0
- package/dist/features/auth/components/index.d.ts +4 -0
- package/dist/features/auth/components/index.d.ts.map +1 -0
- package/dist/features/auth/hooks/index.d.ts +3 -0
- package/dist/features/auth/hooks/index.d.ts.map +1 -0
- package/dist/features/auth/hooks/useAuth.d.ts +10 -0
- package/dist/features/auth/hooks/useAuth.d.ts.map +1 -0
- package/dist/features/auth/hooks/usePermissions.d.ts +13 -0
- package/dist/features/auth/hooks/usePermissions.d.ts.map +1 -0
- package/dist/features/auth/index.d.ts +3 -0
- package/dist/features/auth/index.d.ts.map +1 -0
- package/dist/features/index.d.ts +2 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/frontend-patterns.css +567 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +10152 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.js +10170 -0
- package/dist/index.js.map +1 -0
- package/dist/molecules/forms/FormGroup.d.ts +17 -0
- package/dist/molecules/forms/FormGroup.d.ts.map +1 -0
- package/dist/molecules/forms/SearchInput.d.ts +36 -0
- package/dist/molecules/forms/SearchInput.d.ts.map +1 -0
- package/dist/molecules/forms/index.d.ts +3 -0
- package/dist/molecules/forms/index.d.ts.map +1 -0
- package/dist/molecules/index.d.ts +4 -0
- package/dist/molecules/index.d.ts.map +1 -0
- package/dist/molecules/layout/AppHeader/AppHeader.d.ts +7 -0
- package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -0
- package/dist/molecules/layout/AppHeader/index.d.ts +2 -0
- package/dist/molecules/layout/AppHeader/index.d.ts.map +1 -0
- package/dist/molecules/layout/AppLayout.d.ts +2 -0
- package/dist/molecules/layout/AppLayout.d.ts.map +1 -0
- package/dist/molecules/layout/PageTemplate.d.ts +19 -0
- package/dist/molecules/layout/PageTemplate.d.ts.map +1 -0
- package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts +24 -0
- package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts.map +1 -0
- package/dist/molecules/layout/SectionHeader/index.d.ts +2 -0
- package/dist/molecules/layout/SectionHeader/index.d.ts.map +1 -0
- package/dist/molecules/layout/ShowcaseSection.d.ts +22 -0
- package/dist/molecules/layout/ShowcaseSection.d.ts.map +1 -0
- package/dist/molecules/layout/Sidebar.d.ts +6 -0
- package/dist/molecules/layout/Sidebar.d.ts.map +1 -0
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +13 -0
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -0
- package/dist/molecules/layout/SidebarButton/index.d.ts +2 -0
- package/dist/molecules/layout/SidebarButton/index.d.ts.map +1 -0
- package/dist/molecules/layout/SidebarContext.d.ts +12 -0
- package/dist/molecules/layout/SidebarContext.d.ts.map +1 -0
- package/dist/molecules/layout/index.d.ts +8 -0
- package/dist/molecules/layout/index.d.ts.map +1 -0
- package/dist/molecules/navigation/NavMenu.d.ts +20 -0
- package/dist/molecules/navigation/NavMenu.d.ts.map +1 -0
- package/dist/molecules/navigation/Pagination.d.ts +14 -0
- package/dist/molecules/navigation/Pagination.d.ts.map +1 -0
- package/dist/molecules/navigation/index.d.ts +3 -0
- package/dist/molecules/navigation/index.d.ts.map +1 -0
- package/dist/organisms/index.d.ts +2 -0
- package/dist/organisms/index.d.ts.map +1 -0
- package/dist/organisms/showcase/ComponentShowcasePage.d.ts +3 -0
- package/dist/organisms/showcase/ComponentShowcasePage.d.ts.map +1 -0
- package/dist/templates/AuthTemplate.d.ts +68 -0
- package/dist/templates/AuthTemplate.d.ts.map +1 -0
- package/dist/templates/ComponentShowcaseTemplate.d.ts +53 -0
- package/dist/templates/ComponentShowcaseTemplate.d.ts.map +1 -0
- package/dist/templates/DashboardTemplate.d.ts +62 -0
- package/dist/templates/DashboardTemplate.d.ts.map +1 -0
- package/dist/templates/DataTemplate.d.ts +78 -0
- package/dist/templates/DataTemplate.d.ts.map +1 -0
- package/dist/templates/admin/AdminCRUDTemplate.d.ts +105 -0
- package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -0
- package/dist/templates/admin/AdminDashboardTemplate.d.ts +89 -0
- package/dist/templates/admin/AdminDashboardTemplate.d.ts.map +1 -0
- package/dist/templates/admin/AdminDetailTemplate.d.ts +132 -0
- package/dist/templates/admin/AdminDetailTemplate.d.ts.map +1 -0
- package/dist/templates/admin/index.d.ts +4 -0
- package/dist/templates/admin/index.d.ts.map +1 -0
- package/dist/templates/factory.d.ts +28 -0
- package/dist/templates/factory.d.ts.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/package.json +118 -0
- package/src/App.css +42 -0
- package/src/App.tsx +54 -0
- package/src/__tests__/README.md +221 -0
- package/src/__tests__/atoms/hooks/simple-hooks.test.ts +44 -0
- package/src/__tests__/atoms/ui/button.test.tsx +68 -0
- package/src/__tests__/atoms/utils/simple.test.ts +18 -0
- package/src/__tests__/atoms/utils/utils.test.ts +77 -0
- package/src/__tests__/features/auth/simple-auth.test.tsx +40 -0
- package/src/__tests__/molecules/layout/simple-layout.test.tsx +81 -0
- package/src/__tests__/organisms/showcase/simple-showcase.test.tsx +167 -0
- package/src/__tests__/setup.ts +51 -0
- package/src/__tests__/utils.tsx +123 -0
- package/src/atoms/composed/Accordion/Accordion.tsx +271 -0
- package/src/atoms/composed/Accordion/index.ts +1 -0
- package/src/atoms/composed/Alert/Alert.tsx +132 -0
- package/src/atoms/composed/Alert/index.ts +1 -0
- package/src/atoms/composed/Breadcrumb/Breadcrumb.tsx +83 -0
- package/src/atoms/composed/Breadcrumb/index.ts +1 -0
- package/src/atoms/composed/Chart/Chart.tsx +425 -0
- package/src/atoms/composed/Chart/index.ts +2 -0
- package/src/atoms/composed/ColorSwatch/ColorSwatch.tsx +72 -0
- package/src/atoms/composed/ColorSwatch/index.ts +1 -0
- package/src/atoms/composed/DarkModeToggle.tsx +66 -0
- package/src/atoms/composed/DataBadge/DataBadge.tsx +81 -0
- package/src/atoms/composed/DataBadge/index.ts +1 -0
- package/src/atoms/composed/DataTable/DataTable.tsx +394 -0
- package/src/atoms/composed/DataTable/TableCellWithTooltip.tsx +41 -0
- package/src/atoms/composed/DataTable/index.ts +2 -0
- package/src/atoms/composed/DateTimePicker/DateTimePicker.tsx +611 -0
- package/src/atoms/composed/DateTimePicker/index.ts +2 -0
- package/src/atoms/composed/DetailedCard/DetailedCard.tsx +181 -0
- package/src/atoms/composed/DetailedCard/index.ts +2 -0
- package/src/atoms/composed/EmptyState/EmptyState.tsx +90 -0
- package/src/atoms/composed/EmptyState/index.ts +1 -0
- package/src/atoms/composed/FileUpload/FileUpload.tsx +477 -0
- package/src/atoms/composed/FileUpload/index.ts +2 -0
- package/src/atoms/composed/FormField/FormField.tsx +92 -0
- package/src/atoms/composed/FormField/index.ts +1 -0
- package/src/atoms/composed/GlobalSearch/GlobalSearch.tsx +37 -0
- package/src/atoms/composed/GlobalSearch/index.ts +1 -0
- package/src/atoms/composed/IconBadge/IconBadge.tsx +95 -0
- package/src/atoms/composed/IconBadge/index.ts +2 -0
- package/src/atoms/composed/Modal/Modal.tsx +223 -0
- package/src/atoms/composed/Modal/index.ts +2 -0
- package/src/atoms/composed/PaletteSwitcher.tsx +386 -0
- package/src/atoms/composed/ProgressBar/ProgressBar.tsx +116 -0
- package/src/atoms/composed/ProgressBar/index.ts +1 -0
- package/src/atoms/composed/StatCard/StatCard.tsx +219 -0
- package/src/atoms/composed/StatCard/index.ts +1 -0
- package/src/atoms/composed/StyleGuide.tsx +717 -0
- package/src/atoms/composed/Toast/Toast.tsx +219 -0
- package/src/atoms/composed/Toast/index.ts +1 -0
- package/src/atoms/composed/Tooltip/Tooltip.tsx +213 -0
- package/src/atoms/composed/Tooltip/index.ts +1 -0
- package/src/atoms/composed/UserAvatar/UserAvatar.tsx +139 -0
- package/src/atoms/composed/UserAvatar/index.ts +1 -0
- package/src/atoms/composed/UserMenu/UserMenu.tsx +16 -0
- package/src/atoms/composed/UserMenu/index.ts +1 -0
- package/src/atoms/composed/index.ts +29 -0
- package/src/atoms/hooks/useApi.ts +80 -0
- package/src/atoms/hooks/useHealth.ts +17 -0
- package/src/atoms/index.ts +13 -0
- package/src/atoms/services/api/client.ts +134 -0
- package/src/atoms/services/auth-service.ts +248 -0
- package/src/atoms/services/health.ts +15 -0
- package/src/atoms/services/index.ts +3 -0
- package/src/atoms/shared/config/constants.ts +17 -0
- package/src/atoms/shared/config/dashboard-sizes.ts +111 -0
- package/src/atoms/shared/config/environment.ts +10 -0
- package/src/atoms/shared/index.ts +4 -0
- package/src/atoms/shared/styles/color-palettes.css +566 -0
- package/src/atoms/types/auth.ts +62 -0
- package/src/atoms/types/generated.ts +1469 -0
- package/src/atoms/types/index.ts +4 -0
- package/src/atoms/types/loading.ts +28 -0
- package/src/atoms/ui/Badge.tsx +30 -0
- package/src/atoms/ui/ErrorBoundary.tsx +59 -0
- package/src/atoms/ui/Select.tsx +53 -0
- package/src/atoms/ui/Switch.tsx +42 -0
- package/src/atoms/ui/Tabs.tsx +118 -0
- package/src/atoms/ui/avatar.tsx +48 -0
- package/src/atoms/ui/button.tsx +70 -0
- package/src/atoms/ui/card.tsx +76 -0
- package/src/atoms/ui/dropdown-menu.tsx +199 -0
- package/src/atoms/ui/index.ts +39 -0
- package/src/atoms/ui/input.tsx +23 -0
- package/src/atoms/ui/label.tsx +23 -0
- package/src/atoms/ui/skeleton.tsx +13 -0
- package/src/atoms/ui/spinner.tsx +49 -0
- package/src/atoms/ui/table.tsx +116 -0
- package/src/atoms/utils/animations.ts +135 -0
- package/src/atoms/utils/tooltip-helpers.ts +140 -0
- package/src/atoms/utils/utils.ts +9 -0
- package/src/features/auth/components/LoginForm.tsx +168 -0
- package/src/features/auth/components/LogoutButton.tsx +19 -0
- package/src/features/auth/components/ProtectedRoute.tsx +60 -0
- package/src/features/auth/components/index.ts +4 -0
- package/src/features/auth/hooks/index.ts +2 -0
- package/src/features/auth/hooks/useAuth.tsx +205 -0
- package/src/features/auth/hooks/usePermissions.ts +35 -0
- package/src/features/auth/index.ts +2 -0
- package/src/features/index.ts +2 -0
- package/src/index.css +704 -0
- package/src/index.ts +13 -0
- package/src/main.tsx +48 -0
- package/src/molecules/.gitkeep +0 -0
- package/src/molecules/forms/FormGroup.tsx +75 -0
- package/src/molecules/forms/SearchInput.tsx +259 -0
- package/src/molecules/forms/index.ts +4 -0
- package/src/molecules/index.ts +4 -0
- package/src/molecules/layout/AppHeader/AppHeader.tsx +42 -0
- package/src/molecules/layout/AppHeader/index.ts +1 -0
- package/src/molecules/layout/AppLayout.tsx +29 -0
- package/src/molecules/layout/PageTemplate.tsx +87 -0
- package/src/molecules/layout/SectionHeader/SectionHeader.tsx +87 -0
- package/src/molecules/layout/SectionHeader/index.ts +1 -0
- package/src/molecules/layout/ShowcaseSection.tsx +57 -0
- package/src/molecules/layout/Sidebar.tsx +144 -0
- package/src/molecules/layout/SidebarButton/SidebarButton.tsx +99 -0
- package/src/molecules/layout/SidebarButton/index.ts +1 -0
- package/src/molecules/layout/SidebarContext.tsx +31 -0
- package/src/molecules/layout/index.ts +7 -0
- package/src/molecules/navigation/NavMenu.tsx +188 -0
- package/src/molecules/navigation/Pagination.tsx +172 -0
- package/src/molecules/navigation/index.ts +4 -0
- package/src/organisms/index.ts +5 -0
- package/src/organisms/showcase/ComponentShowcasePage.tsx +2496 -0
- package/src/organisms/showcase/index.ts +1 -0
- package/src/pages/AdminShowcase/AdminCRUDShowcase.tsx +242 -0
- package/src/pages/AdminShowcase/AdminDashboardShowcase.tsx +171 -0
- package/src/pages/AdminShowcase/AdminDetailShowcase.tsx +385 -0
- package/src/pages/AdminShowcase/index.tsx +3 -0
- package/src/pages/ComponentShowcase/BadgesShowcase.tsx +188 -0
- package/src/pages/ComponentShowcase/CardsShowcase.tsx +392 -0
- package/src/pages/ComponentShowcase/PalettesShowcase.tsx +207 -0
- package/src/pages/ComponentShowcase/StatesShowcase.tsx +485 -0
- package/src/pages/ComponentShowcase/TablesShowcase.tsx +134 -0
- package/src/pages/ComponentShowcase/TypographyShowcase.tsx +255 -0
- package/src/pages/ComponentShowcase/index.tsx +188 -0
- package/src/pages/index.ts +2 -0
- package/src/templates/AuthTemplate.tsx +216 -0
- package/src/templates/ComponentShowcaseTemplate.tsx +173 -0
- package/src/templates/DashboardTemplate.tsx +232 -0
- package/src/templates/DataTemplate.tsx +319 -0
- package/src/templates/admin/AdminCRUDTemplate.tsx +630 -0
- package/src/templates/admin/AdminDashboardTemplate.tsx +351 -0
- package/src/templates/admin/AdminDetailTemplate.tsx +563 -0
- package/src/templates/admin/index.ts +29 -0
- package/src/templates/factory.tsx +169 -0
- package/src/templates/index.ts +37 -0
- package/src/vite-env.d.ts +1 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { AdminDetailTemplate } from '../../templates/admin';
|
|
3
|
+
import type { FieldSection, ActionConfig, AuditEntry, RelatedData } from '../../templates/admin';
|
|
4
|
+
import { Edit, Trash2, Lock, Mail, Phone, Calendar } from 'lucide-react';
|
|
5
|
+
|
|
6
|
+
// Mock user data
|
|
7
|
+
const mockUserData = {
|
|
8
|
+
id: '1',
|
|
9
|
+
name: 'John Doe',
|
|
10
|
+
email: 'john.doe@example.com',
|
|
11
|
+
phone: '+1 (555) 123-4567',
|
|
12
|
+
role: 'Administrator',
|
|
13
|
+
department: 'Engineering',
|
|
14
|
+
location: 'San Francisco, CA',
|
|
15
|
+
isActive: true,
|
|
16
|
+
lastLogin: '2024-01-15T10:30:00Z',
|
|
17
|
+
createdAt: '2023-06-15T08:00:00Z',
|
|
18
|
+
updatedAt: '2024-01-15T10:30:00Z',
|
|
19
|
+
avatar: 'https://api.dicebear.com/7.x/initials/svg?seed=John Doe',
|
|
20
|
+
bio: 'Senior software engineer with 8 years of experience in full-stack development.',
|
|
21
|
+
permissions: ['read', 'write', 'admin'],
|
|
22
|
+
preferences: {
|
|
23
|
+
theme: 'dark',
|
|
24
|
+
notifications: true,
|
|
25
|
+
language: 'en'
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const fieldSections: FieldSection[] = [
|
|
30
|
+
{
|
|
31
|
+
title: 'Basic Information',
|
|
32
|
+
description: 'Primary user details and contact information',
|
|
33
|
+
category: 1,
|
|
34
|
+
fields: [
|
|
35
|
+
{
|
|
36
|
+
key: 'name',
|
|
37
|
+
label: 'Full Name',
|
|
38
|
+
type: 'text',
|
|
39
|
+
editable: true,
|
|
40
|
+
copyable: true
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
key: 'email',
|
|
44
|
+
label: 'Email Address',
|
|
45
|
+
type: 'email',
|
|
46
|
+
editable: true,
|
|
47
|
+
copyable: true
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
key: 'phone',
|
|
51
|
+
label: 'Phone Number',
|
|
52
|
+
type: 'phone',
|
|
53
|
+
editable: true,
|
|
54
|
+
copyable: true
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
key: 'location',
|
|
58
|
+
label: 'Location',
|
|
59
|
+
type: 'text',
|
|
60
|
+
editable: true
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
title: 'Role & Permissions',
|
|
66
|
+
description: 'User role and system access permissions',
|
|
67
|
+
category: 2,
|
|
68
|
+
fields: [
|
|
69
|
+
{
|
|
70
|
+
key: 'role',
|
|
71
|
+
label: 'Role',
|
|
72
|
+
type: 'badge',
|
|
73
|
+
editable: true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: 'department',
|
|
77
|
+
label: 'Department',
|
|
78
|
+
type: 'text',
|
|
79
|
+
editable: true
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
key: 'isActive',
|
|
83
|
+
label: 'Account Status',
|
|
84
|
+
type: 'boolean',
|
|
85
|
+
editable: true
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
key: 'permissions',
|
|
89
|
+
label: 'Permissions',
|
|
90
|
+
type: 'custom',
|
|
91
|
+
render: (value) => (
|
|
92
|
+
<div className="flex gap-1 flex-wrap">
|
|
93
|
+
{(value as string[]).map((permission) => (
|
|
94
|
+
<span
|
|
95
|
+
key={permission}
|
|
96
|
+
className="px-2 py-1 text-xs bg-category-2/10 text-category-2 rounded-md"
|
|
97
|
+
>
|
|
98
|
+
{permission}
|
|
99
|
+
</span>
|
|
100
|
+
))}
|
|
101
|
+
</div>
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
title: 'Activity & Timestamps',
|
|
108
|
+
description: 'Account activity and important dates',
|
|
109
|
+
category: 3,
|
|
110
|
+
fields: [
|
|
111
|
+
{
|
|
112
|
+
key: 'lastLogin',
|
|
113
|
+
label: 'Last Login',
|
|
114
|
+
type: 'datetime'
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
key: 'createdAt',
|
|
118
|
+
label: 'Account Created',
|
|
119
|
+
type: 'datetime'
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
key: 'updatedAt',
|
|
123
|
+
label: 'Last Updated',
|
|
124
|
+
type: 'datetime'
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
title: 'Preferences',
|
|
130
|
+
description: 'User preferences and settings',
|
|
131
|
+
category: 4,
|
|
132
|
+
fields: [
|
|
133
|
+
{
|
|
134
|
+
key: 'preferences',
|
|
135
|
+
label: 'User Preferences',
|
|
136
|
+
type: 'json'
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
key: 'bio',
|
|
140
|
+
label: 'Biography',
|
|
141
|
+
type: 'text',
|
|
142
|
+
editable: true
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
const actions: ActionConfig[] = [
|
|
149
|
+
{
|
|
150
|
+
id: 'edit',
|
|
151
|
+
label: 'Edit User',
|
|
152
|
+
icon: <Edit className="w-4 h-4 mr-2" />,
|
|
153
|
+
variant: 'default',
|
|
154
|
+
onClick: () => console.log('Edit user')
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: 'reset-password',
|
|
158
|
+
label: 'Reset Password',
|
|
159
|
+
icon: <Lock className="w-4 h-4 mr-2" />,
|
|
160
|
+
variant: 'outline',
|
|
161
|
+
onClick: () => console.log('Reset password')
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
id: 'send-email',
|
|
165
|
+
label: 'Send Email',
|
|
166
|
+
icon: <Mail className="w-4 h-4 mr-2" />,
|
|
167
|
+
variant: 'outline',
|
|
168
|
+
onClick: () => console.log('Send email')
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
id: 'delete',
|
|
172
|
+
label: 'Delete User',
|
|
173
|
+
icon: <Trash2 className="w-4 h-4 mr-2" />,
|
|
174
|
+
variant: 'destructive',
|
|
175
|
+
onClick: () => console.log('Delete user')
|
|
176
|
+
}
|
|
177
|
+
];
|
|
178
|
+
|
|
179
|
+
const auditTrail: AuditEntry[] = [
|
|
180
|
+
{
|
|
181
|
+
id: '1',
|
|
182
|
+
action: 'User profile updated',
|
|
183
|
+
user: 'admin.user',
|
|
184
|
+
timestamp: new Date(Date.now() - 60 * 60 * 1000),
|
|
185
|
+
changes: [
|
|
186
|
+
{ field: 'phone', oldValue: '+1 (555) 123-4566', newValue: '+1 (555) 123-4567' },
|
|
187
|
+
{ field: 'location', oldValue: 'New York, NY', newValue: 'San Francisco, CA' }
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: '2',
|
|
192
|
+
action: 'Password reset requested',
|
|
193
|
+
user: 'john.doe',
|
|
194
|
+
timestamp: new Date(Date.now() - 2 * 24 * 60 * 60 * 1000)
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: '3',
|
|
198
|
+
action: 'Role changed from Editor to Administrator',
|
|
199
|
+
user: 'admin.user',
|
|
200
|
+
timestamp: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
|
|
201
|
+
changes: [
|
|
202
|
+
{ field: 'role', oldValue: 'Editor', newValue: 'Administrator' }
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
id: '4',
|
|
207
|
+
action: 'Account created',
|
|
208
|
+
user: 'system',
|
|
209
|
+
timestamp: new Date('2023-06-15T08:00:00Z')
|
|
210
|
+
}
|
|
211
|
+
];
|
|
212
|
+
|
|
213
|
+
const relatedData: RelatedData[] = [
|
|
214
|
+
{
|
|
215
|
+
title: 'Recent Projects',
|
|
216
|
+
description: 'Projects the user has been involved with',
|
|
217
|
+
data: [
|
|
218
|
+
{
|
|
219
|
+
id: '1',
|
|
220
|
+
name: 'E-commerce Platform',
|
|
221
|
+
role: 'Lead Developer',
|
|
222
|
+
status: 'Active',
|
|
223
|
+
lastActivity: '2024-01-15'
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: '2',
|
|
227
|
+
name: 'Mobile App Redesign',
|
|
228
|
+
role: 'Technical Lead',
|
|
229
|
+
status: 'Completed',
|
|
230
|
+
lastActivity: '2024-01-10'
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: '3',
|
|
234
|
+
name: 'API Migration',
|
|
235
|
+
role: 'Senior Developer',
|
|
236
|
+
status: 'In Progress',
|
|
237
|
+
lastActivity: '2024-01-14'
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
columns: [
|
|
241
|
+
{ key: 'name', header: 'Project Name' },
|
|
242
|
+
{ key: 'role', header: 'Role' },
|
|
243
|
+
{ key: 'status', header: 'Status', cell: (item) => (
|
|
244
|
+
<span className={`px-2 py-1 text-xs rounded-md ${
|
|
245
|
+
item.status === 'Active' ? 'bg-category-2/10 text-category-2' :
|
|
246
|
+
item.status === 'Completed' ? 'bg-category-3/10 text-category-3' :
|
|
247
|
+
'bg-category-1/10 text-category-1'
|
|
248
|
+
}`}>
|
|
249
|
+
{item.status as string}
|
|
250
|
+
</span>
|
|
251
|
+
)},
|
|
252
|
+
{ key: 'lastActivity', header: 'Last Activity', cell: (item) =>
|
|
253
|
+
new Date(item.lastActivity as string).toLocaleDateString()
|
|
254
|
+
}
|
|
255
|
+
],
|
|
256
|
+
actions: [
|
|
257
|
+
{
|
|
258
|
+
id: 'view-project',
|
|
259
|
+
label: 'View All Projects',
|
|
260
|
+
variant: 'outline',
|
|
261
|
+
onClick: () => console.log('View all projects')
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
category: 1
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
title: 'Team Members',
|
|
268
|
+
description: 'Other team members in the same department',
|
|
269
|
+
data: [
|
|
270
|
+
{
|
|
271
|
+
id: '2',
|
|
272
|
+
name: 'Sarah Wilson',
|
|
273
|
+
role: 'Product Manager',
|
|
274
|
+
email: 'sarah.wilson@example.com'
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
id: '3',
|
|
278
|
+
name: 'Mike Johnson',
|
|
279
|
+
role: 'Designer',
|
|
280
|
+
email: 'mike.johnson@example.com'
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
id: '4',
|
|
284
|
+
name: 'Emily Davis',
|
|
285
|
+
role: 'QA Engineer',
|
|
286
|
+
email: 'emily.davis@example.com'
|
|
287
|
+
}
|
|
288
|
+
],
|
|
289
|
+
columns: [
|
|
290
|
+
{ key: 'name', header: 'Name' },
|
|
291
|
+
{ key: 'role', header: 'Role' },
|
|
292
|
+
{ key: 'email', header: 'Email', cell: (item) => (
|
|
293
|
+
<a href={`mailto:${item.email}`} className="text-category-1 hover:underline">
|
|
294
|
+
{item.email as string}
|
|
295
|
+
</a>
|
|
296
|
+
)}
|
|
297
|
+
],
|
|
298
|
+
category: 2
|
|
299
|
+
}
|
|
300
|
+
];
|
|
301
|
+
|
|
302
|
+
export const AdminDetailShowcase: React.FC = () => {
|
|
303
|
+
const [userData, setUserData] = useState(mockUserData);
|
|
304
|
+
|
|
305
|
+
const handleUpdate = async (field: string, value: unknown) => {
|
|
306
|
+
console.log('Updating field:', field, 'with value:', value);
|
|
307
|
+
|
|
308
|
+
// Simulate API call
|
|
309
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
310
|
+
|
|
311
|
+
setUserData(prev => ({
|
|
312
|
+
...prev,
|
|
313
|
+
[field]: value,
|
|
314
|
+
updatedAt: new Date().toISOString()
|
|
315
|
+
}));
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
const handleBack = () => {
|
|
319
|
+
console.log('Navigate back to users list');
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
const sidebar = (
|
|
323
|
+
<div className="space-y-6">
|
|
324
|
+
{/* Quick Actions */}
|
|
325
|
+
<div className="bg-muted/30 rounded-lg p-4">
|
|
326
|
+
<h4 className="font-medium text-sm mb-3 text-foreground">Quick Actions</h4>
|
|
327
|
+
<div className="space-y-2">
|
|
328
|
+
<button className="w-full text-left text-sm p-2 rounded-md hover:bg-muted flex items-center">
|
|
329
|
+
<Mail className="w-4 h-4 mr-2" />
|
|
330
|
+
Send Message
|
|
331
|
+
</button>
|
|
332
|
+
<button className="w-full text-left text-sm p-2 rounded-md hover:bg-muted flex items-center">
|
|
333
|
+
<Phone className="w-4 h-4 mr-2" />
|
|
334
|
+
Schedule Call
|
|
335
|
+
</button>
|
|
336
|
+
<button className="w-full text-left text-sm p-2 rounded-md hover:bg-muted flex items-center">
|
|
337
|
+
<Calendar className="w-4 h-4 mr-2" />
|
|
338
|
+
View Calendar
|
|
339
|
+
</button>
|
|
340
|
+
</div>
|
|
341
|
+
</div>
|
|
342
|
+
|
|
343
|
+
{/* User Stats */}
|
|
344
|
+
<div className="bg-muted/30 rounded-lg p-4">
|
|
345
|
+
<h4 className="font-medium text-sm mb-3 text-foreground">Statistics</h4>
|
|
346
|
+
<div className="space-y-3">
|
|
347
|
+
<div className="flex justify-between text-sm">
|
|
348
|
+
<span className="text-muted-foreground">Projects</span>
|
|
349
|
+
<span className="font-medium">12</span>
|
|
350
|
+
</div>
|
|
351
|
+
<div className="flex justify-between text-sm">
|
|
352
|
+
<span className="text-muted-foreground">Tasks Completed</span>
|
|
353
|
+
<span className="font-medium">147</span>
|
|
354
|
+
</div>
|
|
355
|
+
<div className="flex justify-between text-sm">
|
|
356
|
+
<span className="text-muted-foreground">Hours Logged</span>
|
|
357
|
+
<span className="font-medium">1,248</span>
|
|
358
|
+
</div>
|
|
359
|
+
<div className="flex justify-between text-sm">
|
|
360
|
+
<span className="text-muted-foreground">Team Rating</span>
|
|
361
|
+
<span className="font-medium">4.8/5</span>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
</div>
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
return (
|
|
369
|
+
<AdminDetailTemplate
|
|
370
|
+
title={userData.name}
|
|
371
|
+
subtitle={`${userData.role} • ${userData.department}`}
|
|
372
|
+
resourceType="Users"
|
|
373
|
+
data={userData}
|
|
374
|
+
sections={fieldSections}
|
|
375
|
+
actions={actions}
|
|
376
|
+
relatedData={relatedData}
|
|
377
|
+
auditTrail={auditTrail}
|
|
378
|
+
onBack={handleBack}
|
|
379
|
+
onUpdate={handleUpdate}
|
|
380
|
+
category={1}
|
|
381
|
+
sidebar={sidebar}
|
|
382
|
+
showAuditTrail={true}
|
|
383
|
+
/>
|
|
384
|
+
);
|
|
385
|
+
};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ComponentShowcaseTemplate } from '../../templates';
|
|
3
|
+
import { DataBadge } from '../../atoms/composed';
|
|
4
|
+
import { Badge } from '../../atoms/ui';
|
|
5
|
+
import { CheckCircle, AlertTriangle, XCircle, Info, Clock } from 'lucide-react';
|
|
6
|
+
|
|
7
|
+
export const BadgesShowcase: React.FC = () => {
|
|
8
|
+
return (
|
|
9
|
+
<ComponentShowcaseTemplate
|
|
10
|
+
category={1}
|
|
11
|
+
title="Badges"
|
|
12
|
+
description="Semantic badges for categorizing and indicating status in data interfaces."
|
|
13
|
+
primaryComponent={{
|
|
14
|
+
title: "Badge Component",
|
|
15
|
+
description: "Foundation badge component with multiple variants, sizes, and states. Base for all badge-based components.",
|
|
16
|
+
badge: {
|
|
17
|
+
text: "UI Foundation",
|
|
18
|
+
variant: "category",
|
|
19
|
+
category: 1
|
|
20
|
+
},
|
|
21
|
+
children: (
|
|
22
|
+
<div className="space-y-6">
|
|
23
|
+
{/* Basic Badge Variants */}
|
|
24
|
+
<div className="space-y-4">
|
|
25
|
+
<h4 className="text-base font-medium">Badge Variants</h4>
|
|
26
|
+
<div className="flex flex-wrap gap-2">
|
|
27
|
+
<Badge variant="default">Default</Badge>
|
|
28
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
29
|
+
<Badge variant="destructive">Destructive</Badge>
|
|
30
|
+
<Badge variant="outline">Outline</Badge>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
{/* Badge Sizes */}
|
|
35
|
+
<div className="space-y-4">
|
|
36
|
+
<h4 className="text-base font-medium">Sizes</h4>
|
|
37
|
+
<div className="flex flex-wrap items-center gap-2">
|
|
38
|
+
<Badge variant="default" className="text-xs px-2 py-0.5">Small</Badge>
|
|
39
|
+
<Badge variant="default">Medium</Badge>
|
|
40
|
+
<Badge variant="default" className="text-base px-3 py-1.5">Large</Badge>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
{/* Badge with Icons */}
|
|
45
|
+
<div className="space-y-4">
|
|
46
|
+
<h4 className="text-base font-medium">With Icons</h4>
|
|
47
|
+
<div className="flex flex-wrap gap-2">
|
|
48
|
+
<Badge variant="default">
|
|
49
|
+
<CheckCircle className="w-3 h-3 mr-1" />
|
|
50
|
+
Success
|
|
51
|
+
</Badge>
|
|
52
|
+
<Badge variant="destructive">
|
|
53
|
+
<XCircle className="w-3 h-3 mr-1" />
|
|
54
|
+
Error
|
|
55
|
+
</Badge>
|
|
56
|
+
<Badge variant="outline">
|
|
57
|
+
<Info className="w-3 h-3 mr-1" />
|
|
58
|
+
Info
|
|
59
|
+
</Badge>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
)
|
|
64
|
+
}}
|
|
65
|
+
composedExamples={{
|
|
66
|
+
title: "Business Badge Components",
|
|
67
|
+
description: "Specialized badge components built for specific data interface use cases with enhanced functionality.",
|
|
68
|
+
sections: [
|
|
69
|
+
{
|
|
70
|
+
title: "DataBadge Component",
|
|
71
|
+
description: "Enhanced badge component with category theming, status variants, and interactive capabilities for data interfaces.",
|
|
72
|
+
badge: {
|
|
73
|
+
text: "Business Component",
|
|
74
|
+
variant: "category",
|
|
75
|
+
category: 2
|
|
76
|
+
},
|
|
77
|
+
category: 2,
|
|
78
|
+
children: (
|
|
79
|
+
<div className="space-y-6">
|
|
80
|
+
{/* Basic DataBadge Usage */}
|
|
81
|
+
<div className="space-y-4">
|
|
82
|
+
<h4 className="text-base font-medium">Basic Usage</h4>
|
|
83
|
+
<div className="flex flex-wrap gap-2">
|
|
84
|
+
<DataBadge variant="category" category={1}>Category 1</DataBadge>
|
|
85
|
+
<DataBadge variant="status" status="success">Success</DataBadge>
|
|
86
|
+
<DataBadge variant="status" status="neutral">Neutral</DataBadge>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
{/* DataBadge Sizes */}
|
|
91
|
+
<div className="space-y-4">
|
|
92
|
+
<h4 className="text-base font-medium">Sizes</h4>
|
|
93
|
+
<div className="flex flex-wrap items-center gap-2">
|
|
94
|
+
<DataBadge variant="category" category={2} size="sm">Small</DataBadge>
|
|
95
|
+
<DataBadge variant="category" category={2} size="md">Medium</DataBadge>
|
|
96
|
+
<DataBadge variant="category" category={2} size="lg">Large</DataBadge>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
{/* Interactive DataBadge */}
|
|
101
|
+
<div className="space-y-4">
|
|
102
|
+
<h4 className="text-base font-medium">Interactive</h4>
|
|
103
|
+
<div className="flex flex-wrap gap-2">
|
|
104
|
+
<DataBadge
|
|
105
|
+
variant="category"
|
|
106
|
+
category={3}
|
|
107
|
+
interactive
|
|
108
|
+
onClick={() => alert('Badge clicked!')}
|
|
109
|
+
>
|
|
110
|
+
Clickable Badge
|
|
111
|
+
</DataBadge>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
)
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
title: "Category Badges",
|
|
119
|
+
description: "Use category badges to classify and organize different types of content, data, or functionality.",
|
|
120
|
+
badge: {
|
|
121
|
+
text: "8 Categories",
|
|
122
|
+
variant: "category",
|
|
123
|
+
category: 1
|
|
124
|
+
},
|
|
125
|
+
category: 2,
|
|
126
|
+
children: (
|
|
127
|
+
<div className="space-y-4">
|
|
128
|
+
<div className="flex flex-wrap gap-2">
|
|
129
|
+
{[1, 2, 3, 4, 5, 6, 7, 8].map(category => (
|
|
130
|
+
<DataBadge key={category} variant="category" category={category as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8}>
|
|
131
|
+
Category {category}
|
|
132
|
+
</DataBadge>
|
|
133
|
+
))}
|
|
134
|
+
</div>
|
|
135
|
+
<div className="flex flex-wrap gap-2">
|
|
136
|
+
<DataBadge variant="category" category={1} size="sm">Small</DataBadge>
|
|
137
|
+
<DataBadge variant="category" category={2} size="md">Medium</DataBadge>
|
|
138
|
+
<DataBadge variant="category" category={3} size="lg">Large</DataBadge>
|
|
139
|
+
</div>
|
|
140
|
+
<div className="flex flex-wrap gap-2">
|
|
141
|
+
<DataBadge variant="category" category={4} interactive onClick={() => alert('Clicked!')}>
|
|
142
|
+
Interactive
|
|
143
|
+
</DataBadge>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
)
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
title: "Status Badges",
|
|
150
|
+
description: "Use status badges to communicate operational states, health indicators, and system feedback.",
|
|
151
|
+
badge: {
|
|
152
|
+
text: "5 States",
|
|
153
|
+
variant: "status",
|
|
154
|
+
status: "success"
|
|
155
|
+
},
|
|
156
|
+
category: 2,
|
|
157
|
+
children: (
|
|
158
|
+
<div className="space-y-4">
|
|
159
|
+
<div className="flex flex-wrap gap-2">
|
|
160
|
+
<DataBadge variant="status" status="success">
|
|
161
|
+
<CheckCircle className="w-3 h-3 mr-1" />
|
|
162
|
+
Success
|
|
163
|
+
</DataBadge>
|
|
164
|
+
<DataBadge variant="status" status="warning">
|
|
165
|
+
<AlertTriangle className="w-3 h-3 mr-1" />
|
|
166
|
+
Warning
|
|
167
|
+
</DataBadge>
|
|
168
|
+
<DataBadge variant="status" status="error">
|
|
169
|
+
<XCircle className="w-3 h-3 mr-1" />
|
|
170
|
+
Error
|
|
171
|
+
</DataBadge>
|
|
172
|
+
<DataBadge variant="status" status="info">
|
|
173
|
+
<Info className="w-3 h-3 mr-1" />
|
|
174
|
+
Info
|
|
175
|
+
</DataBadge>
|
|
176
|
+
<DataBadge variant="status" status="neutral">
|
|
177
|
+
<Clock className="w-3 h-3 mr-1" />
|
|
178
|
+
Neutral
|
|
179
|
+
</DataBadge>
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
]
|
|
185
|
+
}}
|
|
186
|
+
/>
|
|
187
|
+
);
|
|
188
|
+
};
|