@pattern-stack/frontend-patterns 0.1.2 → 0.2.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -0
- package/README.md +17 -2
- package/cli/commands/generate-hooks.ts +316 -0
- package/cli/commands/init.ts +33 -0
- package/cli/commands/scaffold.ts +224 -0
- package/cli/index.ts +122 -0
- package/cli/src/codegen/openapi/client-generator.js +659 -0
- package/cli/src/codegen/openapi/hook-generator.js +725 -0
- package/cli/src/codegen/openapi/parser.js +274 -0
- package/cli/src/codegen/openapi/type-generator.js +329 -0
- package/dist/atoms/components/core/Avatar/Avatar.d.ts +41 -0
- package/dist/atoms/components/core/Avatar/Avatar.d.ts.map +1 -0
- package/dist/atoms/components/core/Avatar/index.d.ts +2 -0
- package/dist/atoms/components/core/Avatar/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Badge/Badge.d.ts +38 -0
- package/dist/atoms/components/core/Badge/Badge.d.ts.map +1 -0
- package/dist/atoms/components/core/Badge/index.d.ts +2 -0
- package/dist/atoms/components/core/Badge/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Button/Button.d.ts +28 -0
- package/dist/atoms/components/core/Button/Button.d.ts.map +1 -0
- package/dist/atoms/components/core/Button/index.d.ts +3 -0
- package/dist/atoms/components/core/Button/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Card/Card.d.ts +41 -0
- package/dist/atoms/components/core/Card/Card.d.ts.map +1 -0
- package/dist/atoms/components/core/Card/index.d.ts +3 -0
- package/dist/atoms/components/core/Card/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Checkbox/Checkbox.d.ts +28 -0
- package/dist/atoms/components/core/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/atoms/components/core/Checkbox/index.d.ts +3 -0
- package/dist/atoms/components/core/Checkbox/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Input/Input.d.ts +37 -0
- package/dist/atoms/components/core/Input/Input.d.ts.map +1 -0
- package/dist/atoms/components/core/Input/index.d.ts +3 -0
- package/dist/atoms/components/core/Input/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Label/Label.d.ts +22 -0
- package/dist/atoms/components/core/Label/Label.d.ts.map +1 -0
- package/dist/atoms/components/core/Label/index.d.ts +3 -0
- package/dist/atoms/components/core/Label/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Select/Select.d.ts +42 -0
- package/dist/atoms/components/core/Select/Select.d.ts.map +1 -0
- package/dist/atoms/components/core/Select/index.d.ts +3 -0
- package/dist/atoms/components/core/Select/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Spinner/Spinner.d.ts +25 -0
- package/dist/atoms/components/core/Spinner/Spinner.d.ts.map +1 -0
- package/dist/atoms/components/core/Spinner/index.d.ts +3 -0
- package/dist/atoms/components/core/Spinner/index.d.ts.map +1 -0
- package/dist/atoms/components/core/Switch/Switch.d.ts +35 -0
- package/dist/atoms/components/core/Switch/Switch.d.ts.map +1 -0
- package/dist/atoms/components/core/Switch/index.d.ts +2 -0
- package/dist/atoms/components/core/Switch/index.d.ts.map +1 -0
- package/dist/atoms/components/core/index.d.ts +11 -0
- package/dist/atoms/components/core/index.d.ts.map +1 -0
- package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts +4 -0
- package/dist/atoms/components/data/ActivityFeed/ActivityFeed.d.ts.map +1 -0
- package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts +9 -0
- package/dist/atoms/components/data/ActivityFeed/ActivityFeedItem.d.ts.map +1 -0
- package/dist/atoms/components/data/ActivityFeed/index.d.ts +4 -0
- package/dist/atoms/components/data/ActivityFeed/index.d.ts.map +1 -0
- package/dist/atoms/components/data/ActivityFeed/types.d.ts +26 -0
- package/dist/atoms/components/data/ActivityFeed/types.d.ts.map +1 -0
- package/dist/atoms/components/data/ActivityFeed/utils.d.ts +5 -0
- package/dist/atoms/components/data/ActivityFeed/utils.d.ts.map +1 -0
- package/dist/atoms/components/data/Chart/Chart.d.ts +84 -0
- package/dist/atoms/components/data/Chart/Chart.d.ts.map +1 -0
- package/dist/atoms/components/data/Chart/index.d.ts +3 -0
- package/dist/atoms/components/data/Chart/index.d.ts.map +1 -0
- package/dist/atoms/components/data/DataBadge/DataBadge.d.ts +18 -0
- package/dist/atoms/components/data/DataBadge/DataBadge.d.ts.map +1 -0
- package/dist/atoms/components/data/DataBadge/index.d.ts +2 -0
- package/dist/atoms/components/data/DataBadge/index.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/DataTable.d.ts +5 -0
- package/dist/atoms/components/data/DataTable/DataTable.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/DataTable.types.d.ts +51 -0
- package/dist/atoms/components/data/DataTable/DataTable.types.d.ts.map +1 -0
- package/dist/atoms/{composed → components/data}/DataTable/TableCellWithTooltip.d.ts +1 -1
- package/dist/atoms/components/data/DataTable/TableCellWithTooltip.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/index.d.ts +3 -0
- package/dist/atoms/components/data/DataTable/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/data}/DetailedCard/DetailedCard.d.ts +4 -4
- package/dist/atoms/components/data/DetailedCard/DetailedCard.d.ts.map +1 -0
- package/dist/atoms/components/data/DetailedCard/index.d.ts +3 -0
- package/dist/atoms/components/data/DetailedCard/index.d.ts.map +1 -0
- package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts +24 -0
- package/dist/atoms/components/data/EntityIcon/EntityIcon.d.ts.map +1 -0
- package/dist/atoms/components/data/EntityIcon/index.d.ts +2 -0
- package/dist/atoms/components/data/EntityIcon/index.d.ts.map +1 -0
- package/dist/atoms/components/data/IconBadge/IconBadge.d.ts +17 -0
- package/dist/atoms/components/data/IconBadge/IconBadge.d.ts.map +1 -0
- package/dist/atoms/components/data/IconBadge/index.d.ts +3 -0
- package/dist/atoms/components/data/IconBadge/index.d.ts.map +1 -0
- package/dist/atoms/components/data/ListCard/ListCard.d.ts +32 -0
- package/dist/atoms/components/data/ListCard/ListCard.d.ts.map +1 -0
- package/dist/atoms/components/data/ListCard/index.d.ts +2 -0
- package/dist/atoms/components/data/ListCard/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/data}/ProgressBar/ProgressBar.d.ts +5 -5
- package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts.map +1 -0
- package/dist/atoms/components/data/ProgressBar/index.d.ts +2 -0
- package/dist/atoms/components/data/ProgressBar/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/data}/StatCard/StatCard.d.ts +3 -3
- package/dist/atoms/components/data/StatCard/StatCard.d.ts.map +1 -0
- package/dist/atoms/components/data/StatCard/index.d.ts +2 -0
- package/dist/atoms/components/data/StatCard/index.d.ts.map +1 -0
- package/dist/atoms/components/data/Table/Table.d.ts +41 -0
- package/dist/atoms/components/data/Table/Table.d.ts.map +1 -0
- package/dist/atoms/components/data/Table/index.d.ts +2 -0
- package/dist/atoms/components/data/Table/index.d.ts.map +1 -0
- package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts +26 -0
- package/dist/atoms/components/data/TruncatedText/TruncatedText.d.ts.map +1 -0
- package/dist/atoms/components/data/TruncatedText/index.d.ts +2 -0
- package/dist/atoms/components/data/TruncatedText/index.d.ts.map +1 -0
- package/dist/atoms/components/data/index.d.ts +13 -0
- package/dist/atoms/components/data/index.d.ts.map +1 -0
- package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts +19 -0
- package/dist/atoms/components/domain/SalesPanel/SalesPanel.d.ts.map +1 -0
- package/dist/atoms/components/domain/SalesPanel/index.d.ts +2 -0
- package/dist/atoms/components/domain/SalesPanel/index.d.ts.map +1 -0
- package/dist/atoms/components/domain/SalesPanel/mockSalesData.d.ts +63 -0
- package/dist/atoms/components/domain/SalesPanel/mockSalesData.d.ts.map +1 -0
- package/dist/atoms/components/domain/index.d.ts +2 -0
- package/dist/atoms/components/domain/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/feedback}/Alert/Alert.d.ts +4 -4
- package/dist/atoms/components/feedback/Alert/Alert.d.ts.map +1 -0
- package/dist/atoms/components/feedback/Alert/index.d.ts +2 -0
- package/dist/atoms/components/feedback/Alert/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/feedback}/EmptyState/EmptyState.d.ts +3 -3
- package/dist/atoms/components/feedback/EmptyState/EmptyState.d.ts.map +1 -0
- package/dist/atoms/components/feedback/EmptyState/index.d.ts +2 -0
- package/dist/atoms/components/feedback/EmptyState/index.d.ts.map +1 -0
- package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts +61 -0
- package/dist/atoms/components/feedback/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
- package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts +2 -0
- package/dist/atoms/components/feedback/ErrorBoundary/index.d.ts.map +1 -0
- package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts +67 -0
- package/dist/atoms/components/feedback/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/atoms/components/feedback/Skeleton/index.d.ts +2 -0
- package/dist/atoms/components/feedback/Skeleton/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/feedback}/Toast/Toast.d.ts +4 -4
- package/dist/atoms/components/feedback/Toast/Toast.d.ts.map +1 -0
- package/dist/atoms/{composed → components/feedback}/Toast/index.d.ts +1 -1
- package/dist/atoms/components/feedback/Toast/index.d.ts.map +1 -0
- package/dist/atoms/components/feedback/index.d.ts +6 -0
- package/dist/atoms/components/feedback/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/forms}/DateTimePicker/DateTimePicker.d.ts +6 -6
- package/dist/atoms/components/forms/DateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/atoms/components/forms/DateTimePicker/index.d.ts +3 -0
- package/dist/atoms/components/forms/DateTimePicker/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/forms}/FileUpload/FileUpload.d.ts +3 -3
- package/dist/atoms/components/forms/FileUpload/FileUpload.d.ts.map +1 -0
- package/dist/atoms/components/forms/FileUpload/index.d.ts +3 -0
- package/dist/atoms/components/forms/FileUpload/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/forms}/FormField/FormField.d.ts +2 -2
- package/dist/atoms/components/forms/FormField/FormField.d.ts.map +1 -0
- package/dist/atoms/components/forms/FormField/index.d.ts +2 -0
- package/dist/atoms/components/forms/FormField/index.d.ts.map +1 -0
- package/dist/atoms/components/forms/index.d.ts +4 -0
- package/dist/atoms/components/forms/index.d.ts.map +1 -0
- package/dist/atoms/components/index.d.ts +10 -0
- package/dist/atoms/components/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/layout}/Accordion/Accordion.d.ts +3 -3
- package/dist/atoms/components/layout/Accordion/Accordion.d.ts.map +1 -0
- package/dist/atoms/components/layout/Accordion/index.d.ts +2 -0
- package/dist/atoms/components/layout/Accordion/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/layout}/Breadcrumb/Breadcrumb.d.ts +2 -3
- package/dist/atoms/components/layout/Breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/atoms/components/layout/Breadcrumb/index.d.ts +2 -0
- package/dist/atoms/components/layout/Breadcrumb/index.d.ts.map +1 -0
- package/dist/atoms/components/layout/Dialog/Dialog.d.ts +45 -0
- package/dist/atoms/components/layout/Dialog/Dialog.d.ts.map +1 -0
- package/dist/atoms/components/layout/Dialog/index.d.ts +3 -0
- package/dist/atoms/components/layout/Dialog/index.d.ts.map +1 -0
- package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts +40 -0
- package/dist/atoms/components/layout/Dropdown/Dropdown.d.ts.map +1 -0
- package/dist/atoms/components/layout/Dropdown/index.d.ts +3 -0
- package/dist/atoms/components/layout/Dropdown/index.d.ts.map +1 -0
- package/dist/atoms/components/layout/Modal/Modal.d.ts +18 -0
- package/dist/atoms/components/layout/Modal/Modal.d.ts.map +1 -0
- package/dist/atoms/components/layout/Modal/index.d.ts +3 -0
- package/dist/atoms/components/layout/Modal/index.d.ts.map +1 -0
- package/dist/atoms/components/layout/Tabs/Tabs.d.ts +46 -0
- package/dist/atoms/components/layout/Tabs/Tabs.d.ts.map +1 -0
- package/dist/atoms/components/layout/Tabs/index.d.ts +2 -0
- package/dist/atoms/components/layout/Tabs/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/layout}/Tooltip/Tooltip.d.ts +6 -6
- package/dist/atoms/components/layout/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/atoms/components/layout/Tooltip/index.d.ts +2 -0
- package/dist/atoms/components/layout/Tooltip/index.d.ts.map +1 -0
- package/dist/atoms/components/layout/index.d.ts +8 -0
- package/dist/atoms/components/layout/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/navigation}/GlobalSearch/GlobalSearch.d.ts +2 -3
- package/dist/atoms/components/navigation/GlobalSearch/GlobalSearch.d.ts.map +1 -0
- package/dist/atoms/components/navigation/GlobalSearch/index.d.ts +2 -0
- package/dist/atoms/components/navigation/GlobalSearch/index.d.ts.map +1 -0
- package/dist/atoms/components/navigation/index.d.ts +2 -0
- package/dist/atoms/components/navigation/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/theme}/ColorSwatch/ColorSwatch.d.ts +2 -2
- package/dist/atoms/components/theme/ColorSwatch/ColorSwatch.d.ts.map +1 -0
- package/dist/atoms/components/theme/ColorSwatch/index.d.ts +2 -0
- package/dist/atoms/components/theme/ColorSwatch/index.d.ts.map +1 -0
- package/dist/atoms/components/theme/DarkModeToggle.d.ts.map +1 -0
- package/dist/atoms/{composed → components/theme}/PaletteSwitcher.d.ts +1 -1
- package/dist/atoms/components/theme/PaletteSwitcher.d.ts.map +1 -0
- package/dist/atoms/components/theme/StyleGuide.d.ts +3 -0
- package/dist/atoms/components/theme/StyleGuide.d.ts.map +1 -0
- package/dist/atoms/components/theme/index.d.ts +5 -0
- package/dist/atoms/components/theme/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/user}/UserAvatar/UserAvatar.d.ts +2 -3
- package/dist/atoms/components/user/UserAvatar/UserAvatar.d.ts.map +1 -0
- package/dist/atoms/components/user/UserAvatar/index.d.ts +2 -0
- package/dist/atoms/components/user/UserAvatar/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/user}/UserMenu/UserMenu.d.ts +2 -3
- package/dist/atoms/components/user/UserMenu/UserMenu.d.ts.map +1 -0
- package/dist/atoms/components/user/UserMenu/index.d.ts +2 -0
- package/dist/atoms/components/user/UserMenu/index.d.ts.map +1 -0
- package/dist/atoms/components/user/index.d.ts +3 -0
- package/dist/atoms/components/user/index.d.ts.map +1 -0
- package/dist/atoms/config/responsive.d.ts +147 -0
- package/dist/atoms/config/responsive.d.ts.map +1 -0
- package/dist/atoms/hooks/index.d.ts +5 -0
- package/dist/atoms/hooks/index.d.ts.map +1 -0
- package/dist/atoms/hooks/use-toast.d.ts +16 -0
- package/dist/atoms/hooks/use-toast.d.ts.map +1 -0
- package/dist/atoms/hooks/useApi.d.ts +2 -2
- package/dist/atoms/hooks/useApi.d.ts.map +1 -1
- package/dist/atoms/hooks/useResponsive.d.ts +42 -0
- package/dist/atoms/hooks/useResponsive.d.ts.map +1 -0
- package/dist/atoms/index.d.ts +6 -8
- package/dist/atoms/index.d.ts.map +1 -1
- package/dist/atoms/primitives/Badge.d.ts +10 -0
- package/dist/atoms/primitives/Badge.d.ts.map +1 -0
- package/dist/atoms/{ui → primitives}/ErrorBoundary.d.ts +3 -3
- package/dist/atoms/primitives/ErrorBoundary.d.ts.map +1 -0
- package/dist/atoms/primitives/Select.d.ts +30 -0
- package/dist/atoms/primitives/Select.d.ts.map +1 -0
- package/dist/atoms/primitives/Switch.d.ts +10 -0
- package/dist/atoms/primitives/Switch.d.ts.map +1 -0
- package/dist/atoms/primitives/Tabs.d.ts +30 -0
- package/dist/atoms/primitives/Tabs.d.ts.map +1 -0
- package/dist/atoms/primitives/avatar.d.ts.map +1 -0
- package/dist/atoms/primitives/button.d.ts +11 -0
- package/dist/atoms/primitives/button.d.ts.map +1 -0
- package/dist/atoms/primitives/button.variants.d.ts +7 -0
- package/dist/atoms/primitives/button.variants.d.ts.map +1 -0
- package/dist/atoms/{ui → primitives}/card.d.ts +2 -1
- package/dist/atoms/primitives/card.d.ts.map +1 -0
- package/dist/atoms/primitives/checkbox.d.ts +12 -0
- package/dist/atoms/primitives/checkbox.d.ts.map +1 -0
- package/dist/atoms/primitives/dialog.d.ts +34 -0
- package/dist/atoms/primitives/dialog.d.ts.map +1 -0
- package/dist/atoms/primitives/dropdown-menu.d.ts.map +1 -0
- package/dist/atoms/primitives/index.d.ts +17 -0
- package/dist/atoms/primitives/index.d.ts.map +1 -0
- package/dist/atoms/primitives/input.d.ts.map +1 -0
- package/dist/atoms/{ui → primitives}/label.d.ts +4 -1
- package/dist/atoms/primitives/label.d.ts.map +1 -0
- package/dist/atoms/primitives/skeleton.d.ts.map +1 -0
- package/dist/atoms/{ui → primitives}/spinner.d.ts +4 -4
- package/dist/atoms/primitives/spinner.d.ts.map +1 -0
- package/dist/atoms/primitives/table.d.ts.map +1 -0
- package/dist/atoms/services/api/client.d.ts +11 -2
- package/dist/atoms/services/api/client.d.ts.map +1 -1
- package/dist/atoms/services/auth-service.d.ts +1 -1
- package/dist/atoms/services/auth-service.d.ts.map +1 -1
- package/dist/atoms/services/health.d.ts +2 -2
- package/dist/atoms/services/index.d.ts +3 -3
- package/dist/atoms/shared/config/dashboard-sizes.d.ts +17 -17
- package/dist/atoms/shared/config/dashboard-sizes.d.ts.map +1 -1
- package/dist/atoms/shared/config/environment.d.ts.map +1 -1
- package/dist/atoms/shared/index.d.ts +4 -3
- package/dist/atoms/shared/index.d.ts.map +1 -1
- package/dist/atoms/types/auth.d.ts +11 -1
- package/dist/atoms/types/auth.d.ts.map +1 -1
- package/dist/atoms/types/entity-config.d.ts +117 -0
- package/dist/atoms/types/entity-config.d.ts.map +1 -0
- package/dist/atoms/types/generated.d.ts.map +1 -1
- package/dist/atoms/types/index.d.ts +6 -3
- package/dist/atoms/types/index.d.ts.map +1 -1
- package/dist/atoms/types/loading.d.ts +1 -1
- package/dist/atoms/types/navigation.d.ts +30 -0
- package/dist/atoms/types/navigation.d.ts.map +1 -0
- package/dist/atoms/types/ui-config.d.ts +50 -0
- package/dist/atoms/types/ui-config.d.ts.map +1 -0
- package/dist/atoms/utils/animations.d.ts +7 -7
- package/dist/atoms/utils/animations.d.ts.map +1 -1
- package/dist/atoms/utils/color-manager.d.ts +68 -0
- package/dist/atoms/utils/color-manager.d.ts.map +1 -0
- package/dist/atoms/utils/debounce.d.ts +6 -0
- package/dist/atoms/utils/debounce.d.ts.map +1 -0
- package/dist/atoms/utils/field-detection.d.ts +15 -0
- package/dist/atoms/utils/field-detection.d.ts.map +1 -0
- package/dist/atoms/utils/icon-map.d.ts +68 -0
- package/dist/atoms/utils/icon-map.d.ts.map +1 -0
- package/dist/atoms/utils/icon-resolver.d.ts +16 -0
- package/dist/atoms/utils/icon-resolver.d.ts.map +1 -0
- package/dist/atoms/utils/index.d.ts +5 -0
- package/dist/atoms/utils/index.d.ts.map +1 -0
- package/dist/atoms/utils/metric-engine.d.ts +22 -0
- package/dist/atoms/utils/metric-engine.d.ts.map +1 -0
- package/dist/atoms/utils/tooltip-helpers.d.ts +1 -1
- package/dist/atoms/utils/tooltip-helpers.d.ts.map +1 -1
- package/dist/atoms/utils/ui-mapping.d.ts +19 -0
- package/dist/atoms/utils/ui-mapping.d.ts.map +1 -0
- package/dist/atoms/utils/utils.d.ts +7 -1
- package/dist/atoms/utils/utils.d.ts.map +1 -1
- package/dist/codegen/openapi/bulk-types.d.ts +142 -0
- package/dist/codegen/openapi/bulk-types.d.ts.map +1 -0
- package/dist/features/auth/components/LoginForm.d.ts.map +1 -1
- package/dist/features/auth/components/LogoutButton.d.ts.map +1 -1
- package/dist/features/auth/components/ProtectedRoute.d.ts +2 -2
- package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -1
- package/dist/features/auth/components/index.d.ts +3 -3
- package/dist/features/auth/hooks/auth-context.d.ts +3 -0
- package/dist/features/auth/hooks/auth-context.d.ts.map +1 -0
- package/dist/features/auth/hooks/index.d.ts +4 -2
- package/dist/features/auth/hooks/index.d.ts.map +1 -1
- package/dist/features/auth/hooks/use-auth.d.ts +3 -0
- package/dist/features/auth/hooks/use-auth.d.ts.map +1 -0
- package/dist/features/auth/hooks/useAuth.d.ts +3 -4
- package/dist/features/auth/hooks/useAuth.d.ts.map +1 -1
- package/dist/features/auth/hooks/useAuthContext.d.ts +7 -0
- package/dist/features/auth/hooks/useAuthContext.d.ts.map +1 -0
- package/dist/features/auth/hooks/usePermissions.d.ts +3 -3
- package/dist/features/auth/index.d.ts +3 -2
- package/dist/features/auth/index.d.ts.map +1 -1
- package/dist/features/auth/providers/MockAuthProvider.d.ts +8 -0
- package/dist/features/auth/providers/MockAuthProvider.d.ts.map +1 -0
- package/dist/features/auth/providers/index.d.ts +3 -0
- package/dist/features/auth/providers/index.d.ts.map +1 -0
- package/dist/features/auth/providers/mock-auth-context.d.ts +3 -0
- package/dist/features/auth/providers/mock-auth-context.d.ts.map +1 -0
- package/dist/features/auth/providers/use-mock-auth.d.ts +3 -0
- package/dist/features/auth/providers/use-mock-auth.d.ts.map +1 -0
- package/dist/features/auth/services/mock-auth-service.d.ts +17 -0
- package/dist/features/auth/services/mock-auth-service.d.ts.map +1 -0
- package/dist/features/index.d.ts +1 -1
- package/dist/frontend-patterns.css +5069 -516
- package/dist/index.d.ts +17 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +27080 -8451
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +27103 -8453
- package/dist/index.js.map +1 -1
- package/dist/molecules/feedback/index.d.ts +2 -0
- package/dist/molecules/feedback/index.d.ts.map +1 -0
- package/dist/molecules/forms/FormGroup.d.ts +2 -2
- package/dist/molecules/forms/FormGroup.d.ts.map +1 -1
- package/dist/molecules/forms/SearchInput.d.ts +1 -1
- package/dist/molecules/forms/SearchInput.d.ts.map +1 -1
- package/dist/molecules/forms/index.d.ts +2 -2
- package/dist/molecules/forms/index.d.ts.map +1 -1
- package/dist/molecules/index.d.ts +3 -3
- package/dist/molecules/layout/AppHeader/AppHeader.d.ts +1 -1
- package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -1
- package/dist/molecules/layout/AppHeader/index.d.ts +1 -1
- package/dist/molecules/layout/BulkSelectionBar.d.ts +15 -0
- package/dist/molecules/layout/BulkSelectionBar.d.ts.map +1 -0
- package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts +16 -0
- package/dist/molecules/layout/DashboardWithSidePanel/DashboardWithSidePanel.d.ts.map +1 -0
- package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts +2 -0
- package/dist/molecules/layout/DashboardWithSidePanel/index.d.ts.map +1 -0
- package/dist/molecules/layout/NavigationContext.d.ts +9 -0
- package/dist/molecules/layout/NavigationContext.d.ts.map +1 -0
- package/dist/molecules/layout/PageTemplate.d.ts +1 -1
- package/dist/molecules/layout/PageTemplate.d.ts.map +1 -1
- package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts +4 -4
- package/dist/molecules/layout/SectionHeader/SectionHeader.d.ts.map +1 -1
- package/dist/molecules/layout/SectionHeader/index.d.ts +1 -1
- package/dist/molecules/layout/ShowcaseSection.d.ts +4 -4
- package/dist/molecules/layout/ShowcaseSection.d.ts.map +1 -1
- package/dist/molecules/layout/Sidebar.d.ts.map +1 -1
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +3 -1
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -1
- package/dist/molecules/layout/SidebarButton/index.d.ts +1 -1
- package/dist/molecules/layout/SidebarContext.d.ts +1 -8
- package/dist/molecules/layout/SidebarContext.d.ts.map +1 -1
- package/dist/molecules/layout/index.d.ts +14 -7
- package/dist/molecules/layout/index.d.ts.map +1 -1
- package/dist/molecules/layout/navigation-context.d.ts +9 -0
- package/dist/molecules/layout/navigation-context.d.ts.map +1 -0
- package/dist/molecules/layout/sidebar-context.d.ts +7 -0
- package/dist/molecules/layout/sidebar-context.d.ts.map +1 -0
- package/dist/molecules/layout/use-navigation.d.ts +2 -0
- package/dist/molecules/layout/use-navigation.d.ts.map +1 -0
- package/dist/molecules/layout/use-sidebar.d.ts +2 -0
- package/dist/molecules/layout/use-sidebar.d.ts.map +1 -0
- package/dist/molecules/navigation/NavMenu.d.ts +2 -2
- package/dist/molecules/navigation/NavMenu.d.ts.map +1 -1
- package/dist/molecules/navigation/Pagination.d.ts +2 -2
- package/dist/molecules/navigation/index.d.ts +2 -2
- package/dist/organisms/index.d.ts +1 -1
- package/dist/organisms/showcase/ComponentShowcasePage.d.ts +1 -1
- package/dist/organisms/showcase/ComponentShowcasePage.d.ts.map +1 -1
- package/dist/templates/AuthTemplate.d.ts +4 -4
- package/dist/templates/AuthTemplate.d.ts.map +1 -1
- package/dist/templates/ComponentShowcaseTemplate.d.ts +7 -7
- package/dist/templates/ComponentShowcaseTemplate.d.ts.map +1 -1
- package/dist/templates/DashboardTemplate.d.ts +3 -3
- package/dist/templates/DashboardTemplate.d.ts.map +1 -1
- package/dist/templates/DataTemplate.d.ts +3 -3
- package/dist/templates/DataTemplate.d.ts.map +1 -1
- package/dist/templates/EnhancedDataTemplate.d.ts +188 -0
- package/dist/templates/EnhancedDataTemplate.d.ts.map +1 -0
- package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts +18 -0
- package/dist/templates/EnhancedDataTemplate.hooks.bulk.d.ts.map +1 -0
- package/dist/templates/EnhancedDataTemplate.hooks.d.ts +22 -0
- package/dist/templates/EnhancedDataTemplate.hooks.d.ts.map +1 -0
- package/dist/templates/admin/AdminCRUDTemplate.d.ts +4 -4
- package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -1
- package/dist/templates/admin/AdminDashboardTemplate.d.ts +10 -13
- package/dist/templates/admin/AdminDashboardTemplate.d.ts.map +1 -1
- package/dist/templates/admin/AdminDetailTemplate.d.ts +4 -4
- package/dist/templates/admin/AdminDetailTemplate.d.ts.map +1 -1
- package/dist/templates/admin/index.d.ts +3 -3
- package/dist/templates/admin/index.d.ts.map +1 -1
- package/dist/templates/api/APIDataTemplate.d.ts +71 -0
- package/dist/templates/api/APIDataTemplate.d.ts.map +1 -0
- package/dist/templates/api/create-api-data-template.d.ts +4 -0
- package/dist/templates/api/create-api-data-template.d.ts.map +1 -0
- package/dist/templates/api/index.d.ts +9 -0
- package/dist/templates/api/index.d.ts.map +1 -0
- package/dist/templates/factory.d.ts +4 -3
- package/dist/templates/factory.d.ts.map +1 -1
- package/dist/templates/index.d.ts +8 -6
- package/dist/templates/index.d.ts.map +1 -1
- package/package.json +38 -9
- package/dist/atoms/composed/Accordion/Accordion.d.ts.map +0 -1
- package/dist/atoms/composed/Accordion/index.d.ts +0 -2
- package/dist/atoms/composed/Accordion/index.d.ts.map +0 -1
- package/dist/atoms/composed/Alert/Alert.d.ts.map +0 -1
- package/dist/atoms/composed/Alert/index.d.ts +0 -2
- package/dist/atoms/composed/Alert/index.d.ts.map +0 -1
- package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts.map +0 -1
- package/dist/atoms/composed/Breadcrumb/index.d.ts +0 -2
- package/dist/atoms/composed/Breadcrumb/index.d.ts.map +0 -1
- package/dist/atoms/composed/Chart/Chart.d.ts +0 -37
- package/dist/atoms/composed/Chart/Chart.d.ts.map +0 -1
- package/dist/atoms/composed/Chart/index.d.ts +0 -3
- package/dist/atoms/composed/Chart/index.d.ts.map +0 -1
- package/dist/atoms/composed/ColorSwatch/ColorSwatch.d.ts.map +0 -1
- package/dist/atoms/composed/ColorSwatch/index.d.ts +0 -2
- package/dist/atoms/composed/ColorSwatch/index.d.ts.map +0 -1
- package/dist/atoms/composed/DarkModeToggle.d.ts.map +0 -1
- package/dist/atoms/composed/DataBadge/DataBadge.d.ts +0 -13
- package/dist/atoms/composed/DataBadge/DataBadge.d.ts.map +0 -1
- package/dist/atoms/composed/DataBadge/index.d.ts +0 -2
- package/dist/atoms/composed/DataBadge/index.d.ts.map +0 -1
- package/dist/atoms/composed/DataTable/DataTable.d.ts +0 -28
- package/dist/atoms/composed/DataTable/DataTable.d.ts.map +0 -1
- package/dist/atoms/composed/DataTable/TableCellWithTooltip.d.ts.map +0 -1
- package/dist/atoms/composed/DataTable/index.d.ts +0 -3
- package/dist/atoms/composed/DataTable/index.d.ts.map +0 -1
- package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts.map +0 -1
- package/dist/atoms/composed/DateTimePicker/index.d.ts +0 -3
- package/dist/atoms/composed/DateTimePicker/index.d.ts.map +0 -1
- package/dist/atoms/composed/DetailedCard/DetailedCard.d.ts.map +0 -1
- package/dist/atoms/composed/DetailedCard/index.d.ts +0 -3
- package/dist/atoms/composed/DetailedCard/index.d.ts.map +0 -1
- package/dist/atoms/composed/EmptyState/EmptyState.d.ts.map +0 -1
- package/dist/atoms/composed/EmptyState/index.d.ts +0 -2
- package/dist/atoms/composed/EmptyState/index.d.ts.map +0 -1
- package/dist/atoms/composed/FileUpload/FileUpload.d.ts.map +0 -1
- package/dist/atoms/composed/FileUpload/index.d.ts +0 -3
- package/dist/atoms/composed/FileUpload/index.d.ts.map +0 -1
- package/dist/atoms/composed/FormField/FormField.d.ts.map +0 -1
- package/dist/atoms/composed/FormField/index.d.ts +0 -2
- package/dist/atoms/composed/FormField/index.d.ts.map +0 -1
- package/dist/atoms/composed/GlobalSearch/GlobalSearch.d.ts.map +0 -1
- package/dist/atoms/composed/GlobalSearch/index.d.ts +0 -2
- package/dist/atoms/composed/GlobalSearch/index.d.ts.map +0 -1
- package/dist/atoms/composed/IconBadge/IconBadge.d.ts +0 -16
- package/dist/atoms/composed/IconBadge/IconBadge.d.ts.map +0 -1
- package/dist/atoms/composed/IconBadge/index.d.ts +0 -3
- package/dist/atoms/composed/IconBadge/index.d.ts.map +0 -1
- package/dist/atoms/composed/Modal/Modal.d.ts +0 -18
- package/dist/atoms/composed/Modal/Modal.d.ts.map +0 -1
- package/dist/atoms/composed/Modal/index.d.ts +0 -3
- package/dist/atoms/composed/Modal/index.d.ts.map +0 -1
- package/dist/atoms/composed/PaletteSwitcher.d.ts.map +0 -1
- package/dist/atoms/composed/ProgressBar/ProgressBar.d.ts.map +0 -1
- package/dist/atoms/composed/ProgressBar/index.d.ts +0 -2
- package/dist/atoms/composed/ProgressBar/index.d.ts.map +0 -1
- package/dist/atoms/composed/StatCard/StatCard.d.ts.map +0 -1
- package/dist/atoms/composed/StatCard/index.d.ts +0 -2
- package/dist/atoms/composed/StatCard/index.d.ts.map +0 -1
- package/dist/atoms/composed/StyleGuide.d.ts +0 -3
- package/dist/atoms/composed/StyleGuide.d.ts.map +0 -1
- package/dist/atoms/composed/Toast/Toast.d.ts.map +0 -1
- package/dist/atoms/composed/Toast/index.d.ts.map +0 -1
- package/dist/atoms/composed/Tooltip/Tooltip.d.ts.map +0 -1
- package/dist/atoms/composed/Tooltip/index.d.ts +0 -2
- package/dist/atoms/composed/Tooltip/index.d.ts.map +0 -1
- package/dist/atoms/composed/UserAvatar/UserAvatar.d.ts.map +0 -1
- package/dist/atoms/composed/UserAvatar/index.d.ts +0 -2
- package/dist/atoms/composed/UserAvatar/index.d.ts.map +0 -1
- package/dist/atoms/composed/UserMenu/UserMenu.d.ts.map +0 -1
- package/dist/atoms/composed/UserMenu/index.d.ts +0 -2
- package/dist/atoms/composed/UserMenu/index.d.ts.map +0 -1
- package/dist/atoms/composed/index.d.ts +0 -25
- package/dist/atoms/composed/index.d.ts.map +0 -1
- package/dist/atoms/ui/Badge.d.ts +0 -10
- package/dist/atoms/ui/Badge.d.ts.map +0 -1
- package/dist/atoms/ui/ErrorBoundary.d.ts.map +0 -1
- package/dist/atoms/ui/Select.d.ts +0 -28
- package/dist/atoms/ui/Select.d.ts.map +0 -1
- package/dist/atoms/ui/Switch.d.ts +0 -9
- package/dist/atoms/ui/Switch.d.ts.map +0 -1
- package/dist/atoms/ui/Tabs.d.ts +0 -30
- package/dist/atoms/ui/Tabs.d.ts.map +0 -1
- package/dist/atoms/ui/avatar.d.ts.map +0 -1
- package/dist/atoms/ui/button.d.ts +0 -14
- package/dist/atoms/ui/button.d.ts.map +0 -1
- package/dist/atoms/ui/card.d.ts.map +0 -1
- package/dist/atoms/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/atoms/ui/index.d.ts +0 -15
- package/dist/atoms/ui/index.d.ts.map +0 -1
- package/dist/atoms/ui/input.d.ts.map +0 -1
- package/dist/atoms/ui/label.d.ts.map +0 -1
- package/dist/atoms/ui/skeleton.d.ts.map +0 -1
- package/dist/atoms/ui/spinner.d.ts.map +0 -1
- package/dist/atoms/ui/table.d.ts.map +0 -1
- package/src/App.css +0 -42
- package/src/App.tsx +0 -54
- package/src/__tests__/README.md +0 -221
- package/src/__tests__/atoms/hooks/simple-hooks.test.ts +0 -44
- package/src/__tests__/atoms/ui/button.test.tsx +0 -68
- package/src/__tests__/atoms/utils/simple.test.ts +0 -18
- package/src/__tests__/atoms/utils/utils.test.ts +0 -77
- package/src/__tests__/features/auth/simple-auth.test.tsx +0 -40
- package/src/__tests__/molecules/layout/simple-layout.test.tsx +0 -81
- package/src/__tests__/organisms/showcase/simple-showcase.test.tsx +0 -167
- package/src/__tests__/setup.ts +0 -51
- package/src/__tests__/utils.tsx +0 -123
- package/src/atoms/composed/Accordion/Accordion.tsx +0 -271
- package/src/atoms/composed/Accordion/index.ts +0 -1
- package/src/atoms/composed/Alert/Alert.tsx +0 -132
- package/src/atoms/composed/Alert/index.ts +0 -1
- package/src/atoms/composed/Breadcrumb/Breadcrumb.tsx +0 -83
- package/src/atoms/composed/Breadcrumb/index.ts +0 -1
- package/src/atoms/composed/Chart/Chart.tsx +0 -425
- package/src/atoms/composed/Chart/index.ts +0 -2
- package/src/atoms/composed/ColorSwatch/ColorSwatch.tsx +0 -72
- package/src/atoms/composed/ColorSwatch/index.ts +0 -1
- package/src/atoms/composed/DarkModeToggle.tsx +0 -66
- package/src/atoms/composed/DataBadge/DataBadge.tsx +0 -81
- package/src/atoms/composed/DataBadge/index.ts +0 -1
- package/src/atoms/composed/DataTable/DataTable.tsx +0 -394
- package/src/atoms/composed/DataTable/TableCellWithTooltip.tsx +0 -41
- package/src/atoms/composed/DataTable/index.ts +0 -2
- package/src/atoms/composed/DateTimePicker/DateTimePicker.tsx +0 -611
- package/src/atoms/composed/DateTimePicker/index.ts +0 -2
- package/src/atoms/composed/DetailedCard/DetailedCard.tsx +0 -181
- package/src/atoms/composed/DetailedCard/index.ts +0 -2
- package/src/atoms/composed/EmptyState/EmptyState.tsx +0 -90
- package/src/atoms/composed/EmptyState/index.ts +0 -1
- package/src/atoms/composed/FileUpload/FileUpload.tsx +0 -477
- package/src/atoms/composed/FileUpload/index.ts +0 -2
- package/src/atoms/composed/FormField/FormField.tsx +0 -92
- package/src/atoms/composed/FormField/index.ts +0 -1
- package/src/atoms/composed/GlobalSearch/GlobalSearch.tsx +0 -37
- package/src/atoms/composed/GlobalSearch/index.ts +0 -1
- package/src/atoms/composed/IconBadge/IconBadge.tsx +0 -95
- package/src/atoms/composed/IconBadge/index.ts +0 -2
- package/src/atoms/composed/Modal/Modal.tsx +0 -223
- package/src/atoms/composed/Modal/index.ts +0 -2
- package/src/atoms/composed/PaletteSwitcher.tsx +0 -386
- package/src/atoms/composed/ProgressBar/ProgressBar.tsx +0 -116
- package/src/atoms/composed/ProgressBar/index.ts +0 -1
- package/src/atoms/composed/StatCard/StatCard.tsx +0 -219
- package/src/atoms/composed/StatCard/index.ts +0 -1
- package/src/atoms/composed/StyleGuide.tsx +0 -717
- package/src/atoms/composed/Toast/Toast.tsx +0 -219
- package/src/atoms/composed/Toast/index.ts +0 -1
- package/src/atoms/composed/Tooltip/Tooltip.tsx +0 -213
- package/src/atoms/composed/Tooltip/index.ts +0 -1
- package/src/atoms/composed/UserAvatar/UserAvatar.tsx +0 -139
- package/src/atoms/composed/UserAvatar/index.ts +0 -1
- package/src/atoms/composed/UserMenu/UserMenu.tsx +0 -16
- package/src/atoms/composed/UserMenu/index.ts +0 -1
- package/src/atoms/composed/index.ts +0 -29
- package/src/atoms/hooks/useApi.ts +0 -80
- package/src/atoms/hooks/useHealth.ts +0 -17
- package/src/atoms/index.ts +0 -13
- package/src/atoms/services/api/client.ts +0 -134
- package/src/atoms/services/auth-service.ts +0 -248
- package/src/atoms/services/health.ts +0 -15
- package/src/atoms/services/index.ts +0 -3
- package/src/atoms/shared/config/constants.ts +0 -17
- package/src/atoms/shared/config/dashboard-sizes.ts +0 -111
- package/src/atoms/shared/config/environment.ts +0 -10
- package/src/atoms/shared/index.ts +0 -4
- package/src/atoms/shared/styles/color-palettes.css +0 -566
- package/src/atoms/types/auth.ts +0 -62
- package/src/atoms/types/generated.ts +0 -1469
- package/src/atoms/types/index.ts +0 -4
- package/src/atoms/types/loading.ts +0 -28
- package/src/atoms/ui/Badge.tsx +0 -30
- package/src/atoms/ui/ErrorBoundary.tsx +0 -59
- package/src/atoms/ui/Select.tsx +0 -53
- package/src/atoms/ui/Switch.tsx +0 -42
- package/src/atoms/ui/Tabs.tsx +0 -118
- package/src/atoms/ui/avatar.tsx +0 -48
- package/src/atoms/ui/button.tsx +0 -70
- package/src/atoms/ui/card.tsx +0 -76
- package/src/atoms/ui/dropdown-menu.tsx +0 -199
- package/src/atoms/ui/index.ts +0 -39
- package/src/atoms/ui/input.tsx +0 -23
- package/src/atoms/ui/label.tsx +0 -23
- package/src/atoms/ui/skeleton.tsx +0 -13
- package/src/atoms/ui/spinner.tsx +0 -49
- package/src/atoms/ui/table.tsx +0 -116
- package/src/atoms/utils/animations.ts +0 -135
- package/src/atoms/utils/tooltip-helpers.ts +0 -140
- package/src/atoms/utils/utils.ts +0 -9
- package/src/features/auth/components/LoginForm.tsx +0 -168
- package/src/features/auth/components/LogoutButton.tsx +0 -19
- package/src/features/auth/components/ProtectedRoute.tsx +0 -60
- package/src/features/auth/components/index.ts +0 -4
- package/src/features/auth/hooks/index.ts +0 -2
- package/src/features/auth/hooks/useAuth.tsx +0 -205
- package/src/features/auth/hooks/usePermissions.ts +0 -35
- package/src/features/auth/index.ts +0 -2
- package/src/features/index.ts +0 -2
- package/src/index.css +0 -704
- package/src/index.ts +0 -13
- package/src/main.tsx +0 -48
- package/src/molecules/.gitkeep +0 -0
- package/src/molecules/forms/FormGroup.tsx +0 -75
- package/src/molecules/forms/SearchInput.tsx +0 -259
- package/src/molecules/forms/index.ts +0 -4
- package/src/molecules/index.ts +0 -4
- package/src/molecules/layout/AppHeader/AppHeader.tsx +0 -42
- package/src/molecules/layout/AppHeader/index.ts +0 -1
- package/src/molecules/layout/AppLayout.tsx +0 -29
- package/src/molecules/layout/PageTemplate.tsx +0 -87
- package/src/molecules/layout/SectionHeader/SectionHeader.tsx +0 -87
- package/src/molecules/layout/SectionHeader/index.ts +0 -1
- package/src/molecules/layout/ShowcaseSection.tsx +0 -57
- package/src/molecules/layout/Sidebar.tsx +0 -144
- package/src/molecules/layout/SidebarButton/SidebarButton.tsx +0 -99
- package/src/molecules/layout/SidebarButton/index.ts +0 -1
- package/src/molecules/layout/SidebarContext.tsx +0 -31
- package/src/molecules/layout/index.ts +0 -7
- package/src/molecules/navigation/NavMenu.tsx +0 -188
- package/src/molecules/navigation/Pagination.tsx +0 -172
- package/src/molecules/navigation/index.ts +0 -4
- package/src/organisms/index.ts +0 -5
- package/src/organisms/showcase/ComponentShowcasePage.tsx +0 -2496
- package/src/organisms/showcase/index.ts +0 -1
- package/src/pages/AdminShowcase/AdminCRUDShowcase.tsx +0 -242
- package/src/pages/AdminShowcase/AdminDashboardShowcase.tsx +0 -171
- package/src/pages/AdminShowcase/AdminDetailShowcase.tsx +0 -385
- package/src/pages/AdminShowcase/index.tsx +0 -3
- package/src/pages/ComponentShowcase/BadgesShowcase.tsx +0 -188
- package/src/pages/ComponentShowcase/CardsShowcase.tsx +0 -392
- package/src/pages/ComponentShowcase/PalettesShowcase.tsx +0 -207
- package/src/pages/ComponentShowcase/StatesShowcase.tsx +0 -485
- package/src/pages/ComponentShowcase/TablesShowcase.tsx +0 -134
- package/src/pages/ComponentShowcase/TypographyShowcase.tsx +0 -255
- package/src/pages/ComponentShowcase/index.tsx +0 -188
- package/src/pages/index.ts +0 -2
- package/src/templates/AuthTemplate.tsx +0 -216
- package/src/templates/ComponentShowcaseTemplate.tsx +0 -173
- package/src/templates/DashboardTemplate.tsx +0 -232
- package/src/templates/DataTemplate.tsx +0 -319
- package/src/templates/admin/AdminCRUDTemplate.tsx +0 -630
- package/src/templates/admin/AdminDashboardTemplate.tsx +0 -351
- package/src/templates/admin/AdminDetailTemplate.tsx +0 -563
- package/src/templates/admin/index.ts +0 -29
- package/src/templates/factory.tsx +0 -169
- package/src/templates/index.ts +0 -37
- package/src/vite-env.d.ts +0 -1
- /package/dist/atoms/{composed → components/theme}/DarkModeToggle.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/avatar.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/dropdown-menu.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/input.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/skeleton.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/table.d.ts +0 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **TypeScript Build Errors**: Resolved all TypeScript compilation errors across codegen and auth modules
|
|
12
|
+
- Added missing type imports in OpenAPI codegen (`ParsedParameter`, `ClientGeneratorOptions`)
|
|
13
|
+
- Fixed OpenAPIV3 namespace imports and type casting
|
|
14
|
+
- Corrected parser method signatures and response array handling
|
|
15
|
+
- Updated `isListEndpoint` to correctly access responses as array
|
|
16
|
+
- **Auth Type System**: Consolidated user types for better type safety
|
|
17
|
+
- Moved `name`, `roles`, and `permissions` to `BaseUser` as optional fields
|
|
18
|
+
- Made `ExtendedUser` a type alias to `BaseUser` for backward compatibility
|
|
19
|
+
- Updated `MockAuthService` and `MockAuthProvider` to use consolidated types
|
|
20
|
+
- Added proper `RegisterData` interface
|
|
21
|
+
- **Test Suite**: Fixed all test failures
|
|
22
|
+
- Updated hook generator tests to use correct `ParsedEndpoint` response format (array instead of object)
|
|
23
|
+
- All 173 tests now passing
|
|
24
|
+
- **Performance**: Improved MockAuthProvider performance
|
|
25
|
+
- Added memoization to prevent creating new auth service instance on every render
|
|
26
|
+
- **Component Exports**: Standardized component export patterns
|
|
27
|
+
- Consolidated type exports using modern TypeScript syntax (`export { Component, type Props }`)
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- **SkeletonAvatar API**: Changed from `size` prop to separate `width` and `height` props
|
|
31
|
+
- **Breaking Change**: `<SkeletonAvatar size={40} />` is no longer supported
|
|
32
|
+
- **Migration**: Use `<SkeletonAvatar width={40} height={40} />` instead
|
|
33
|
+
- Added comprehensive JSDoc with migration examples
|
|
34
|
+
- **DataTable Templates**: Removed unsupported props from DataTemplate usage
|
|
35
|
+
- Removed `onSort`, `selectedRows`, `onSelectionChange` props
|
|
36
|
+
- Added TODO comments for future server-side sorting support (FRO-4)
|
|
37
|
+
|
|
38
|
+
### Removed
|
|
39
|
+
- **Map Components**: Temporarily removed map component suite due to `react-map-gl` type compatibility issues
|
|
40
|
+
- Removed: `MapCluster`, `MapContainer`, `MapHeatmap`, `MapMarker`, `MapPolygon`, `MapPopup`, `MapRoute`
|
|
41
|
+
- Removed: `MapProvider` context system
|
|
42
|
+
- Removed: `DataMap` and `LocationPicker` composed components
|
|
43
|
+
- Removed: Map-related templates and demo pages
|
|
44
|
+
- **Note**: Components preserved in `backup/map-components` branch for future restoration
|
|
45
|
+
- **Impact**: Applications using map components will need to use alternative mapping solutions until type issues are resolved
|
|
46
|
+
- **Entity Templates**: Removed incomplete entity template and organism components
|
|
47
|
+
- Removed: `EntityManagementTemplate`, `EntityPerformanceDashboardTemplate`
|
|
48
|
+
- Removed: `CategoryBreakdownPanel`, `EntityListPanel`, `MetricsOverviewPanel`, `TrendAnalysisPanel`
|
|
49
|
+
- **Reason**: Incomplete implementations with placeholder text and non-functional features
|
|
50
|
+
- **Note**: Will be properly implemented in example applications and promoted back to template when production-ready
|
|
51
|
+
- **Metric Card Refactoring**: Removed incomplete metric card refactoring files
|
|
52
|
+
- Removed: `MetricCardRefactored.tsx`, `NewMetricCard.tsx`, `NewMetricCard.demo.tsx`, `NewMetricCard.meta.ts`, `NewMetricCard.presets.tsx`, `REFACTORING.md`
|
|
53
|
+
- Removed: 16 commented export placeholders in `variants/index.ts`
|
|
54
|
+
- **Reason**: Only 3 of 19 variants were refactored, leaving most functionality using fallback implementations
|
|
55
|
+
- **Note**: Original MetricCard remains fully functional
|
|
56
|
+
- **Bulk Operations Code**: Removed commented placeholder code for future FRO-35 implementation
|
|
57
|
+
- Removed: ~150 lines of commented code from `hook-generator.ts`
|
|
58
|
+
- Removed: `APIConfig` interface, `detectResourceOperations()` method, `createDefaultConfig()` method
|
|
59
|
+
- **Reason**: Placeholder code should not ship in pre-release; will implement from scratch when FRO-35 begins
|
|
60
|
+
- **Impact**: No impact - code was non-functional and commented out
|
|
61
|
+
- **Production Code Cleanup**: Removed debug and temporary code
|
|
62
|
+
- Removed: Console.log statements from `hook-generator.ts`
|
|
63
|
+
- Removed: Placeholder alert() handlers from `UserAvatar.tsx` (replaced with documented extension points)
|
|
64
|
+
- Removed: WIP/TODO comments from `Chart.tsx` (replaced with professional JSDoc)
|
|
65
|
+
|
|
66
|
+
### Internal
|
|
67
|
+
- **Build Status**: Clean TypeScript compilation with zero errors
|
|
68
|
+
- **Test Coverage**: 173/173 tests passing across 17 test files
|
|
69
|
+
- **Type Safety**: Improved type inference throughout auth and codegen modules
|
|
70
|
+
- **Code Quality**:
|
|
71
|
+
- Better component organization and import consistency
|
|
72
|
+
- Removed ~600+ lines of incomplete, commented, or placeholder code
|
|
73
|
+
- No console statements in production code
|
|
74
|
+
- All components have professional documentation
|
|
75
|
+
- Clean pre-release state with no partial implementations
|
|
76
|
+
|
|
77
|
+
## Version History
|
|
78
|
+
|
|
79
|
+
### Pre-release Development
|
|
80
|
+
This is a pre-release version of the React Frontend Template. Breaking changes may occur without prior notice until v1.0.0 release.
|
package/README.md
CHANGED
|
@@ -34,11 +34,26 @@ app.addRoutes("/reports", ReportsRoutes)
|
|
|
34
34
|
|
|
35
35
|
### Installation
|
|
36
36
|
|
|
37
|
+
This is a private package published to npm. Install using standard npm commands:
|
|
38
|
+
|
|
37
39
|
```bash
|
|
38
|
-
# Install
|
|
40
|
+
# Install latest version
|
|
39
41
|
npm install @pattern-stack/frontend-patterns
|
|
40
42
|
|
|
41
|
-
#
|
|
43
|
+
# Install specific version
|
|
44
|
+
npm install @pattern-stack/frontend-patterns@0.2.0-alpha.0
|
|
45
|
+
|
|
46
|
+
# Or add to package.json dependencies
|
|
47
|
+
{
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@pattern-stack/frontend-patterns": "^0.2.0-alpha.0"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**For Local Development:**
|
|
55
|
+
```bash
|
|
56
|
+
# Install from local filesystem
|
|
42
57
|
npm install file:../path/to/frontend-patterns
|
|
43
58
|
|
|
44
59
|
# Or link for active development
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Hooks Command
|
|
3
|
+
*
|
|
4
|
+
* Implementation of the `pattern-stack generate hooks` command
|
|
5
|
+
*
|
|
6
|
+
* Part of FRO-6: Generate Hooks Command
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { promises as fs } from 'fs'
|
|
10
|
+
import { join, dirname } from 'path'
|
|
11
|
+
import { loadOpenAPISpec, parseOpenAPI } from '../../src/codegen/openapi/parser.js'
|
|
12
|
+
import { generateTypes } from '../../src/codegen/openapi/type-generator.js'
|
|
13
|
+
import { generateAPIClient } from '../../src/codegen/openapi/client-generator.js'
|
|
14
|
+
import { generateHooks } from '../../src/codegen/openapi/hook-generator.js'
|
|
15
|
+
|
|
16
|
+
interface GenerateHooksOptions {
|
|
17
|
+
output: string
|
|
18
|
+
prefix?: string
|
|
19
|
+
client: 'axios' | 'fetch'
|
|
20
|
+
auth: 'bearer' | 'apiKey' | 'basic'
|
|
21
|
+
dryRun?: boolean
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function generateHooksCommand(source: string, options: GenerateHooksOptions) {
|
|
25
|
+
try {
|
|
26
|
+
console.log('🚀 Pattern-Stack Hook Generator')
|
|
27
|
+
console.log('================================')
|
|
28
|
+
console.log()
|
|
29
|
+
|
|
30
|
+
// Load and parse OpenAPI specification
|
|
31
|
+
console.log('📥 Loading OpenAPI specification...')
|
|
32
|
+
const spec = await loadOpenAPISpec(source)
|
|
33
|
+
console.log(`✅ Loaded: ${spec.info.title} v${spec.info.version}`)
|
|
34
|
+
|
|
35
|
+
console.log('🔍 Parsing specification...')
|
|
36
|
+
const parsed = await parseOpenAPI(spec)
|
|
37
|
+
console.log(`✅ Found ${parsed.endpoints.length} endpoints, ${parsed.schemas.length} schemas`)
|
|
38
|
+
|
|
39
|
+
// Generate types
|
|
40
|
+
console.log('🏗️ Generating TypeScript types...')
|
|
41
|
+
const types = generateTypes(parsed, {
|
|
42
|
+
prefix: options.prefix,
|
|
43
|
+
includeJSDoc: true,
|
|
44
|
+
includeExamples: true
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
// Generate API client
|
|
48
|
+
console.log('🔧 Generating API client...')
|
|
49
|
+
const client = generateAPIClient(parsed, {
|
|
50
|
+
clientType: options.client,
|
|
51
|
+
includeAuth: true,
|
|
52
|
+
authType: options.auth,
|
|
53
|
+
includeInterceptors: true
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
// Generate React hooks
|
|
57
|
+
console.log('⚛️ Generating React hooks...')
|
|
58
|
+
const hooks = await generateHooks(parsed, {
|
|
59
|
+
includeInfiniteQueries: true,
|
|
60
|
+
includeOptimisticUpdates: true,
|
|
61
|
+
includeMutationHelpers: true,
|
|
62
|
+
enableConfidenceScoring: true
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
if (options.dryRun) {
|
|
66
|
+
console.log('\n📋 Dry run - files that would be generated:')
|
|
67
|
+
console.log('Types:')
|
|
68
|
+
console.log(' - schemas.ts')
|
|
69
|
+
console.log(' - endpoints.ts')
|
|
70
|
+
console.log(' - parameters.ts')
|
|
71
|
+
console.log(' - responses.ts')
|
|
72
|
+
console.log()
|
|
73
|
+
console.log('API Client:')
|
|
74
|
+
console.log(' - client.ts')
|
|
75
|
+
console.log(' - methods.ts')
|
|
76
|
+
console.log(' - types.ts')
|
|
77
|
+
console.log(' - config.ts')
|
|
78
|
+
console.log()
|
|
79
|
+
console.log('React Hooks:')
|
|
80
|
+
console.log(' - queries.ts')
|
|
81
|
+
console.log(' - mutations.ts')
|
|
82
|
+
console.log(' - keys.ts')
|
|
83
|
+
console.log(' - types.ts')
|
|
84
|
+
console.log()
|
|
85
|
+
console.log('Generated code preview:')
|
|
86
|
+
console.log('======================')
|
|
87
|
+
console.log()
|
|
88
|
+
console.log('Types (first 20 lines):')
|
|
89
|
+
console.log(types.schemas.split('\n').slice(0, 20).join('\n'))
|
|
90
|
+
console.log('\n...')
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Create output directories
|
|
95
|
+
console.log(`📁 Creating output directory: ${options.output}`)
|
|
96
|
+
await ensureDir(options.output)
|
|
97
|
+
await ensureDir(join(options.output, 'types'))
|
|
98
|
+
await ensureDir(join(options.output, 'client'))
|
|
99
|
+
await ensureDir(join(options.output, 'hooks'))
|
|
100
|
+
|
|
101
|
+
// Write type files
|
|
102
|
+
console.log('💾 Writing type definitions...')
|
|
103
|
+
await writeFile(join(options.output, 'types', 'schemas.ts'), types.schemas)
|
|
104
|
+
await writeFile(join(options.output, 'types', 'endpoints.ts'), types.endpoints)
|
|
105
|
+
await writeFile(join(options.output, 'types', 'parameters.ts'), types.parameters)
|
|
106
|
+
await writeFile(join(options.output, 'types', 'responses.ts'), types.responses)
|
|
107
|
+
await writeFile(join(options.output, 'types', 'index.ts'), types.index)
|
|
108
|
+
|
|
109
|
+
// Write client files
|
|
110
|
+
console.log('💾 Writing API client...')
|
|
111
|
+
await writeFile(join(options.output, 'client', 'client.ts'), client.client)
|
|
112
|
+
await writeFile(join(options.output, 'client', 'methods.ts'), client.methods)
|
|
113
|
+
await writeFile(join(options.output, 'client', 'types.ts'), client.types)
|
|
114
|
+
await writeFile(join(options.output, 'client', 'config.ts'), client.config)
|
|
115
|
+
await writeFile(join(options.output, 'client', 'index.ts'), client.index)
|
|
116
|
+
|
|
117
|
+
// Write hook files
|
|
118
|
+
console.log('💾 Writing React hooks...')
|
|
119
|
+
await writeFile(join(options.output, 'hooks', 'queries.ts'), hooks.queries)
|
|
120
|
+
await writeFile(join(options.output, 'hooks', 'mutations.ts'), hooks.mutations)
|
|
121
|
+
await writeFile(join(options.output, 'hooks', 'keys.ts'), hooks.keys)
|
|
122
|
+
await writeFile(join(options.output, 'hooks', 'types.ts'), hooks.types)
|
|
123
|
+
await writeFile(join(options.output, 'hooks', 'index.ts'), hooks.index)
|
|
124
|
+
|
|
125
|
+
// Write confidence report if available
|
|
126
|
+
if (hooks.report) {
|
|
127
|
+
await writeFile(join(options.output, 'hooks', 'confidence-report.md'), hooks.report)
|
|
128
|
+
console.log('📊 Generated confidence report')
|
|
129
|
+
|
|
130
|
+
// Check if there are low confidence names
|
|
131
|
+
const lowConfidenceCount = (hooks.report.match(/## Low Confidence Names/g) || []).length
|
|
132
|
+
if (lowConfidenceCount > 0) {
|
|
133
|
+
console.log('\n⚠️ Some hook names have low confidence and may need review.')
|
|
134
|
+
console.log('Run `npm run review:hooks` to interactively review and improve them.')
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Write main index file
|
|
139
|
+
const mainIndex = `/**
|
|
140
|
+
* Generated API Integration
|
|
141
|
+
*
|
|
142
|
+
* Auto-generated from OpenAPI specification: ${spec.info.title}
|
|
143
|
+
* Version: ${spec.info.version}
|
|
144
|
+
* Generated: ${new Date().toISOString()}
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
export * from './types'
|
|
148
|
+
export * from './client'
|
|
149
|
+
export * from './hooks'
|
|
150
|
+
|
|
151
|
+
// Quick start exports
|
|
152
|
+
export { createAPIClient } from './client'
|
|
153
|
+
export { queryKeys } from './hooks'`
|
|
154
|
+
|
|
155
|
+
await writeFile(join(options.output, 'index.ts'), mainIndex)
|
|
156
|
+
|
|
157
|
+
// Generate usage example
|
|
158
|
+
const usageExample = generateUsageExample(spec.info.title, options)
|
|
159
|
+
await writeFile(join(options.output, 'example.ts'), usageExample)
|
|
160
|
+
|
|
161
|
+
console.log()
|
|
162
|
+
console.log('✅ Generation complete!')
|
|
163
|
+
console.log(`📦 Generated files in: ${options.output}`)
|
|
164
|
+
console.log()
|
|
165
|
+
console.log('🚀 Quick start:')
|
|
166
|
+
console.log(`import { createAPIClient, useGetUsers } from './${options.output}'`)
|
|
167
|
+
console.log()
|
|
168
|
+
console.log('💡 See example.ts for detailed usage instructions')
|
|
169
|
+
|
|
170
|
+
} catch (error) {
|
|
171
|
+
console.error('❌ Generation failed:')
|
|
172
|
+
console.error(error instanceof Error ? error.message : error)
|
|
173
|
+
process.exit(1)
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
async function ensureDir(dir: string) {
|
|
178
|
+
try {
|
|
179
|
+
await fs.mkdir(dir, { recursive: true })
|
|
180
|
+
} catch {
|
|
181
|
+
// Directory might already exist
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async function writeFile(path: string, content: string) {
|
|
186
|
+
await ensureDir(dirname(path))
|
|
187
|
+
await fs.writeFile(path, content, 'utf8')
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function generateUsageExample(apiTitle: string, options: GenerateHooksOptions): string {
|
|
191
|
+
return `/**
|
|
192
|
+
* ${apiTitle} - Usage Example
|
|
193
|
+
*
|
|
194
|
+
* This file demonstrates how to use the generated API integration
|
|
195
|
+
*/
|
|
196
|
+
|
|
197
|
+
import React from 'react'
|
|
198
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
|
199
|
+
import { createAPIClient, useGetUsers, useCreateUser } from './'
|
|
200
|
+
|
|
201
|
+
// 1. Set up the API client
|
|
202
|
+
const apiClient = createAPIClient({
|
|
203
|
+
baseUrl: 'https://api.example.com/v1',
|
|
204
|
+
${options.auth === 'bearer' ? `getAuthToken: () => localStorage.getItem('authToken'),` : ''}
|
|
205
|
+
${options.auth === 'apiKey' ? `getApiKey: () => process.env.REACT_APP_API_KEY,
|
|
206
|
+
apiKeyHeader: 'X-API-Key',` : ''}
|
|
207
|
+
onError: (error) => {
|
|
208
|
+
console.error('API Error:', error)
|
|
209
|
+
// Handle global errors (show toast, redirect to login, etc.)
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
// 2. Set up React Query
|
|
214
|
+
const queryClient = new QueryClient({
|
|
215
|
+
defaultOptions: {
|
|
216
|
+
queries: {
|
|
217
|
+
staleTime: 5 * 60 * 1000, // 5 minutes
|
|
218
|
+
cacheTime: 10 * 60 * 1000, // 10 minutes
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
// 3. Wrap your app with providers
|
|
224
|
+
function App() {
|
|
225
|
+
return (
|
|
226
|
+
<QueryClientProvider client={queryClient}>
|
|
227
|
+
<UserList />
|
|
228
|
+
</QueryClientProvider>
|
|
229
|
+
)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// 4. Use generated hooks in components
|
|
233
|
+
function UserList() {
|
|
234
|
+
// Query hook with automatic loading, error, and data states
|
|
235
|
+
const { data: users, isLoading, error } = useGetUsers({
|
|
236
|
+
limit: 10
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
// Mutation hook with optimistic updates
|
|
240
|
+
const createUserMutation = useCreateUser({
|
|
241
|
+
onSuccess: () => {
|
|
242
|
+
console.log('User created successfully!')
|
|
243
|
+
},
|
|
244
|
+
onError: (error) => {
|
|
245
|
+
console.error('Failed to create user:', error)
|
|
246
|
+
}
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
const handleCreateUser = () => {
|
|
250
|
+
createUserMutation.mutate({
|
|
251
|
+
email: 'new@example.com',
|
|
252
|
+
name: 'New User'
|
|
253
|
+
})
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if (isLoading) return <div>Loading users...</div>
|
|
257
|
+
if (error) return <div>Error: {error.message}</div>
|
|
258
|
+
|
|
259
|
+
return (
|
|
260
|
+
<div>
|
|
261
|
+
<h2>Users</h2>
|
|
262
|
+
<button
|
|
263
|
+
onClick={handleCreateUser}
|
|
264
|
+
disabled={createUserMutation.isLoading}
|
|
265
|
+
>
|
|
266
|
+
{createUserMutation.isLoading ? 'Creating...' : 'Create User'}
|
|
267
|
+
</button>
|
|
268
|
+
|
|
269
|
+
<ul>
|
|
270
|
+
{users?.map(user => (
|
|
271
|
+
<li key={user.id}>
|
|
272
|
+
{user.name} ({user.email})
|
|
273
|
+
</li>
|
|
274
|
+
))}
|
|
275
|
+
</ul>
|
|
276
|
+
</div>
|
|
277
|
+
)
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// 5. Advanced usage with infinite queries
|
|
281
|
+
function InfiniteUserList() {
|
|
282
|
+
const {
|
|
283
|
+
data,
|
|
284
|
+
fetchNextPage,
|
|
285
|
+
hasNextPage,
|
|
286
|
+
isFetchingNextPage,
|
|
287
|
+
} = useInfiniteGetUsers({
|
|
288
|
+
limit: 20
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
return (
|
|
292
|
+
<div>
|
|
293
|
+
{data?.pages.map((page, i) => (
|
|
294
|
+
<React.Fragment key={i}>
|
|
295
|
+
{page.map(user => (
|
|
296
|
+
<div key={user.id}>{user.name}</div>
|
|
297
|
+
))}
|
|
298
|
+
</React.Fragment>
|
|
299
|
+
))}
|
|
300
|
+
|
|
301
|
+
<button
|
|
302
|
+
onClick={() => fetchNextPage()}
|
|
303
|
+
disabled={!hasNextPage || isFetchingNextPage}
|
|
304
|
+
>
|
|
305
|
+
{isFetchingNextPage
|
|
306
|
+
? 'Loading more...'
|
|
307
|
+
: hasNextPage
|
|
308
|
+
? 'Load More'
|
|
309
|
+
: 'Nothing more to load'}
|
|
310
|
+
</button>
|
|
311
|
+
</div>
|
|
312
|
+
)
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export default App`
|
|
316
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init Command
|
|
3
|
+
*
|
|
4
|
+
* Implementation of the `pattern-stack init` command
|
|
5
|
+
*
|
|
6
|
+
* Part of FRO-14: Domain Template Initialization
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
interface InitOptions {
|
|
10
|
+
name?: string
|
|
11
|
+
dir?: string
|
|
12
|
+
git?: boolean
|
|
13
|
+
install?: boolean
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export async function initCommand(template: string = 'basic', options: InitOptions) {
|
|
17
|
+
console.log(`🚀 Initializing Pattern-Stack project with ${template} template`)
|
|
18
|
+
|
|
19
|
+
if (options.name) {
|
|
20
|
+
console.log(`📦 Project name: ${options.name}`)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (options.dir) {
|
|
24
|
+
console.log(`📁 Target directory: ${options.dir}`)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
console.log('\n⚠️ Template initialization not yet implemented')
|
|
28
|
+
console.log('This feature will be available in a future release.')
|
|
29
|
+
console.log('\nFor now, you can:')
|
|
30
|
+
console.log('1. Clone the Pattern-Stack repository')
|
|
31
|
+
console.log('2. Use the generate hooks command to create API integrations')
|
|
32
|
+
console.log('3. Use the scaffold command to create components')
|
|
33
|
+
}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scaffold Command
|
|
3
|
+
*
|
|
4
|
+
* Implementation of the `pattern-stack scaffold` command
|
|
5
|
+
*
|
|
6
|
+
* Part of FRO-15: Component Scaffolding Commands
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { promises as fs } from 'fs'
|
|
10
|
+
import { join, dirname } from 'path'
|
|
11
|
+
|
|
12
|
+
interface ScaffoldOptions {
|
|
13
|
+
template?: string
|
|
14
|
+
output?: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function scaffoldCommand(type: string, name: string, options: ScaffoldOptions) {
|
|
18
|
+
console.log(`🏗️ Scaffolding ${type}: ${name}`)
|
|
19
|
+
|
|
20
|
+
switch (type) {
|
|
21
|
+
case 'component':
|
|
22
|
+
await scaffoldComponent(name, options)
|
|
23
|
+
break
|
|
24
|
+
case 'feature':
|
|
25
|
+
await scaffoldFeature(name, options)
|
|
26
|
+
break
|
|
27
|
+
case 'template':
|
|
28
|
+
await scaffoldTemplate(name, options)
|
|
29
|
+
break
|
|
30
|
+
default:
|
|
31
|
+
console.error(`❌ Unknown scaffold type: ${type}`)
|
|
32
|
+
console.log('Available types: component, feature, template')
|
|
33
|
+
process.exit(1)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async function scaffoldComponent(name: string, options: ScaffoldOptions) {
|
|
38
|
+
const outputDir = options.output || `./src/atoms/composed/${name}`
|
|
39
|
+
|
|
40
|
+
const componentContent = `/**
|
|
41
|
+
* ${name} Component
|
|
42
|
+
*
|
|
43
|
+
* Generated by Pattern-Stack CLI
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
import React from 'react'
|
|
47
|
+
import { cn } from '../../utils/utils'
|
|
48
|
+
|
|
49
|
+
export interface ${name}Props {
|
|
50
|
+
className?: string
|
|
51
|
+
children?: React.ReactNode
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function ${name}({ className, children, ...props }: ${name}Props) {
|
|
55
|
+
return (
|
|
56
|
+
<div className={cn("", className)} {...props}>
|
|
57
|
+
{children}
|
|
58
|
+
</div>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
${name}.displayName = "${name}"`
|
|
63
|
+
|
|
64
|
+
const indexContent = `export { ${name} } from './${name}'
|
|
65
|
+
export type { ${name}Props } from './${name}'`
|
|
66
|
+
|
|
67
|
+
const testContent = `/**
|
|
68
|
+
* ${name} Component Tests
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
import { render, screen } from '@testing-library/react'
|
|
72
|
+
import { ${name} } from './${name}'
|
|
73
|
+
|
|
74
|
+
describe('${name}', () => {
|
|
75
|
+
it('renders children', () => {
|
|
76
|
+
render(<${name}>Test content</${name}>)
|
|
77
|
+
expect(screen.getByText('Test content')).toBeInTheDocument()
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('applies custom className', () => {
|
|
81
|
+
const { container } = render(<${name} className="custom-class" />)
|
|
82
|
+
expect(container.firstChild).toHaveClass('custom-class')
|
|
83
|
+
})
|
|
84
|
+
})`
|
|
85
|
+
|
|
86
|
+
await ensureDir(outputDir)
|
|
87
|
+
await writeFile(join(outputDir, `${name}.tsx`), componentContent)
|
|
88
|
+
await writeFile(join(outputDir, 'index.ts'), indexContent)
|
|
89
|
+
await writeFile(join(outputDir, `${name}.test.tsx`), testContent)
|
|
90
|
+
|
|
91
|
+
console.log(`✅ Component scaffolded: ${outputDir}`)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function scaffoldFeature(name: string, options: ScaffoldOptions) {
|
|
95
|
+
const outputDir = options.output || `./src/features/${name.toLowerCase()}`
|
|
96
|
+
|
|
97
|
+
// Feature hook
|
|
98
|
+
const hookContent = `/**
|
|
99
|
+
* ${name} Hooks
|
|
100
|
+
*
|
|
101
|
+
* Generated by Pattern-Stack CLI
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
import { useState, useEffect } from 'react'
|
|
105
|
+
|
|
106
|
+
export function use${name}() {
|
|
107
|
+
const [data, setData] = useState(null)
|
|
108
|
+
const [loading, setLoading] = useState(false)
|
|
109
|
+
const [error, setError] = useState<Error | null>(null)
|
|
110
|
+
|
|
111
|
+
// Add your logic here
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
data,
|
|
115
|
+
loading,
|
|
116
|
+
error,
|
|
117
|
+
refetch: () => {
|
|
118
|
+
// Implement refetch logic
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}`
|
|
122
|
+
|
|
123
|
+
// Feature component
|
|
124
|
+
const componentContent = `/**
|
|
125
|
+
* ${name} Component
|
|
126
|
+
*
|
|
127
|
+
* Generated by Pattern-Stack CLI
|
|
128
|
+
*/
|
|
129
|
+
|
|
130
|
+
import React from 'react'
|
|
131
|
+
import { use${name} } from '../hooks/use${name}'
|
|
132
|
+
|
|
133
|
+
export interface ${name}ComponentProps {
|
|
134
|
+
className?: string
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export function ${name}Component({ className }: ${name}ComponentProps) {
|
|
138
|
+
const { data, loading, error } = use${name}()
|
|
139
|
+
|
|
140
|
+
if (loading) return <div>Loading...</div>
|
|
141
|
+
if (error) return <div>Error: {error.message}</div>
|
|
142
|
+
|
|
143
|
+
return (
|
|
144
|
+
<div className={className}>
|
|
145
|
+
<h2>${name}</h2>
|
|
146
|
+
{/* Add your UI here */}
|
|
147
|
+
</div>
|
|
148
|
+
)
|
|
149
|
+
}`
|
|
150
|
+
|
|
151
|
+
// Feature index
|
|
152
|
+
const indexContent = `export { use${name} } from './hooks/use${name}'
|
|
153
|
+
export { ${name}Component } from './components/${name}Component'
|
|
154
|
+
export type { ${name}ComponentProps } from './components/${name}Component'`
|
|
155
|
+
|
|
156
|
+
await ensureDir(join(outputDir, 'hooks'))
|
|
157
|
+
await ensureDir(join(outputDir, 'components'))
|
|
158
|
+
await writeFile(join(outputDir, 'hooks', `use${name}.ts`), hookContent)
|
|
159
|
+
await writeFile(join(outputDir, 'hooks', 'index.ts'), `export { use${name} } from './use${name}'`)
|
|
160
|
+
await writeFile(join(outputDir, 'components', `${name}Component.tsx`), componentContent)
|
|
161
|
+
await writeFile(join(outputDir, 'components', 'index.ts'), `export { ${name}Component } from './${name}Component'`)
|
|
162
|
+
await writeFile(join(outputDir, 'index.ts'), indexContent)
|
|
163
|
+
|
|
164
|
+
console.log(`✅ Feature scaffolded: ${outputDir}`)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
async function scaffoldTemplate(name: string, options: ScaffoldOptions) {
|
|
168
|
+
const outputDir = options.output || `./src/templates/${name.toLowerCase()}`
|
|
169
|
+
|
|
170
|
+
const templateContent = `/**
|
|
171
|
+
* ${name} Template
|
|
172
|
+
*
|
|
173
|
+
* Generated by Pattern-Stack CLI
|
|
174
|
+
*/
|
|
175
|
+
|
|
176
|
+
import React from 'react'
|
|
177
|
+
import { PageTemplate } from '../PageTemplate'
|
|
178
|
+
|
|
179
|
+
export interface ${name}TemplateProps {
|
|
180
|
+
title?: string
|
|
181
|
+
children?: React.ReactNode
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export function ${name}Template({
|
|
185
|
+
title = "${name}",
|
|
186
|
+
children
|
|
187
|
+
}: ${name}TemplateProps) {
|
|
188
|
+
return (
|
|
189
|
+
<PageTemplate>
|
|
190
|
+
<div className="space-y-6">
|
|
191
|
+
<header>
|
|
192
|
+
<h1 className="text-3xl font-bold">{title}</h1>
|
|
193
|
+
</header>
|
|
194
|
+
|
|
195
|
+
<main>
|
|
196
|
+
{children}
|
|
197
|
+
</main>
|
|
198
|
+
</div>
|
|
199
|
+
</PageTemplate>
|
|
200
|
+
)
|
|
201
|
+
}`
|
|
202
|
+
|
|
203
|
+
const indexContent = `export { ${name}Template } from './${name}Template'
|
|
204
|
+
export type { ${name}TemplateProps } from './${name}Template'`
|
|
205
|
+
|
|
206
|
+
await ensureDir(outputDir)
|
|
207
|
+
await writeFile(join(outputDir, `${name}Template.tsx`), templateContent)
|
|
208
|
+
await writeFile(join(outputDir, 'index.ts'), indexContent)
|
|
209
|
+
|
|
210
|
+
console.log(`✅ Template scaffolded: ${outputDir}`)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
async function ensureDir(dir: string) {
|
|
214
|
+
try {
|
|
215
|
+
await fs.mkdir(dir, { recursive: true })
|
|
216
|
+
} catch {
|
|
217
|
+
// Directory might already exist
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
async function writeFile(path: string, content: string) {
|
|
222
|
+
await ensureDir(dirname(path))
|
|
223
|
+
await fs.writeFile(path, content, 'utf8')
|
|
224
|
+
}
|