@pattern-stack/frontend-patterns 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atoms/composed/Accordion/Accordion.d.ts.map +1 -0
- package/dist/atoms/composed/Accordion/index.d.ts.map +1 -0
- package/dist/atoms/composed/Alert/Alert.d.ts.map +1 -0
- package/dist/atoms/composed/Alert/index.d.ts.map +1 -0
- package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/atoms/composed/Breadcrumb/index.d.ts.map +1 -0
- package/dist/atoms/{components/data → composed}/Chart/Chart.d.ts +2 -2
- package/dist/atoms/composed/Chart/Chart.d.ts.map +1 -0
- package/dist/atoms/composed/Chart/index.d.ts.map +1 -0
- package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts.map +1 -0
- package/dist/atoms/composed/ColorSwatch/index.d.ts.map +1 -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.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.map +1 -0
- package/dist/atoms/composed/DataTable/index.d.ts.map +1 -0
- package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/atoms/composed/DateTimePicker/index.d.ts.map +1 -0
- package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts.map +1 -0
- package/dist/atoms/composed/DetailedCard/index.d.ts.map +1 -0
- package/dist/atoms/composed/EmptyState/EmptyState.d.ts.map +1 -0
- package/dist/atoms/composed/EmptyState/index.d.ts.map +1 -0
- package/dist/atoms/composed/FileUpload/FileUpload.d.ts.map +1 -0
- package/dist/atoms/composed/FileUpload/index.d.ts.map +1 -0
- package/dist/atoms/composed/FormField/FormField.d.ts.map +1 -0
- package/dist/atoms/composed/FormField/index.d.ts.map +1 -0
- package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts.map +1 -0
- package/dist/atoms/composed/GlobalSearch/index.d.ts.map +1 -0
- package/dist/atoms/{components/data → composed}/IconBadge/IconBadge.d.ts +1 -2
- package/dist/atoms/composed/IconBadge/IconBadge.d.ts.map +1 -0
- package/dist/atoms/composed/IconBadge/index.d.ts.map +1 -0
- package/dist/atoms/composed/Modal/Modal.d.ts.map +1 -0
- package/dist/atoms/composed/Modal/index.d.ts.map +1 -0
- package/dist/atoms/composed/PaletteSwitcher.d.ts.map +1 -0
- package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts.map +1 -0
- package/dist/atoms/composed/ProgressBar/index.d.ts.map +1 -0
- package/dist/atoms/{components/data → composed}/StatCard/StatCard.d.ts +1 -1
- package/dist/atoms/composed/StatCard/StatCard.d.ts.map +1 -0
- package/dist/atoms/composed/StatCard/index.d.ts.map +1 -0
- package/dist/atoms/composed/StyleGuide.d.ts.map +1 -0
- package/dist/atoms/composed/Toast/Toast.d.ts.map +1 -0
- package/dist/atoms/composed/Toast/index.d.ts.map +1 -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.map +1 -0
- package/dist/atoms/composed/UserAvatar/index.d.ts.map +1 -0
- package/dist/atoms/composed/UserMenu/UserMenu.d.ts.map +1 -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/index.d.ts +5 -4
- package/dist/atoms/index.d.ts.map +1 -1
- package/dist/atoms/shared/index.d.ts +0 -1
- package/dist/atoms/shared/index.d.ts.map +1 -1
- package/dist/atoms/types/index.d.ts +0 -3
- package/dist/atoms/types/index.d.ts.map +1 -1
- package/dist/atoms/ui/Badge.d.ts.map +1 -0
- package/dist/atoms/ui/ErrorBoundary.d.ts.map +1 -0
- package/dist/atoms/ui/Select.d.ts.map +1 -0
- package/dist/atoms/ui/Switch.d.ts.map +1 -0
- package/dist/atoms/ui/Tabs.d.ts.map +1 -0
- package/dist/atoms/ui/avatar.d.ts.map +1 -0
- package/dist/atoms/{primitives → ui}/button.d.ts +3 -3
- package/dist/atoms/ui/button.d.ts.map +1 -0
- package/dist/atoms/ui/card.d.ts.map +1 -0
- package/dist/atoms/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/atoms/{primitives → ui}/index.d.ts +0 -2
- package/dist/atoms/ui/index.d.ts.map +1 -0
- package/dist/atoms/ui/input.d.ts.map +1 -0
- package/dist/atoms/ui/label.d.ts.map +1 -0
- package/dist/atoms/ui/skeleton.d.ts.map +1 -0
- package/dist/atoms/ui/spinner.d.ts.map +1 -0
- package/dist/atoms/ui/table.d.ts.map +1 -0
- package/dist/atoms/utils/utils.d.ts +0 -5
- package/dist/atoms/utils/utils.d.ts.map +1 -1
- package/dist/features/auth/components/LoginForm.d.ts.map +1 -1
- package/dist/features/auth/hooks/index.d.ts +0 -1
- package/dist/features/auth/hooks/index.d.ts.map +1 -1
- package/dist/features/auth/index.d.ts +0 -1
- package/dist/features/auth/index.d.ts.map +1 -1
- package/dist/frontend-patterns.css +1 -4417
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +8507 -27524
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +8466 -27505
- package/dist/index.js.map +1 -1
- package/dist/molecules/forms/SearchInput.d.ts.map +1 -1
- package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -1
- package/dist/molecules/layout/Sidebar.d.ts.map +1 -1
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +0 -2
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -1
- package/dist/molecules/layout/index.d.ts +0 -4
- package/dist/molecules/layout/index.d.ts.map +1 -1
- package/dist/organisms/showcase/ComponentShowcasePage.d.ts.map +1 -1
- package/dist/templates/DataTemplate.d.ts +1 -1
- package/dist/templates/DataTemplate.d.ts.map +1 -1
- package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -1
- package/dist/templates/admin/AdminDashboardTemplate.d.ts +9 -6
- package/dist/templates/admin/AdminDashboardTemplate.d.ts.map +1 -1
- package/dist/templates/admin/AdminDetailTemplate.d.ts +1 -1
- package/dist/templates/admin/AdminDetailTemplate.d.ts.map +1 -1
- package/dist/templates/factory.d.ts +1 -2
- package/dist/templates/factory.d.ts.map +1 -1
- package/dist/templates/index.d.ts +0 -2
- package/dist/templates/index.d.ts.map +1 -1
- package/package.json +10 -35
- 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
- package/CHANGELOG.md +0 -63
- package/LICENSE +0 -19
- package/cli/cli/commands/generate-hooks.js +0 -291
- package/cli/cli/commands/init.js +0 -25
- package/cli/cli/commands/scaffold.js +0 -201
- package/cli/cli/index.js +0 -113
- package/cli/commands/generate-hooks.js +0 -288
- package/cli/commands/generate-hooks.ts +0 -316
- package/cli/commands/init.js +0 -22
- package/cli/commands/init.ts +0 -33
- package/cli/commands/scaffold.js +0 -198
- package/cli/commands/scaffold.ts +0 -224
- package/cli/index.js +0 -3210
- package/cli/index.ts +0 -122
- package/cli/src/codegen/openapi/bulk-hook-generator.js +0 -252
- package/cli/src/codegen/openapi/bulk-types.js +0 -89
- package/cli/src/codegen/openapi/client-generator.js +0 -672
- package/cli/src/codegen/openapi/confidence-scorer.js +0 -204
- package/cli/src/codegen/openapi/hook-config.js +0 -66
- package/cli/src/codegen/openapi/hook-generator.js +0 -1057
- package/cli/src/codegen/openapi/parser.js +0 -279
- package/cli/src/codegen/openapi/type-generator.js +0 -339
- package/dist/atoms/components/core/Avatar/Avatar.d.ts +0 -41
- package/dist/atoms/components/core/Avatar/Avatar.d.ts.map +0 -1
- package/dist/atoms/components/core/Avatar/index.d.ts +0 -2
- package/dist/atoms/components/core/Avatar/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Badge/Badge.d.ts +0 -38
- package/dist/atoms/components/core/Badge/Badge.d.ts.map +0 -1
- package/dist/atoms/components/core/Badge/index.d.ts +0 -2
- package/dist/atoms/components/core/Badge/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Button/Button.d.ts +0 -28
- package/dist/atoms/components/core/Button/Button.d.ts.map +0 -1
- package/dist/atoms/components/core/Button/index.d.ts +0 -3
- package/dist/atoms/components/core/Button/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Card/Card.d.ts +0 -41
- package/dist/atoms/components/core/Card/Card.d.ts.map +0 -1
- package/dist/atoms/components/core/Card/index.d.ts +0 -3
- package/dist/atoms/components/core/Card/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Checkbox/Checkbox.d.ts +0 -28
- package/dist/atoms/components/core/Checkbox/Checkbox.d.ts.map +0 -1
- package/dist/atoms/components/core/Checkbox/index.d.ts +0 -3
- package/dist/atoms/components/core/Checkbox/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Input/Input.d.ts +0 -37
- package/dist/atoms/components/core/Input/Input.d.ts.map +0 -1
- package/dist/atoms/components/core/Input/index.d.ts +0 -3
- package/dist/atoms/components/core/Input/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Label/Label.d.ts +0 -23
- package/dist/atoms/components/core/Label/Label.d.ts.map +0 -1
- package/dist/atoms/components/core/Label/index.d.ts +0 -3
- package/dist/atoms/components/core/Label/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Select/Select.d.ts +0 -42
- package/dist/atoms/components/core/Select/Select.d.ts.map +0 -1
- package/dist/atoms/components/core/Select/index.d.ts +0 -3
- package/dist/atoms/components/core/Select/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Spinner/Spinner.d.ts +0 -25
- package/dist/atoms/components/core/Spinner/Spinner.d.ts.map +0 -1
- package/dist/atoms/components/core/Spinner/index.d.ts +0 -3
- package/dist/atoms/components/core/Spinner/index.d.ts.map +0 -1
- package/dist/atoms/components/core/Switch/Switch.d.ts +0 -35
- package/dist/atoms/components/core/Switch/Switch.d.ts.map +0 -1
- package/dist/atoms/components/core/Switch/index.d.ts +0 -2
- package/dist/atoms/components/core/Switch/index.d.ts.map +0 -1
- package/dist/atoms/components/core/index.d.ts +0 -11
- package/dist/atoms/components/core/index.d.ts.map +0 -1
- package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts +0 -4
- package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts.map +0 -1
- package/dist/atoms/components/data/ActivityFeed/ActivityFeed.stories.d.ts +0 -38
- package/dist/atoms/components/data/ActivityFeed/ActivityFeed.stories.d.ts.map +0 -1
- package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts +0 -9
- package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts.map +0 -1
- package/dist/atoms/components/data/ActivityFeed/index.d.ts +0 -4
- package/dist/atoms/components/data/ActivityFeed/index.d.ts.map +0 -1
- package/dist/atoms/components/data/ActivityFeed/types.d.ts +0 -26
- package/dist/atoms/components/data/ActivityFeed/types.d.ts.map +0 -1
- package/dist/atoms/components/data/ActivityFeed/utils.d.ts +0 -5
- package/dist/atoms/components/data/ActivityFeed/utils.d.ts.map +0 -1
- package/dist/atoms/components/data/Chart/Chart.d.ts.map +0 -1
- package/dist/atoms/components/data/Chart/index.d.ts.map +0 -1
- package/dist/atoms/components/data/DataBadge/DataBadge.d.ts +0 -18
- package/dist/atoms/components/data/DataBadge/DataBadge.d.ts.map +0 -1
- package/dist/atoms/components/data/DataBadge/index.d.ts.map +0 -1
- package/dist/atoms/components/data/DataTable/DataTable.d.ts +0 -5
- package/dist/atoms/components/data/DataTable/DataTable.d.ts.map +0 -1
- package/dist/atoms/components/data/DataTable/DataTable.types.d.ts +0 -51
- package/dist/atoms/components/data/DataTable/DataTable.types.d.ts.map +0 -1
- package/dist/atoms/components/data/DataTable/TableCellWithTooltip.d.ts.map +0 -1
- package/dist/atoms/components/data/DataTable/index.d.ts.map +0 -1
- package/dist/atoms/components/data/DetailedCard/DetailedCard.d.ts.map +0 -1
- package/dist/atoms/components/data/DetailedCard/index.d.ts.map +0 -1
- package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts +0 -24
- package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts.map +0 -1
- package/dist/atoms/components/data/EntityIcon/index.d.ts +0 -2
- package/dist/atoms/components/data/EntityIcon/index.d.ts.map +0 -1
- package/dist/atoms/components/data/IconBadge/IconBadge.d.ts.map +0 -1
- package/dist/atoms/components/data/IconBadge/index.d.ts.map +0 -1
- package/dist/atoms/components/data/ListCard/ListCard.d.ts +0 -32
- package/dist/atoms/components/data/ListCard/ListCard.d.ts.map +0 -1
- package/dist/atoms/components/data/ListCard/index.d.ts +0 -2
- package/dist/atoms/components/data/ListCard/index.d.ts.map +0 -1
- package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts.map +0 -1
- package/dist/atoms/components/data/ProgressBar/index.d.ts.map +0 -1
- package/dist/atoms/components/data/StatCard/StatCard.d.ts.map +0 -1
- package/dist/atoms/components/data/StatCard/index.d.ts.map +0 -1
- package/dist/atoms/components/data/Table/Table.d.ts +0 -41
- package/dist/atoms/components/data/Table/Table.d.ts.map +0 -1
- package/dist/atoms/components/data/Table/index.d.ts +0 -2
- package/dist/atoms/components/data/Table/index.d.ts.map +0 -1
- package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts +0 -26
- package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts.map +0 -1
- package/dist/atoms/components/data/TruncatedText/index.d.ts +0 -2
- package/dist/atoms/components/data/TruncatedText/index.d.ts.map +0 -1
- package/dist/atoms/components/data/index.d.ts +0 -13
- package/dist/atoms/components/data/index.d.ts.map +0 -1
- package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts +0 -19
- package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts.map +0 -1
- package/dist/atoms/components/domain/SalesPanel/index.d.ts +0 -2
- package/dist/atoms/components/domain/SalesPanel/index.d.ts.map +0 -1
- package/dist/atoms/components/domain/SalesPanel/mockSalesData.d.ts +0 -63
- package/dist/atoms/components/domain/SalesPanel/mockSalesData.d.ts.map +0 -1
- package/dist/atoms/components/domain/index.d.ts +0 -2
- package/dist/atoms/components/domain/index.d.ts.map +0 -1
- package/dist/atoms/components/feedback/Alert/Alert.d.ts.map +0 -1
- package/dist/atoms/components/feedback/Alert/index.d.ts.map +0 -1
- package/dist/atoms/components/feedback/EmptyState/EmptyState.d.ts.map +0 -1
- package/dist/atoms/components/feedback/EmptyState/index.d.ts.map +0 -1
- package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts +0 -61
- package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts.map +0 -1
- package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts +0 -2
- package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts.map +0 -1
- package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts +0 -41
- package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts.map +0 -1
- package/dist/atoms/components/feedback/Skeleton/index.d.ts +0 -2
- package/dist/atoms/components/feedback/Skeleton/index.d.ts.map +0 -1
- package/dist/atoms/components/feedback/Toast/Toast.d.ts.map +0 -1
- package/dist/atoms/components/feedback/Toast/index.d.ts.map +0 -1
- package/dist/atoms/components/feedback/index.d.ts +0 -6
- package/dist/atoms/components/feedback/index.d.ts.map +0 -1
- package/dist/atoms/components/forms/DateTimePicker/DateTimePicker.d.ts.map +0 -1
- package/dist/atoms/components/forms/DateTimePicker/index.d.ts.map +0 -1
- package/dist/atoms/components/forms/FileUpload/FileUpload.d.ts.map +0 -1
- package/dist/atoms/components/forms/FileUpload/index.d.ts.map +0 -1
- package/dist/atoms/components/forms/FormField/FormField.d.ts.map +0 -1
- package/dist/atoms/components/forms/FormField/index.d.ts.map +0 -1
- package/dist/atoms/components/forms/index.d.ts +0 -4
- package/dist/atoms/components/forms/index.d.ts.map +0 -1
- package/dist/atoms/components/index.d.ts +0 -10
- package/dist/atoms/components/index.d.ts.map +0 -1
- package/dist/atoms/components/layout/Accordion/Accordion.d.ts.map +0 -1
- package/dist/atoms/components/layout/Accordion/index.d.ts.map +0 -1
- package/dist/atoms/components/layout/Breadcrumb/Breadcrumb.d.ts.map +0 -1
- package/dist/atoms/components/layout/Breadcrumb/index.d.ts.map +0 -1
- package/dist/atoms/components/layout/Dialog/index.d.ts +0 -3
- package/dist/atoms/components/layout/Dialog/index.d.ts.map +0 -1
- package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts +0 -40
- package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts.map +0 -1
- package/dist/atoms/components/layout/Dropdown/index.d.ts +0 -3
- package/dist/atoms/components/layout/Dropdown/index.d.ts.map +0 -1
- package/dist/atoms/components/layout/Modal/Modal.d.ts.map +0 -1
- package/dist/atoms/components/layout/Modal/index.d.ts.map +0 -1
- package/dist/atoms/components/layout/Tabs/index.d.ts +0 -2
- package/dist/atoms/components/layout/Tabs/index.d.ts.map +0 -1
- package/dist/atoms/components/layout/Tooltip/Tooltip.d.ts.map +0 -1
- package/dist/atoms/components/layout/Tooltip/index.d.ts +0 -2
- package/dist/atoms/components/layout/Tooltip/index.d.ts.map +0 -1
- package/dist/atoms/components/layout/index.d.ts +0 -8
- package/dist/atoms/components/layout/index.d.ts.map +0 -1
- package/dist/atoms/components/navigation/GlobalSearch/GlobalSearch.d.ts.map +0 -1
- package/dist/atoms/components/navigation/GlobalSearch/index.d.ts.map +0 -1
- package/dist/atoms/components/navigation/index.d.ts +0 -2
- package/dist/atoms/components/navigation/index.d.ts.map +0 -1
- package/dist/atoms/components/theme/ColorSwatch/ColorSwatch.d.ts.map +0 -1
- package/dist/atoms/components/theme/ColorSwatch/index.d.ts.map +0 -1
- package/dist/atoms/components/theme/DarkModeToggle.d.ts.map +0 -1
- package/dist/atoms/components/theme/PaletteSwitcher.d.ts.map +0 -1
- package/dist/atoms/components/theme/StyleGuide.d.ts.map +0 -1
- package/dist/atoms/components/theme/index.d.ts +0 -5
- package/dist/atoms/components/theme/index.d.ts.map +0 -1
- package/dist/atoms/components/user/UserAvatar/UserAvatar.d.ts.map +0 -1
- package/dist/atoms/components/user/UserAvatar/index.d.ts.map +0 -1
- package/dist/atoms/components/user/UserMenu/UserMenu.d.ts.map +0 -1
- package/dist/atoms/components/user/UserMenu/index.d.ts.map +0 -1
- package/dist/atoms/components/user/index.d.ts +0 -3
- package/dist/atoms/components/user/index.d.ts.map +0 -1
- package/dist/atoms/config/responsive.d.ts +0 -147
- package/dist/atoms/config/responsive.d.ts.map +0 -1
- package/dist/atoms/hooks/index.d.ts +0 -5
- package/dist/atoms/hooks/index.d.ts.map +0 -1
- package/dist/atoms/hooks/use-toast.d.ts +0 -16
- package/dist/atoms/hooks/use-toast.d.ts.map +0 -1
- package/dist/atoms/hooks/useResponsive.d.ts +0 -42
- package/dist/atoms/hooks/useResponsive.d.ts.map +0 -1
- package/dist/atoms/primitives/Badge.d.ts.map +0 -1
- package/dist/atoms/primitives/ErrorBoundary.d.ts.map +0 -1
- package/dist/atoms/primitives/Select.d.ts.map +0 -1
- package/dist/atoms/primitives/Switch.d.ts.map +0 -1
- package/dist/atoms/primitives/Tabs.d.ts.map +0 -1
- package/dist/atoms/primitives/avatar.d.ts.map +0 -1
- package/dist/atoms/primitives/button.d.ts.map +0 -1
- package/dist/atoms/primitives/card.d.ts.map +0 -1
- package/dist/atoms/primitives/checkbox.d.ts +0 -12
- package/dist/atoms/primitives/checkbox.d.ts.map +0 -1
- package/dist/atoms/primitives/dialog.d.ts +0 -34
- package/dist/atoms/primitives/dialog.d.ts.map +0 -1
- package/dist/atoms/primitives/dropdown-menu.d.ts.map +0 -1
- package/dist/atoms/primitives/index.d.ts.map +0 -1
- package/dist/atoms/primitives/input.d.ts.map +0 -1
- package/dist/atoms/primitives/label.d.ts.map +0 -1
- package/dist/atoms/primitives/skeleton.d.ts.map +0 -1
- package/dist/atoms/primitives/spinner.d.ts.map +0 -1
- package/dist/atoms/primitives/table.d.ts.map +0 -1
- package/dist/atoms/types/entity-config.d.ts +0 -117
- package/dist/atoms/types/entity-config.d.ts.map +0 -1
- package/dist/atoms/types/navigation.d.ts +0 -30
- package/dist/atoms/types/navigation.d.ts.map +0 -1
- package/dist/atoms/types/ui-config.d.ts +0 -50
- package/dist/atoms/types/ui-config.d.ts.map +0 -1
- package/dist/atoms/utils/color-manager.d.ts +0 -68
- package/dist/atoms/utils/color-manager.d.ts.map +0 -1
- package/dist/atoms/utils/debounce.d.ts +0 -6
- package/dist/atoms/utils/debounce.d.ts.map +0 -1
- package/dist/atoms/utils/field-detection.d.ts +0 -15
- package/dist/atoms/utils/field-detection.d.ts.map +0 -1
- package/dist/atoms/utils/icon-resolver.d.ts +0 -76
- package/dist/atoms/utils/icon-resolver.d.ts.map +0 -1
- package/dist/atoms/utils/index.d.ts +0 -5
- package/dist/atoms/utils/index.d.ts.map +0 -1
- package/dist/atoms/utils/metric-engine.d.ts +0 -30
- package/dist/atoms/utils/metric-engine.d.ts.map +0 -1
- package/dist/atoms/utils/ui-mapping.d.ts +0 -17
- package/dist/atoms/utils/ui-mapping.d.ts.map +0 -1
- package/dist/codegen/index.d.ts +0 -7
- package/dist/codegen/index.d.ts.map +0 -1
- package/dist/codegen/openapi/bulk-hook-generator.d.ts +0 -40
- package/dist/codegen/openapi/bulk-hook-generator.d.ts.map +0 -1
- package/dist/codegen/openapi/bulk-types.d.ts +0 -142
- package/dist/codegen/openapi/bulk-types.d.ts.map +0 -1
- package/dist/codegen/openapi/client-generator.d.ts +0 -52
- package/dist/codegen/openapi/client-generator.d.ts.map +0 -1
- package/dist/codegen/openapi/confidence-scorer.d.ts +0 -30
- package/dist/codegen/openapi/confidence-scorer.d.ts.map +0 -1
- package/dist/codegen/openapi/hook-config.d.ts +0 -50
- package/dist/codegen/openapi/hook-config.d.ts.map +0 -1
- package/dist/codegen/openapi/hook-generator.d.ts +0 -108
- package/dist/codegen/openapi/hook-generator.d.ts.map +0 -1
- package/dist/codegen/openapi/index.d.ts +0 -27
- package/dist/codegen/openapi/index.d.ts.map +0 -1
- package/dist/codegen/openapi/parser.d.ts +0 -107
- package/dist/codegen/openapi/parser.d.ts.map +0 -1
- package/dist/codegen/openapi/type-generator.d.ts +0 -53
- package/dist/codegen/openapi/type-generator.d.ts.map +0 -1
- package/dist/features/auth/hooks/useAuthContext.d.ts +0 -7
- package/dist/features/auth/hooks/useAuthContext.d.ts.map +0 -1
- package/dist/features/auth/providers/MockAuthProvider.d.ts +0 -9
- package/dist/features/auth/providers/MockAuthProvider.d.ts.map +0 -1
- package/dist/features/auth/providers/index.d.ts +0 -2
- package/dist/features/auth/providers/index.d.ts.map +0 -1
- package/dist/features/auth/services/mock-auth-service.d.ts +0 -17
- package/dist/features/auth/services/mock-auth-service.d.ts.map +0 -1
- package/dist/generated/client/client.d.ts +0 -23
- package/dist/generated/client/client.d.ts.map +0 -1
- package/dist/generated/client/config.d.ts +0 -10
- package/dist/generated/client/config.d.ts.map +0 -1
- package/dist/generated/client/index.d.ts +0 -12
- package/dist/generated/client/index.d.ts.map +0 -1
- package/dist/generated/client/methods.d.ts +0 -591
- package/dist/generated/client/methods.d.ts.map +0 -1
- package/dist/generated/client/types.d.ts +0 -37
- package/dist/generated/client/types.d.ts.map +0 -1
- package/dist/generated/example.d.ts +0 -8
- package/dist/generated/example.d.ts.map +0 -1
- package/dist/generated/hooks/index.d.ts +0 -11
- package/dist/generated/hooks/index.d.ts.map +0 -1
- package/dist/generated/hooks/keys.d.ts +0 -59
- package/dist/generated/hooks/keys.d.ts.map +0 -1
- package/dist/generated/hooks/mutations.d.ts +0 -551
- package/dist/generated/hooks/mutations.d.ts.map +0 -1
- package/dist/generated/hooks/queries.d.ts +0 -426
- package/dist/generated/hooks/queries.d.ts.map +0 -1
- package/dist/generated/hooks/types.d.ts +0 -318
- package/dist/generated/hooks/types.d.ts.map +0 -1
- package/dist/generated/index.d.ts +0 -13
- package/dist/generated/index.d.ts.map +0 -1
- package/dist/generated/types/endpoints.d.ts +0 -1364
- package/dist/generated/types/endpoints.d.ts.map +0 -1
- package/dist/generated/types/index.d.ts +0 -11
- package/dist/generated/types/index.d.ts.map +0 -1
- package/dist/generated/types/parameters.d.ts +0 -8
- package/dist/generated/types/parameters.d.ts.map +0 -1
- package/dist/generated/types/responses.d.ts +0 -8
- package/dist/generated/types/responses.d.ts.map +0 -1
- package/dist/generated/types/schemas.d.ts +0 -652
- package/dist/generated/types/schemas.d.ts.map +0 -1
- package/dist/molecules/feedback/index.d.ts +0 -2
- package/dist/molecules/feedback/index.d.ts.map +0 -1
- package/dist/molecules/layout/BulkSelectionBar.d.ts +0 -15
- package/dist/molecules/layout/BulkSelectionBar.d.ts.map +0 -1
- package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts +0 -16
- package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts.map +0 -1
- package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts +0 -2
- package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts.map +0 -1
- package/dist/molecules/layout/NavigationContext.d.ts +0 -15
- package/dist/molecules/layout/NavigationContext.d.ts.map +0 -1
- package/dist/templates/EnhancedDataTemplate.d.ts +0 -188
- package/dist/templates/EnhancedDataTemplate.d.ts.map +0 -1
- package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts +0 -18
- package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts.map +0 -1
- package/dist/templates/EnhancedDataTemplate.hooks.d.ts +0 -22
- package/dist/templates/EnhancedDataTemplate.hooks.d.ts.map +0 -1
- package/dist/templates/api/APIDataTemplate.d.ts +0 -66
- package/dist/templates/api/APIDataTemplate.d.ts.map +0 -1
- package/dist/templates/api/index.d.ts +0 -8
- package/dist/templates/api/index.d.ts.map +0 -1
- /package/dist/atoms/{components/layout → composed}/Accordion/Accordion.d.ts +0 -0
- /package/dist/atoms/{components/layout → composed}/Accordion/index.d.ts +0 -0
- /package/dist/atoms/{components/feedback → composed}/Alert/Alert.d.ts +0 -0
- /package/dist/atoms/{components/feedback → composed}/Alert/index.d.ts +0 -0
- /package/dist/atoms/{components/layout → composed}/Breadcrumb/Breadcrumb.d.ts +0 -0
- /package/dist/atoms/{components/layout → composed}/Breadcrumb/index.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/Chart/index.d.ts +0 -0
- /package/dist/atoms/{components/theme → composed}/ColorSwatch/ColorSwatch.d.ts +0 -0
- /package/dist/atoms/{components/theme → composed}/ColorSwatch/index.d.ts +0 -0
- /package/dist/atoms/{components/theme → composed}/DarkModeToggle.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/DataBadge/index.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/DataTable/TableCellWithTooltip.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/DataTable/index.d.ts +0 -0
- /package/dist/atoms/{components/forms → composed}/DateTimePicker/DateTimePicker.d.ts +0 -0
- /package/dist/atoms/{components/forms → composed}/DateTimePicker/index.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/DetailedCard/DetailedCard.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/DetailedCard/index.d.ts +0 -0
- /package/dist/atoms/{components/feedback → composed}/EmptyState/EmptyState.d.ts +0 -0
- /package/dist/atoms/{components/feedback → composed}/EmptyState/index.d.ts +0 -0
- /package/dist/atoms/{components/forms → composed}/FileUpload/FileUpload.d.ts +0 -0
- /package/dist/atoms/{components/forms → composed}/FileUpload/index.d.ts +0 -0
- /package/dist/atoms/{components/forms → composed}/FormField/FormField.d.ts +0 -0
- /package/dist/atoms/{components/forms → composed}/FormField/index.d.ts +0 -0
- /package/dist/atoms/{components/navigation → composed}/GlobalSearch/GlobalSearch.d.ts +0 -0
- /package/dist/atoms/{components/navigation → composed}/GlobalSearch/index.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/IconBadge/index.d.ts +0 -0
- /package/dist/atoms/{components/layout → composed}/Modal/Modal.d.ts +0 -0
- /package/dist/atoms/{components/layout → composed}/Modal/index.d.ts +0 -0
- /package/dist/atoms/{components/theme → composed}/PaletteSwitcher.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/ProgressBar/ProgressBar.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/ProgressBar/index.d.ts +0 -0
- /package/dist/atoms/{components/data → composed}/StatCard/index.d.ts +0 -0
- /package/dist/atoms/{components/theme → composed}/StyleGuide.d.ts +0 -0
- /package/dist/atoms/{components/feedback → composed}/Toast/Toast.d.ts +0 -0
- /package/dist/atoms/{components/feedback → composed}/Toast/index.d.ts +0 -0
- /package/dist/atoms/{components/layout → composed}/Tooltip/Tooltip.d.ts +0 -0
- /package/dist/atoms/{components/user → composed}/UserAvatar/UserAvatar.d.ts +0 -0
- /package/dist/atoms/{components/user → composed}/UserAvatar/index.d.ts +0 -0
- /package/dist/atoms/{components/user → composed}/UserMenu/UserMenu.d.ts +0 -0
- /package/dist/atoms/{components/user → composed}/UserMenu/index.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/Badge.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/ErrorBoundary.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/Select.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/Switch.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/Tabs.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/avatar.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/card.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/dropdown-menu.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/input.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/label.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/skeleton.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/spinner.d.ts +0 -0
- /package/dist/atoms/{primitives → ui}/table.d.ts +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface for components that support loading states
|
|
3
|
+
*/
|
|
4
|
+
export interface ILoadable {
|
|
5
|
+
/** Whether the component is in a loading state */
|
|
6
|
+
isLoading?: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Interface for list components that support configurable loading item counts
|
|
11
|
+
*/
|
|
12
|
+
export interface IListLoadable extends ILoadable {
|
|
13
|
+
/** Number of skeleton items to show when loading */
|
|
14
|
+
loadingItemCount?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Common loading states for data components
|
|
19
|
+
*/
|
|
20
|
+
export type LoadingState = 'idle' | 'loading' | 'error' | 'success';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Props for components that need loading state management
|
|
24
|
+
*/
|
|
25
|
+
export interface LoadingStateProps {
|
|
26
|
+
loadingState?: LoadingState;
|
|
27
|
+
error?: string | null;
|
|
28
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { cn } from '../utils/utils';
|
|
3
|
+
|
|
4
|
+
interface BadgeProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
variant?: 'default' | 'secondary' | 'destructive' | 'outline';
|
|
7
|
+
size?: 'sm' | 'md' | 'lg';
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const Badge = ({ children, variant = 'default', size = 'md', className }: BadgeProps) => {
|
|
12
|
+
const baseClasses = 'inline-flex items-center rounded-full font-medium transition-all duration-150';
|
|
13
|
+
const sizeClasses = {
|
|
14
|
+
sm: 'px-2 py-0.5 text-xs',
|
|
15
|
+
md: 'px-2.5 py-1 text-xs',
|
|
16
|
+
lg: 'px-3 py-1.5 text-sm'
|
|
17
|
+
};
|
|
18
|
+
const variantClasses = {
|
|
19
|
+
default: 'bg-primary/10 text-primary border border-primary/20 hover:bg-primary/20',
|
|
20
|
+
secondary: 'bg-gray-100 text-gray-700 border border-gray-200 hover:bg-gray-200',
|
|
21
|
+
destructive: 'bg-destructive/10 text-destructive border border-destructive/20 hover:bg-destructive/20',
|
|
22
|
+
outline: 'border border-gray-300 text-gray-700 bg-white hover:bg-gray-50'
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<span className={cn(baseClasses, sizeClasses[size], variantClasses[variant], className)}>
|
|
27
|
+
{children}
|
|
28
|
+
</span>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Component } from 'react';
|
|
2
|
+
import type { ErrorInfo, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
fallback?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface State {
|
|
10
|
+
hasError: boolean;
|
|
11
|
+
error?: Error;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class ErrorBoundary extends Component<Props, State> {
|
|
15
|
+
public state: State = {
|
|
16
|
+
hasError: false,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
public static getDerivedStateFromError(error: Error): State {
|
|
20
|
+
return { hasError: true, error };
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public componentDidCatch(error: Error, errorInfo: ErrorInfo) {
|
|
24
|
+
console.error('ErrorBoundary caught an error:', error, errorInfo);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public render() {
|
|
28
|
+
if (this.state.hasError) {
|
|
29
|
+
if (this.props.fallback) {
|
|
30
|
+
return this.props.fallback;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<div className="p-6 bg-destructive/10 border border-destructive/20 rounded-[--radius]">
|
|
35
|
+
<h3 className="text-destructive font-medium mb-2">Something went wrong</h3>
|
|
36
|
+
<p className="text-muted-foreground text-sm mb-4">
|
|
37
|
+
An unexpected error occurred. Please refresh the page or try again later.
|
|
38
|
+
</p>
|
|
39
|
+
<details className="text-xs text-destructive/80">
|
|
40
|
+
<summary className="cursor-pointer">Error details</summary>
|
|
41
|
+
<pre className="mt-2 whitespace-pre-wrap">
|
|
42
|
+
{this.state.error?.message}
|
|
43
|
+
{'\n'}
|
|
44
|
+
{this.state.error?.stack}
|
|
45
|
+
</pre>
|
|
46
|
+
</details>
|
|
47
|
+
<button
|
|
48
|
+
onClick={() => window.location.reload()}
|
|
49
|
+
className="mt-4 px-4 py-2 bg-destructive text-destructive-foreground rounded-[--radius] hover:bg-destructive/90 text-sm"
|
|
50
|
+
>
|
|
51
|
+
Reload Page
|
|
52
|
+
</button>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return this.props.children;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { cn } from '../utils/utils';
|
|
3
|
+
|
|
4
|
+
interface SelectProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
onValueChange?: (value: string) => void;
|
|
7
|
+
defaultValue?: string;
|
|
8
|
+
value?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const Select = ({ children }: SelectProps) => (
|
|
12
|
+
<div className="relative">{children}</div>
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
interface SelectTriggerProps {
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const SelectTrigger = ({ children, className }: SelectTriggerProps) => (
|
|
21
|
+
<button className={cn("flex h-10 w-full items-center justify-between rounded-[--radius] border px-3 py-2 text-sm", className)}>
|
|
22
|
+
{children}
|
|
23
|
+
</button>
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
interface SelectValueProps {
|
|
27
|
+
placeholder?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const SelectValue = ({ placeholder }: SelectValueProps) => (
|
|
31
|
+
<span className="text-muted-foreground">{placeholder}</span>
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
interface SelectContentProps {
|
|
35
|
+
children: React.ReactNode;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const SelectContent = ({ children }: SelectContentProps) => (
|
|
39
|
+
<div className="absolute top-full left-0 z-50 w-full rounded-[--radius] border bg-popover shadow-[0_10px_15px_-3px_rgb(0_0_0_/_0.1),0_4px_6px_-4px_rgb(0_0_0_/_0.1)]">
|
|
40
|
+
{children}
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
interface SelectItemProps {
|
|
45
|
+
children: React.ReactNode;
|
|
46
|
+
value: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const SelectItem = ({ children }: SelectItemProps) => (
|
|
50
|
+
<div className="relative flex w-full cursor-default select-none items-center rounded-[calc(var(--radius)-2px)] py-1.5 px-2 text-sm hover:bg-accent hover:text-accent-foreground">
|
|
51
|
+
{children}
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { cn } from '../utils/utils';
|
|
2
|
+
|
|
3
|
+
interface SwitchProps {
|
|
4
|
+
checked?: boolean;
|
|
5
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const Switch = ({ checked, onCheckedChange, className, disabled }: SwitchProps) => {
|
|
11
|
+
return (
|
|
12
|
+
<button
|
|
13
|
+
type="button"
|
|
14
|
+
role="switch"
|
|
15
|
+
aria-checked={checked}
|
|
16
|
+
data-1p-ignore
|
|
17
|
+
data-lpignore="true"
|
|
18
|
+
className={cn(
|
|
19
|
+
'relative inline-flex h-6 w-11 items-center rounded-full transition-all duration-200',
|
|
20
|
+
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
|
|
21
|
+
'disabled:cursor-not-allowed disabled:opacity-50',
|
|
22
|
+
checked
|
|
23
|
+
? 'bg-category-1 shadow-sm'
|
|
24
|
+
: 'bg-muted border-2 border-border shadow-inner',
|
|
25
|
+
!disabled && 'hover:shadow-md',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
onClick={() => !disabled && onCheckedChange?.(!checked)}
|
|
29
|
+
disabled={disabled}
|
|
30
|
+
>
|
|
31
|
+
<span
|
|
32
|
+
className={cn(
|
|
33
|
+
'inline-block h-4 w-4 transform rounded-full transition-all duration-200 shadow-md',
|
|
34
|
+
'ring-0 bg-background border border-border/20',
|
|
35
|
+
checked
|
|
36
|
+
? 'translate-x-5 bg-white border-white/50'
|
|
37
|
+
: 'translate-x-0.5 bg-background'
|
|
38
|
+
)}
|
|
39
|
+
/>
|
|
40
|
+
</button>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import React, { createContext, useContext, useState } from 'react';
|
|
2
|
+
import { cn } from '../utils/utils';
|
|
3
|
+
import { getAnimationClasses, animationPresets } from '../utils/animations';
|
|
4
|
+
|
|
5
|
+
interface TabsContextType {
|
|
6
|
+
activeTab: string;
|
|
7
|
+
setActiveTab: (tab: string) => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const TabsContext = createContext<TabsContextType | null>(null);
|
|
11
|
+
|
|
12
|
+
interface TabsProps {
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
defaultValue?: string;
|
|
15
|
+
value?: string;
|
|
16
|
+
onValueChange?: (value: string) => void;
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const Tabs = ({ children, defaultValue, value, onValueChange, className }: TabsProps) => {
|
|
21
|
+
const [internalActiveTab, setInternalActiveTab] = useState(defaultValue || '');
|
|
22
|
+
|
|
23
|
+
const activeTab = value !== undefined ? value : internalActiveTab;
|
|
24
|
+
const setActiveTab = (tab: string) => {
|
|
25
|
+
if (onValueChange) {
|
|
26
|
+
onValueChange(tab);
|
|
27
|
+
} else {
|
|
28
|
+
setInternalActiveTab(tab);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<TabsContext.Provider value={{ activeTab, setActiveTab }}>
|
|
34
|
+
<div className={className}>{children}</div>
|
|
35
|
+
</TabsContext.Provider>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
interface TabsListProps {
|
|
40
|
+
children: React.ReactNode;
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export const TabsList = ({ children, className }: TabsListProps) => (
|
|
45
|
+
<div
|
|
46
|
+
className={cn(
|
|
47
|
+
'h-auto min-h-10 items-center justify-center rounded-lg bg-card border border-border shadow-sm',
|
|
48
|
+
'flex flex-wrap gap-1 sm:gap-2 lg:gap-3 w-full lg:w-fit mx-auto mb-6 p-1',
|
|
49
|
+
className
|
|
50
|
+
)}
|
|
51
|
+
data-component-name="TabsList"
|
|
52
|
+
>
|
|
53
|
+
{children}
|
|
54
|
+
</div>
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
interface TabsTriggerProps {
|
|
58
|
+
children: React.ReactNode;
|
|
59
|
+
value: string;
|
|
60
|
+
className?: string;
|
|
61
|
+
category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
|
62
|
+
'data-category'?: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const TabsTrigger = ({ children, value, className, category, 'data-category': dataCategory }: TabsTriggerProps) => {
|
|
66
|
+
// Use data-category if provided, otherwise fallback to category prop, then default to 1
|
|
67
|
+
const effectiveCategory = dataCategory ? parseInt(dataCategory) as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 : category || 1;
|
|
68
|
+
const context = useContext(TabsContext);
|
|
69
|
+
const isActive = context?.activeTab === value;
|
|
70
|
+
|
|
71
|
+
const activeStyles = isActive ? {
|
|
72
|
+
backgroundColor: `hsl(var(--category-${effectiveCategory}) / 0.15)`,
|
|
73
|
+
color: `hsl(var(--category-${effectiveCategory}))`,
|
|
74
|
+
borderColor: `hsl(var(--category-${effectiveCategory}) / 0.3)`,
|
|
75
|
+
boxShadow: 'var(--shadow-sm)'
|
|
76
|
+
} : {};
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<button
|
|
80
|
+
className={cn(
|
|
81
|
+
'w-auto flex-grow items-center justify-center whitespace-nowrap rounded-md px-1 sm:px-2 md:px-3 py-1 sm:py-2 text-sm font-medium',
|
|
82
|
+
// Always have a border to prevent layout shifts
|
|
83
|
+
'border',
|
|
84
|
+
isActive
|
|
85
|
+
? '' // Remove class-based styling when using inline styles
|
|
86
|
+
: cn(
|
|
87
|
+
'text-muted-foreground hover:text-foreground border-transparent hover:bg-muted/80',
|
|
88
|
+
getAnimationClasses(animationPresets.tab)
|
|
89
|
+
),
|
|
90
|
+
className
|
|
91
|
+
)}
|
|
92
|
+
style={activeStyles}
|
|
93
|
+
onClick={() => context?.setActiveTab(value)}
|
|
94
|
+
data-component-name="TabsTrigger"
|
|
95
|
+
>
|
|
96
|
+
{children}
|
|
97
|
+
</button>
|
|
98
|
+
);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
interface TabsContentProps {
|
|
102
|
+
children: React.ReactNode;
|
|
103
|
+
value: string;
|
|
104
|
+
className?: string;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export const TabsContent = ({ children, value, className }: TabsContentProps) => {
|
|
108
|
+
const context = useContext(TabsContext);
|
|
109
|
+
const isActive = context?.activeTab === value;
|
|
110
|
+
|
|
111
|
+
if (!isActive) return null;
|
|
112
|
+
|
|
113
|
+
return (
|
|
114
|
+
<div className={cn('mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', className)}>
|
|
115
|
+
{children}
|
|
116
|
+
</div>
|
|
117
|
+
);
|
|
118
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import * as AvatarPrimitive from "@radix-ui/react-avatar"
|
|
3
|
+
|
|
4
|
+
import { cn } from '../utils/utils'
|
|
5
|
+
|
|
6
|
+
const Avatar = React.forwardRef<
|
|
7
|
+
React.ElementRef<typeof AvatarPrimitive.Root>,
|
|
8
|
+
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
|
|
9
|
+
>(({ className, ...props }, ref) => (
|
|
10
|
+
<AvatarPrimitive.Root
|
|
11
|
+
ref={ref}
|
|
12
|
+
className={cn(
|
|
13
|
+
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
|
|
14
|
+
className
|
|
15
|
+
)}
|
|
16
|
+
{...props}
|
|
17
|
+
/>
|
|
18
|
+
))
|
|
19
|
+
Avatar.displayName = AvatarPrimitive.Root.displayName
|
|
20
|
+
|
|
21
|
+
const AvatarImage = React.forwardRef<
|
|
22
|
+
React.ElementRef<typeof AvatarPrimitive.Image>,
|
|
23
|
+
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
|
|
24
|
+
>(({ className, ...props }, ref) => (
|
|
25
|
+
<AvatarPrimitive.Image
|
|
26
|
+
ref={ref}
|
|
27
|
+
className={cn("aspect-square h-full w-full", className)}
|
|
28
|
+
{...props}
|
|
29
|
+
/>
|
|
30
|
+
))
|
|
31
|
+
AvatarImage.displayName = AvatarPrimitive.Image.displayName
|
|
32
|
+
|
|
33
|
+
const AvatarFallback = React.forwardRef<
|
|
34
|
+
React.ElementRef<typeof AvatarPrimitive.Fallback>,
|
|
35
|
+
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
|
|
36
|
+
>(({ className, ...props }, ref) => (
|
|
37
|
+
<AvatarPrimitive.Fallback
|
|
38
|
+
ref={ref}
|
|
39
|
+
className={cn(
|
|
40
|
+
"flex h-full w-full items-center justify-center rounded-full bg-muted",
|
|
41
|
+
className
|
|
42
|
+
)}
|
|
43
|
+
{...props}
|
|
44
|
+
/>
|
|
45
|
+
))
|
|
46
|
+
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
|
|
47
|
+
|
|
48
|
+
export { Avatar, AvatarImage, AvatarFallback }
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { Slot } from "@radix-ui/react-slot"
|
|
3
|
+
import { cva, type VariantProps } from "class-variance-authority"
|
|
4
|
+
import { cn } from '../utils/utils'
|
|
5
|
+
import { Tooltip } from '../composed/Tooltip'
|
|
6
|
+
|
|
7
|
+
const buttonVariants = cva(
|
|
8
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-lg text-sm font-medium ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/20 focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 active:scale-[0.98]",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
default: "bg-gradient-to-r from-primary to-primary/90 text-primary-foreground hover:from-primary/90 hover:to-primary/80 shadow-sm hover:shadow-md",
|
|
13
|
+
destructive:
|
|
14
|
+
"bg-gradient-to-r from-destructive to-destructive/90 text-destructive-foreground hover:from-destructive/90 hover:to-destructive/80 shadow-sm hover:shadow-md",
|
|
15
|
+
outline:
|
|
16
|
+
"border border-gray-300 bg-white hover:bg-gray-50 hover:border-primary/50 shadow-sm",
|
|
17
|
+
secondary:
|
|
18
|
+
"bg-gray-100 text-gray-900 hover:bg-gray-200 shadow-sm",
|
|
19
|
+
ghost: "hover:bg-muted/80 hover:text-foreground",
|
|
20
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
21
|
+
},
|
|
22
|
+
size: {
|
|
23
|
+
default: "h-10 px-5 py-2",
|
|
24
|
+
sm: "h-9 rounded-lg px-3 text-xs",
|
|
25
|
+
lg: "h-12 rounded-lg px-8 text-base",
|
|
26
|
+
icon: "h-10 w-10",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
defaultVariants: {
|
|
30
|
+
variant: "default",
|
|
31
|
+
size: "default",
|
|
32
|
+
},
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
export interface ButtonProps
|
|
37
|
+
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
38
|
+
VariantProps<typeof buttonVariants> {
|
|
39
|
+
asChild?: boolean
|
|
40
|
+
/** Tooltip to show on hover (especially useful for icon-only buttons) */
|
|
41
|
+
tooltip?: string
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
45
|
+
({ className, variant, size, asChild = false, tooltip, ...props }, ref) => {
|
|
46
|
+
const Comp = asChild ? Slot : "button"
|
|
47
|
+
|
|
48
|
+
const button = (
|
|
49
|
+
<Comp
|
|
50
|
+
className={cn(buttonVariants({ variant, size, className }))}
|
|
51
|
+
ref={ref}
|
|
52
|
+
{...props}
|
|
53
|
+
/>
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
// Show tooltip for icon-only buttons or when explicitly provided
|
|
57
|
+
if (tooltip && !asChild) {
|
|
58
|
+
return (
|
|
59
|
+
<Tooltip content={tooltip} position="top" size="sm">
|
|
60
|
+
{button}
|
|
61
|
+
</Tooltip>
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return button
|
|
66
|
+
}
|
|
67
|
+
)
|
|
68
|
+
Button.displayName = "Button"
|
|
69
|
+
|
|
70
|
+
export { Button, buttonVariants }
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { cn } from '../utils/utils'
|
|
3
|
+
|
|
4
|
+
interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const Card = React.forwardRef<HTMLDivElement, CardProps>(
|
|
9
|
+
({ className, category, style, ...props }, ref) => {
|
|
10
|
+
return (
|
|
11
|
+
<div
|
|
12
|
+
ref={ref}
|
|
13
|
+
className={cn(
|
|
14
|
+
"rounded-lg border border-border bg-card text-card-foreground shadow-sm hover:shadow-md",
|
|
15
|
+
category && [
|
|
16
|
+
"border-l-4 hover:border-border/80",
|
|
17
|
+
`card-category-${category}`
|
|
18
|
+
],
|
|
19
|
+
className
|
|
20
|
+
)}
|
|
21
|
+
style={style}
|
|
22
|
+
{...props}
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
Card.displayName = "Card"
|
|
28
|
+
|
|
29
|
+
const CardHeader = React.forwardRef<
|
|
30
|
+
HTMLDivElement,
|
|
31
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
32
|
+
>(({ className, ...props }, ref) => (
|
|
33
|
+
<div ref={ref} className={cn("flex flex-col space-y-1.5 p-6", className)} {...props} />
|
|
34
|
+
))
|
|
35
|
+
CardHeader.displayName = "CardHeader"
|
|
36
|
+
|
|
37
|
+
const CardTitle = React.forwardRef<
|
|
38
|
+
HTMLParagraphElement,
|
|
39
|
+
React.HTMLAttributes<HTMLHeadingElement>
|
|
40
|
+
>(({ className, ...props }, ref) => (
|
|
41
|
+
<h3
|
|
42
|
+
ref={ref}
|
|
43
|
+
className={cn(
|
|
44
|
+
"text-2xl font-semibold leading-none tracking-tight",
|
|
45
|
+
className
|
|
46
|
+
)}
|
|
47
|
+
{...props}
|
|
48
|
+
/>
|
|
49
|
+
))
|
|
50
|
+
CardTitle.displayName = "CardTitle"
|
|
51
|
+
|
|
52
|
+
const CardDescription = React.forwardRef<
|
|
53
|
+
HTMLParagraphElement,
|
|
54
|
+
React.HTMLAttributes<HTMLParagraphElement>
|
|
55
|
+
>(({ className, ...props }, ref) => (
|
|
56
|
+
<p ref={ref} className={cn("text-sm text-muted-foreground", className)} {...props} />
|
|
57
|
+
))
|
|
58
|
+
CardDescription.displayName = "CardDescription"
|
|
59
|
+
|
|
60
|
+
const CardContent = React.forwardRef<
|
|
61
|
+
HTMLDivElement,
|
|
62
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
63
|
+
>(({ className, ...props }, ref) => (
|
|
64
|
+
<div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
|
|
65
|
+
))
|
|
66
|
+
CardContent.displayName = "CardContent"
|
|
67
|
+
|
|
68
|
+
const CardFooter = React.forwardRef<
|
|
69
|
+
HTMLDivElement,
|
|
70
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
71
|
+
>(({ className, ...props }, ref) => (
|
|
72
|
+
<div ref={ref} className={cn("flex items-center p-6 pt-0", className)} {...props} />
|
|
73
|
+
))
|
|
74
|
+
CardFooter.displayName = "CardFooter"
|
|
75
|
+
|
|
76
|
+
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
|