@pattern-stack/frontend-patterns 0.1.2 → 0.1.3
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 +85 -0
- package/LICENSE +19 -0
- package/cli/cli/commands/generate-hooks.js +291 -0
- package/cli/cli/commands/init.js +25 -0
- package/cli/cli/commands/scaffold.js +201 -0
- package/cli/cli/index.js +113 -0
- package/cli/commands/generate-hooks.js +291 -0
- package/cli/commands/generate-hooks.ts +316 -0
- package/cli/commands/init.js +25 -0
- package/cli/commands/init.ts +33 -0
- package/cli/commands/scaffold.js +201 -0
- package/cli/commands/scaffold.ts +224 -0
- package/cli/index.js +6665 -0
- package/cli/index.ts +124 -0
- package/cli/src/codegen/openapi/bulk-hook-generator.js +252 -0
- package/cli/src/codegen/openapi/bulk-types.js +89 -0
- package/cli/src/codegen/openapi/client-generator.js +672 -0
- package/cli/src/codegen/openapi/confidence-scorer.js +204 -0
- package/cli/src/codegen/openapi/hook-config.js +66 -0
- package/cli/src/codegen/openapi/hook-generator.js +1057 -0
- package/cli/src/codegen/openapi/parser.js +279 -0
- package/cli/src/codegen/openapi/type-generator.js +339 -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 +23 -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/ActivityFeed.stories.d.ts +38 -0
- package/dist/atoms/components/data/ActivityFeed/ActivityFeed.stories.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/{composed → components/data}/Chart/Chart.d.ts +2 -2
- package/dist/atoms/components/data/Chart/Chart.d.ts.map +1 -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.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/components/data/DataTable/TableCellWithTooltip.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/index.d.ts.map +1 -0
- package/dist/atoms/components/data/DetailedCard/DetailedCard.d.ts.map +1 -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/{composed → components/data}/IconBadge/IconBadge.d.ts +2 -1
- package/dist/atoms/components/data/IconBadge/IconBadge.d.ts.map +1 -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/components/data/ProgressBar/ProgressBar.d.ts.map +1 -0
- package/dist/atoms/components/data/ProgressBar/index.d.ts.map +1 -0
- package/dist/atoms/{composed → components/data}/StatCard/StatCard.d.ts +1 -1
- package/dist/atoms/components/data/StatCard/StatCard.d.ts.map +1 -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/components/feedback/Alert/Alert.d.ts.map +1 -0
- package/dist/atoms/components/feedback/Alert/index.d.ts.map +1 -0
- package/dist/atoms/components/feedback/EmptyState/EmptyState.d.ts.map +1 -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 +41 -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/components/feedback/Toast/Toast.d.ts.map +1 -0
- 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/components/forms/DateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/atoms/components/forms/DateTimePicker/index.d.ts.map +1 -0
- package/dist/atoms/components/forms/FileUpload/FileUpload.d.ts.map +1 -0
- package/dist/atoms/components/forms/FileUpload/index.d.ts.map +1 -0
- package/dist/atoms/components/forms/FormField/FormField.d.ts.map +1 -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/components/layout/Accordion/Accordion.d.ts.map +1 -0
- package/dist/atoms/components/layout/Accordion/index.d.ts.map +1 -0
- package/dist/atoms/components/layout/Breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/atoms/components/layout/Breadcrumb/index.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.map +1 -0
- package/dist/atoms/components/layout/Modal/index.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/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/components/navigation/GlobalSearch/GlobalSearch.d.ts.map +1 -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/components/theme/ColorSwatch/ColorSwatch.d.ts.map +1 -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/components/theme/PaletteSwitcher.d.ts.map +1 -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/components/user/UserAvatar/UserAvatar.d.ts.map +1 -0
- package/dist/atoms/components/user/UserAvatar/index.d.ts.map +1 -0
- package/dist/atoms/components/user/UserMenu/UserMenu.d.ts.map +1 -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/useResponsive.d.ts +42 -0
- package/dist/atoms/hooks/useResponsive.d.ts.map +1 -0
- package/dist/atoms/index.d.ts +4 -5
- package/dist/atoms/index.d.ts.map +1 -1
- package/dist/atoms/primitives/Badge.d.ts.map +1 -0
- package/dist/atoms/primitives/ErrorBoundary.d.ts.map +1 -0
- package/dist/atoms/{ui → primitives}/Select.d.ts +1 -1
- package/dist/atoms/primitives/Select.d.ts.map +1 -0
- package/dist/atoms/primitives/Switch.d.ts.map +1 -0
- package/dist/atoms/primitives/Tabs.d.ts.map +1 -0
- package/dist/atoms/primitives/avatar.d.ts.map +1 -0
- package/dist/atoms/{ui → primitives}/button.d.ts +3 -3
- package/dist/atoms/primitives/button.d.ts.map +1 -0
- package/dist/atoms/{ui → primitives}/card.d.ts +1 -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/{ui → primitives}/index.d.ts +2 -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 +2 -0
- 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 +1 -1
- package/dist/atoms/primitives/spinner.d.ts.map +1 -0
- package/dist/atoms/primitives/table.d.ts.map +1 -0
- package/dist/atoms/shared/index.d.ts +1 -0
- package/dist/atoms/shared/index.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/index.d.ts +3 -0
- package/dist/atoms/types/index.d.ts.map +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/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-resolver.d.ts +76 -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 +30 -0
- package/dist/atoms/utils/metric-engine.d.ts.map +1 -0
- package/dist/atoms/utils/ui-mapping.d.ts +17 -0
- package/dist/atoms/utils/ui-mapping.d.ts.map +1 -0
- package/dist/atoms/utils/utils.d.ts +5 -0
- package/dist/atoms/utils/utils.d.ts.map +1 -1
- package/dist/codegen/index.d.ts +7 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/openapi/bulk-hook-generator.d.ts +40 -0
- package/dist/codegen/openapi/bulk-hook-generator.d.ts.map +1 -0
- package/dist/codegen/openapi/bulk-types.d.ts +142 -0
- package/dist/codegen/openapi/bulk-types.d.ts.map +1 -0
- package/dist/codegen/openapi/client-generator.d.ts +52 -0
- package/dist/codegen/openapi/client-generator.d.ts.map +1 -0
- package/dist/codegen/openapi/confidence-scorer.d.ts +30 -0
- package/dist/codegen/openapi/confidence-scorer.d.ts.map +1 -0
- package/dist/codegen/openapi/hook-config.d.ts +50 -0
- package/dist/codegen/openapi/hook-config.d.ts.map +1 -0
- package/dist/codegen/openapi/hook-generator.d.ts +108 -0
- package/dist/codegen/openapi/hook-generator.d.ts.map +1 -0
- package/dist/codegen/openapi/index.d.ts +27 -0
- package/dist/codegen/openapi/index.d.ts.map +1 -0
- package/dist/codegen/openapi/parser.d.ts +107 -0
- package/dist/codegen/openapi/parser.d.ts.map +1 -0
- package/dist/codegen/openapi/type-generator.d.ts +53 -0
- package/dist/codegen/openapi/type-generator.d.ts.map +1 -0
- package/dist/features/auth/components/LoginForm.d.ts.map +1 -1
- package/dist/features/auth/hooks/index.d.ts +1 -0
- package/dist/features/auth/hooks/index.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/index.d.ts +1 -0
- package/dist/features/auth/index.d.ts.map +1 -1
- package/dist/features/auth/providers/MockAuthProvider.d.ts +9 -0
- package/dist/features/auth/providers/MockAuthProvider.d.ts.map +1 -0
- package/dist/features/auth/providers/index.d.ts +2 -0
- package/dist/features/auth/providers/index.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/frontend-patterns.css +4417 -1
- package/dist/generated/client/client.d.ts +23 -0
- package/dist/generated/client/client.d.ts.map +1 -0
- package/dist/generated/client/config.d.ts +10 -0
- package/dist/generated/client/config.d.ts.map +1 -0
- package/dist/generated/client/index.d.ts +12 -0
- package/dist/generated/client/index.d.ts.map +1 -0
- package/dist/generated/client/methods.d.ts +591 -0
- package/dist/generated/client/methods.d.ts.map +1 -0
- package/dist/generated/client/types.d.ts +37 -0
- package/dist/generated/client/types.d.ts.map +1 -0
- package/dist/generated/example.d.ts +8 -0
- package/dist/generated/example.d.ts.map +1 -0
- package/dist/generated/hooks/index.d.ts +11 -0
- package/dist/generated/hooks/index.d.ts.map +1 -0
- package/dist/generated/hooks/keys.d.ts +59 -0
- package/dist/generated/hooks/keys.d.ts.map +1 -0
- package/dist/generated/hooks/mutations.d.ts +551 -0
- package/dist/generated/hooks/mutations.d.ts.map +1 -0
- package/dist/generated/hooks/queries.d.ts +426 -0
- package/dist/generated/hooks/queries.d.ts.map +1 -0
- package/dist/generated/hooks/types.d.ts +318 -0
- package/dist/generated/hooks/types.d.ts.map +1 -0
- package/dist/generated/index.d.ts +13 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/types/endpoints.d.ts +1364 -0
- package/dist/generated/types/endpoints.d.ts.map +1 -0
- package/dist/generated/types/index.d.ts +11 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/parameters.d.ts +8 -0
- package/dist/generated/types/parameters.d.ts.map +1 -0
- package/dist/generated/types/responses.d.ts +8 -0
- package/dist/generated/types/responses.d.ts.map +1 -0
- package/dist/generated/types/schemas.d.ts +652 -0
- package/dist/generated/types/schemas.d.ts.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +27448 -8431
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +27460 -8422
- 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/SearchInput.d.ts.map +1 -1
- package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +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 +15 -0
- package/dist/molecules/layout/NavigationContext.d.ts.map +1 -0
- package/dist/molecules/layout/Sidebar.d.ts.map +1 -1
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts +2 -0
- package/dist/molecules/layout/SidebarButton/SidebarButton.d.ts.map +1 -1
- package/dist/molecules/layout/index.d.ts +4 -0
- 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/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.map +1 -1
- package/dist/templates/admin/AdminDashboardTemplate.d.ts +6 -9
- 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/api/APIDataTemplate.d.ts +66 -0
- package/dist/templates/api/APIDataTemplate.d.ts.map +1 -0
- package/dist/templates/api/index.d.ts +8 -0
- package/dist/templates/api/index.d.ts.map +1 -0
- package/dist/templates/factory.d.ts +2 -1
- package/dist/templates/factory.d.ts.map +1 -1
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.d.ts.map +1 -1
- package/package.json +37 -11
- package/dist/atoms/composed/Accordion/Accordion.d.ts.map +0 -1
- 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.map +0 -1
- package/dist/atoms/composed/Breadcrumb/Breadcrumb.d.ts.map +0 -1
- package/dist/atoms/composed/Breadcrumb/index.d.ts.map +0 -1
- package/dist/atoms/composed/Chart/Chart.d.ts.map +0 -1
- 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.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.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.map +0 -1
- package/dist/atoms/composed/DateTimePicker/DateTimePicker.d.ts.map +0 -1
- 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.map +0 -1
- package/dist/atoms/composed/EmptyState/EmptyState.d.ts.map +0 -1
- 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.map +0 -1
- package/dist/atoms/composed/FormField/FormField.d.ts.map +0 -1
- 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.map +0 -1
- package/dist/atoms/composed/IconBadge/IconBadge.d.ts.map +0 -1
- package/dist/atoms/composed/IconBadge/index.d.ts.map +0 -1
- package/dist/atoms/composed/Modal/Modal.d.ts.map +0 -1
- 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.map +0 -1
- package/dist/atoms/composed/StatCard/StatCard.d.ts.map +0 -1
- package/dist/atoms/composed/StatCard/index.d.ts.map +0 -1
- 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.map +0 -1
- package/dist/atoms/composed/UserMenu/UserMenu.d.ts.map +0 -1
- 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.map +0 -1
- package/dist/atoms/ui/ErrorBoundary.d.ts.map +0 -1
- package/dist/atoms/ui/Select.d.ts.map +0 -1
- package/dist/atoms/ui/Switch.d.ts.map +0 -1
- 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.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.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/data}/Chart/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/DataBadge/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/DataTable/TableCellWithTooltip.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/DataTable/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/DetailedCard/DetailedCard.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/DetailedCard/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/IconBadge/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/ProgressBar/ProgressBar.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/ProgressBar/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/data}/StatCard/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/feedback}/Alert/Alert.d.ts +0 -0
- /package/dist/atoms/{composed → components/feedback}/Alert/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/feedback}/EmptyState/EmptyState.d.ts +0 -0
- /package/dist/atoms/{composed → components/feedback}/EmptyState/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/feedback}/Toast/Toast.d.ts +0 -0
- /package/dist/atoms/{composed → components/feedback}/Toast/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/forms}/DateTimePicker/DateTimePicker.d.ts +0 -0
- /package/dist/atoms/{composed → components/forms}/DateTimePicker/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/forms}/FileUpload/FileUpload.d.ts +0 -0
- /package/dist/atoms/{composed → components/forms}/FileUpload/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/forms}/FormField/FormField.d.ts +0 -0
- /package/dist/atoms/{composed → components/forms}/FormField/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/layout}/Accordion/Accordion.d.ts +0 -0
- /package/dist/atoms/{composed → components/layout}/Accordion/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/layout}/Breadcrumb/Breadcrumb.d.ts +0 -0
- /package/dist/atoms/{composed → components/layout}/Breadcrumb/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/layout}/Modal/Modal.d.ts +0 -0
- /package/dist/atoms/{composed → components/layout}/Modal/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/layout}/Tooltip/Tooltip.d.ts +0 -0
- /package/dist/atoms/{composed → components/navigation}/GlobalSearch/GlobalSearch.d.ts +0 -0
- /package/dist/atoms/{composed → components/navigation}/GlobalSearch/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/theme}/ColorSwatch/ColorSwatch.d.ts +0 -0
- /package/dist/atoms/{composed → components/theme}/ColorSwatch/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/theme}/DarkModeToggle.d.ts +0 -0
- /package/dist/atoms/{composed → components/theme}/PaletteSwitcher.d.ts +0 -0
- /package/dist/atoms/{composed → components/theme}/StyleGuide.d.ts +0 -0
- /package/dist/atoms/{composed → components/user}/UserAvatar/UserAvatar.d.ts +0 -0
- /package/dist/atoms/{composed → components/user}/UserAvatar/index.d.ts +0 -0
- /package/dist/atoms/{composed → components/user}/UserMenu/UserMenu.d.ts +0 -0
- /package/dist/atoms/{composed → components/user}/UserMenu/index.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/Badge.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/ErrorBoundary.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/Switch.d.ts +0 -0
- /package/dist/atoms/{ui → primitives}/Tabs.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,85 @@
|
|
|
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
|
+
## [0.1.2] - 2025-08-09
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- CLI module format issue - removed `"type": "module"` from package.json to fix CommonJS/ESM conflict
|
|
12
|
+
- CSS export paths - added multiple export paths for easier importing
|
|
13
|
+
- TypeScript type exports - exported missing interface types (CardProps, SpinnerProps, LabelProps, SelectProps)
|
|
14
|
+
- CLI help command - improved help text with examples and version info
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- Package is now properly marked as private on NPM (requires authentication)
|
|
18
|
+
|
|
19
|
+
## [0.1.1] - 2025-08-09 (skipped)
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- CLI module format issue - removed `"type": "module"` from package.json to fix CommonJS/ESM conflict
|
|
23
|
+
- CSS export paths - added multiple export paths for easier importing
|
|
24
|
+
- TypeScript type exports - exported missing interface types (CardProps, SpinnerProps, LabelProps, SelectProps)
|
|
25
|
+
- CLI help command - improved help text with examples and version info
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- Package is now properly marked as private on NPM (requires authentication)
|
|
29
|
+
|
|
30
|
+
## [0.1.0] - 2025-08-09
|
|
31
|
+
|
|
32
|
+
### Added - Initial Release 🚀
|
|
33
|
+
|
|
34
|
+
#### Core Features
|
|
35
|
+
- Complete atomic architecture component library (atoms, molecules, organisms, templates)
|
|
36
|
+
- Factory pattern for creating React applications with minimal boilerplate
|
|
37
|
+
- Comprehensive design system with 8 semantic color palettes
|
|
38
|
+
- Domain-driven UI system for automatic component selection
|
|
39
|
+
|
|
40
|
+
#### Components
|
|
41
|
+
- **UI Primitives**: Button, Card, Input, Select, Badge, Table, and more
|
|
42
|
+
- **Data Components**: DataTable with smart rendering, StatCard, Chart, DataBadge
|
|
43
|
+
- **Layout Components**: AppLayout, Sidebar, AppHeader with responsive design
|
|
44
|
+
- **Templates**: AdminDashboard, DataTemplate, EntityManagement templates
|
|
45
|
+
|
|
46
|
+
#### Hook Generation System
|
|
47
|
+
- CLI tool for generating React hooks from OpenAPI specifications
|
|
48
|
+
- Automatic detection of bulk operations
|
|
49
|
+
- Full TypeScript type safety
|
|
50
|
+
- TanStack Query integration
|
|
51
|
+
|
|
52
|
+
#### Responsive Design
|
|
53
|
+
- Progressive responsive system with custom breakpoints
|
|
54
|
+
- Mobile-first approach with intelligent component adaptation
|
|
55
|
+
- Dynamic view modes (table/card switching)
|
|
56
|
+
|
|
57
|
+
#### Enhanced DataTemplate
|
|
58
|
+
- Server-side operations (pagination, filtering, sorting)
|
|
59
|
+
- Inline editing with validation and optimistic updates
|
|
60
|
+
- Bulk operations UI (85% complete, awaiting API integration)
|
|
61
|
+
- Progressive responsive design
|
|
62
|
+
|
|
63
|
+
#### Developer Experience
|
|
64
|
+
- Zero-config setup with sensible defaults
|
|
65
|
+
- Automatic UI component selection based on data types
|
|
66
|
+
- Built-in authentication patterns
|
|
67
|
+
- Comprehensive TypeScript support
|
|
68
|
+
|
|
69
|
+
### Infrastructure
|
|
70
|
+
- Vite-based build system
|
|
71
|
+
- ESLint rules for design system compliance
|
|
72
|
+
- Local development testing setup
|
|
73
|
+
- NPM package distribution ready
|
|
74
|
+
|
|
75
|
+
### Documentation
|
|
76
|
+
- Comprehensive README with examples
|
|
77
|
+
- Atomic architecture guidelines
|
|
78
|
+
- Hook generation guide
|
|
79
|
+
- Design system documentation
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
This is the foundation release of Pattern Stack Frontend Patterns - a reusable React template for building production-ready applications with minimal boilerplate.
|
|
84
|
+
|
|
85
|
+
Built with ❤️ for developers who want to focus on business logic, not infrastructure.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
PROPRIETARY LICENSE
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Pattern Stack
|
|
4
|
+
|
|
5
|
+
All rights reserved.
|
|
6
|
+
|
|
7
|
+
This software and associated documentation files (the "Software") are
|
|
8
|
+
proprietary and confidential. No part of this Software may be used,
|
|
9
|
+
copied, modified, merged, published, distributed, sublicensed, and/or
|
|
10
|
+
sold without the prior written permission of the copyright holder.
|
|
11
|
+
|
|
12
|
+
This Software is provided for evaluation and development purposes only
|
|
13
|
+
by authorized parties.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
|
|
17
|
+
DAMAGES OR OTHER LIABILITY ARISING FROM THE USE OF THIS SOFTWARE.
|
|
18
|
+
|
|
19
|
+
For licensing inquiries or permission requests, contact the Pattern Stack team.
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Generate Hooks Command
|
|
4
|
+
*
|
|
5
|
+
* Implementation of the `pattern-stack generate hooks` command
|
|
6
|
+
*
|
|
7
|
+
* Part of FRO-6: Generate Hooks Command
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.generateHooksCommand = generateHooksCommand;
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const parser_js_1 = require("../../src/codegen/openapi/parser.js");
|
|
14
|
+
const type_generator_js_1 = require("../../src/codegen/openapi/type-generator.js");
|
|
15
|
+
const client_generator_js_1 = require("../../src/codegen/openapi/client-generator.js");
|
|
16
|
+
const hook_generator_js_1 = require("../../src/codegen/openapi/hook-generator.js");
|
|
17
|
+
async function generateHooksCommand(source, options) {
|
|
18
|
+
try {
|
|
19
|
+
console.log('🚀 Pattern-Stack Hook Generator');
|
|
20
|
+
console.log('================================');
|
|
21
|
+
console.log();
|
|
22
|
+
// Load and parse OpenAPI specification
|
|
23
|
+
console.log('📥 Loading OpenAPI specification...');
|
|
24
|
+
const spec = await (0, parser_js_1.loadOpenAPISpec)(source);
|
|
25
|
+
console.log(`✅ Loaded: ${spec.info.title} v${spec.info.version}`);
|
|
26
|
+
console.log('🔍 Parsing specification...');
|
|
27
|
+
const parsed = await (0, parser_js_1.parseOpenAPI)(spec);
|
|
28
|
+
console.log(`✅ Found ${parsed.endpoints.length} endpoints, ${parsed.schemas.length} schemas`);
|
|
29
|
+
// Generate types
|
|
30
|
+
console.log('🏗️ Generating TypeScript types...');
|
|
31
|
+
const types = (0, type_generator_js_1.generateTypes)(parsed, {
|
|
32
|
+
prefix: options.prefix,
|
|
33
|
+
includeJSDoc: true,
|
|
34
|
+
includeExamples: true
|
|
35
|
+
});
|
|
36
|
+
// Generate API client
|
|
37
|
+
console.log('🔧 Generating API client...');
|
|
38
|
+
const client = (0, client_generator_js_1.generateAPIClient)(parsed, {
|
|
39
|
+
clientType: options.client,
|
|
40
|
+
includeAuth: true,
|
|
41
|
+
authType: options.auth,
|
|
42
|
+
includeInterceptors: true
|
|
43
|
+
});
|
|
44
|
+
// Generate React hooks
|
|
45
|
+
console.log('⚛️ Generating React hooks...');
|
|
46
|
+
const hooks = await (0, hook_generator_js_1.generateHooks)(parsed, {
|
|
47
|
+
includeInfiniteQueries: true,
|
|
48
|
+
includeOptimisticUpdates: true,
|
|
49
|
+
includeMutationHelpers: true,
|
|
50
|
+
enableConfidenceScoring: true
|
|
51
|
+
});
|
|
52
|
+
if (options.dryRun) {
|
|
53
|
+
console.log('\n📋 Dry run - files that would be generated:');
|
|
54
|
+
console.log('Types:');
|
|
55
|
+
console.log(' - schemas.ts');
|
|
56
|
+
console.log(' - endpoints.ts');
|
|
57
|
+
console.log(' - parameters.ts');
|
|
58
|
+
console.log(' - responses.ts');
|
|
59
|
+
console.log();
|
|
60
|
+
console.log('API Client:');
|
|
61
|
+
console.log(' - client.ts');
|
|
62
|
+
console.log(' - methods.ts');
|
|
63
|
+
console.log(' - types.ts');
|
|
64
|
+
console.log(' - config.ts');
|
|
65
|
+
console.log();
|
|
66
|
+
console.log('React Hooks:');
|
|
67
|
+
console.log(' - queries.ts');
|
|
68
|
+
console.log(' - mutations.ts');
|
|
69
|
+
console.log(' - keys.ts');
|
|
70
|
+
console.log(' - types.ts');
|
|
71
|
+
console.log();
|
|
72
|
+
console.log('Generated code preview:');
|
|
73
|
+
console.log('======================');
|
|
74
|
+
console.log();
|
|
75
|
+
console.log('Types (first 20 lines):');
|
|
76
|
+
console.log(types.schemas.split('\n').slice(0, 20).join('\n'));
|
|
77
|
+
console.log('\n...');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Create output directories
|
|
81
|
+
console.log(`📁 Creating output directory: ${options.output}`);
|
|
82
|
+
await ensureDir(options.output);
|
|
83
|
+
await ensureDir((0, path_1.join)(options.output, 'types'));
|
|
84
|
+
await ensureDir((0, path_1.join)(options.output, 'client'));
|
|
85
|
+
await ensureDir((0, path_1.join)(options.output, 'hooks'));
|
|
86
|
+
// Write type files
|
|
87
|
+
console.log('💾 Writing type definitions...');
|
|
88
|
+
await writeFile((0, path_1.join)(options.output, 'types', 'schemas.ts'), types.schemas);
|
|
89
|
+
await writeFile((0, path_1.join)(options.output, 'types', 'endpoints.ts'), types.endpoints);
|
|
90
|
+
await writeFile((0, path_1.join)(options.output, 'types', 'parameters.ts'), types.parameters);
|
|
91
|
+
await writeFile((0, path_1.join)(options.output, 'types', 'responses.ts'), types.responses);
|
|
92
|
+
await writeFile((0, path_1.join)(options.output, 'types', 'index.ts'), types.index);
|
|
93
|
+
// Write client files
|
|
94
|
+
console.log('💾 Writing API client...');
|
|
95
|
+
await writeFile((0, path_1.join)(options.output, 'client', 'client.ts'), client.client);
|
|
96
|
+
await writeFile((0, path_1.join)(options.output, 'client', 'methods.ts'), client.methods);
|
|
97
|
+
await writeFile((0, path_1.join)(options.output, 'client', 'types.ts'), client.types);
|
|
98
|
+
await writeFile((0, path_1.join)(options.output, 'client', 'config.ts'), client.config);
|
|
99
|
+
await writeFile((0, path_1.join)(options.output, 'client', 'index.ts'), client.index);
|
|
100
|
+
// Write hook files
|
|
101
|
+
console.log('💾 Writing React hooks...');
|
|
102
|
+
await writeFile((0, path_1.join)(options.output, 'hooks', 'queries.ts'), hooks.queries);
|
|
103
|
+
await writeFile((0, path_1.join)(options.output, 'hooks', 'mutations.ts'), hooks.mutations);
|
|
104
|
+
await writeFile((0, path_1.join)(options.output, 'hooks', 'keys.ts'), hooks.keys);
|
|
105
|
+
await writeFile((0, path_1.join)(options.output, 'hooks', 'types.ts'), hooks.types);
|
|
106
|
+
await writeFile((0, path_1.join)(options.output, 'hooks', 'index.ts'), hooks.index);
|
|
107
|
+
// Write confidence report if available
|
|
108
|
+
if (hooks.report) {
|
|
109
|
+
await writeFile((0, path_1.join)(options.output, 'hooks', 'confidence-report.md'), hooks.report);
|
|
110
|
+
console.log('📊 Generated confidence report');
|
|
111
|
+
// Check if there are low confidence names
|
|
112
|
+
const lowConfidenceCount = (hooks.report.match(/## Low Confidence Names/g) || []).length;
|
|
113
|
+
if (lowConfidenceCount > 0) {
|
|
114
|
+
console.log('\n⚠️ Some hook names have low confidence and may need review.');
|
|
115
|
+
console.log('Run `npm run review:hooks` to interactively review and improve them.');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Write main index file
|
|
119
|
+
const mainIndex = `/**
|
|
120
|
+
* Generated API Integration
|
|
121
|
+
*
|
|
122
|
+
* Auto-generated from OpenAPI specification: ${spec.info.title}
|
|
123
|
+
* Version: ${spec.info.version}
|
|
124
|
+
* Generated: ${new Date().toISOString()}
|
|
125
|
+
*/
|
|
126
|
+
|
|
127
|
+
export * from './types'
|
|
128
|
+
export * from './client'
|
|
129
|
+
export * from './hooks'
|
|
130
|
+
|
|
131
|
+
// Quick start exports
|
|
132
|
+
export { createAPIClient } from './client'
|
|
133
|
+
export { queryKeys } from './hooks'`;
|
|
134
|
+
await writeFile((0, path_1.join)(options.output, 'index.ts'), mainIndex);
|
|
135
|
+
// Generate usage example
|
|
136
|
+
const usageExample = generateUsageExample(spec.info.title, options);
|
|
137
|
+
await writeFile((0, path_1.join)(options.output, 'example.ts'), usageExample);
|
|
138
|
+
console.log();
|
|
139
|
+
console.log('✅ Generation complete!');
|
|
140
|
+
console.log(`📦 Generated files in: ${options.output}`);
|
|
141
|
+
console.log();
|
|
142
|
+
console.log('🚀 Quick start:');
|
|
143
|
+
console.log(`import { createAPIClient, useGetUsers } from './${options.output}'`);
|
|
144
|
+
console.log();
|
|
145
|
+
console.log('💡 See example.ts for detailed usage instructions');
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error('❌ Generation failed:');
|
|
149
|
+
console.error(error instanceof Error ? error.message : error);
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function ensureDir(dir) {
|
|
154
|
+
try {
|
|
155
|
+
await fs_1.promises.mkdir(dir, { recursive: true });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
// Directory might already exist
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function writeFile(path, content) {
|
|
162
|
+
await ensureDir((0, path_1.dirname)(path));
|
|
163
|
+
await fs_1.promises.writeFile(path, content, 'utf8');
|
|
164
|
+
}
|
|
165
|
+
function generateUsageExample(apiTitle, options) {
|
|
166
|
+
return `/**
|
|
167
|
+
* ${apiTitle} - Usage Example
|
|
168
|
+
*
|
|
169
|
+
* This file demonstrates how to use the generated API integration
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
import React from 'react'
|
|
173
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
|
174
|
+
import { createAPIClient, useGetUsers, useCreateUser } from './'
|
|
175
|
+
|
|
176
|
+
// 1. Set up the API client
|
|
177
|
+
const apiClient = createAPIClient({
|
|
178
|
+
baseUrl: 'https://api.example.com/v1',
|
|
179
|
+
${options.auth === 'bearer' ? `getAuthToken: () => localStorage.getItem('authToken'),` : ''}
|
|
180
|
+
${options.auth === 'apiKey' ? `getApiKey: () => process.env.REACT_APP_API_KEY,
|
|
181
|
+
apiKeyHeader: 'X-API-Key',` : ''}
|
|
182
|
+
onError: (error) => {
|
|
183
|
+
console.error('API Error:', error)
|
|
184
|
+
// Handle global errors (show toast, redirect to login, etc.)
|
|
185
|
+
}
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
// 2. Set up React Query
|
|
189
|
+
const queryClient = new QueryClient({
|
|
190
|
+
defaultOptions: {
|
|
191
|
+
queries: {
|
|
192
|
+
staleTime: 5 * 60 * 1000, // 5 minutes
|
|
193
|
+
cacheTime: 10 * 60 * 1000, // 10 minutes
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
// 3. Wrap your app with providers
|
|
199
|
+
function App() {
|
|
200
|
+
return (
|
|
201
|
+
<QueryClientProvider client={queryClient}>
|
|
202
|
+
<UserList />
|
|
203
|
+
</QueryClientProvider>
|
|
204
|
+
)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// 4. Use generated hooks in components
|
|
208
|
+
function UserList() {
|
|
209
|
+
// Query hook with automatic loading, error, and data states
|
|
210
|
+
const { data: users, isLoading, error } = useGetUsers({
|
|
211
|
+
limit: 10
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
// Mutation hook with optimistic updates
|
|
215
|
+
const createUserMutation = useCreateUser({
|
|
216
|
+
onSuccess: () => {
|
|
217
|
+
console.log('User created successfully!')
|
|
218
|
+
},
|
|
219
|
+
onError: (error) => {
|
|
220
|
+
console.error('Failed to create user:', error)
|
|
221
|
+
}
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
const handleCreateUser = () => {
|
|
225
|
+
createUserMutation.mutate({
|
|
226
|
+
email: 'new@example.com',
|
|
227
|
+
name: 'New User'
|
|
228
|
+
})
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (isLoading) return <div>Loading users...</div>
|
|
232
|
+
if (error) return <div>Error: {error.message}</div>
|
|
233
|
+
|
|
234
|
+
return (
|
|
235
|
+
<div>
|
|
236
|
+
<h2>Users</h2>
|
|
237
|
+
<button
|
|
238
|
+
onClick={handleCreateUser}
|
|
239
|
+
disabled={createUserMutation.isLoading}
|
|
240
|
+
>
|
|
241
|
+
{createUserMutation.isLoading ? 'Creating...' : 'Create User'}
|
|
242
|
+
</button>
|
|
243
|
+
|
|
244
|
+
<ul>
|
|
245
|
+
{users?.map(user => (
|
|
246
|
+
<li key={user.id}>
|
|
247
|
+
{user.name} ({user.email})
|
|
248
|
+
</li>
|
|
249
|
+
))}
|
|
250
|
+
</ul>
|
|
251
|
+
</div>
|
|
252
|
+
)
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// 5. Advanced usage with infinite queries
|
|
256
|
+
function InfiniteUserList() {
|
|
257
|
+
const {
|
|
258
|
+
data,
|
|
259
|
+
fetchNextPage,
|
|
260
|
+
hasNextPage,
|
|
261
|
+
isFetchingNextPage,
|
|
262
|
+
} = useInfiniteGetUsers({
|
|
263
|
+
limit: 20
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
return (
|
|
267
|
+
<div>
|
|
268
|
+
{data?.pages.map((page, i) => (
|
|
269
|
+
<React.Fragment key={i}>
|
|
270
|
+
{page.map(user => (
|
|
271
|
+
<div key={user.id}>{user.name}</div>
|
|
272
|
+
))}
|
|
273
|
+
</React.Fragment>
|
|
274
|
+
))}
|
|
275
|
+
|
|
276
|
+
<button
|
|
277
|
+
onClick={() => fetchNextPage()}
|
|
278
|
+
disabled={!hasNextPage || isFetchingNextPage}
|
|
279
|
+
>
|
|
280
|
+
{isFetchingNextPage
|
|
281
|
+
? 'Loading more...'
|
|
282
|
+
: hasNextPage
|
|
283
|
+
? 'Load More'
|
|
284
|
+
: 'Nothing more to load'}
|
|
285
|
+
</button>
|
|
286
|
+
</div>
|
|
287
|
+
)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export default App`;
|
|
291
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Init Command
|
|
4
|
+
*
|
|
5
|
+
* Implementation of the `pattern-stack init` command
|
|
6
|
+
*
|
|
7
|
+
* Part of FRO-14: Domain Template Initialization
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.initCommand = initCommand;
|
|
11
|
+
async function initCommand(template = 'basic', options) {
|
|
12
|
+
console.log(`🚀 Initializing Pattern-Stack project with ${template} template`);
|
|
13
|
+
if (options.name) {
|
|
14
|
+
console.log(`📦 Project name: ${options.name}`);
|
|
15
|
+
}
|
|
16
|
+
if (options.dir) {
|
|
17
|
+
console.log(`📁 Target directory: ${options.dir}`);
|
|
18
|
+
}
|
|
19
|
+
console.log('\n⚠️ Template initialization not yet implemented');
|
|
20
|
+
console.log('This feature will be available in a future release.');
|
|
21
|
+
console.log('\nFor now, you can:');
|
|
22
|
+
console.log('1. Clone the Pattern-Stack repository');
|
|
23
|
+
console.log('2. Use the generate hooks command to create API integrations');
|
|
24
|
+
console.log('3. Use the scaffold command to create components');
|
|
25
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Scaffold Command
|
|
4
|
+
*
|
|
5
|
+
* Implementation of the `pattern-stack scaffold` command
|
|
6
|
+
*
|
|
7
|
+
* Part of FRO-15: Component Scaffolding Commands
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.scaffoldCommand = scaffoldCommand;
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
async function scaffoldCommand(type, name, options) {
|
|
14
|
+
console.log(`🏗️ Scaffolding ${type}: ${name}`);
|
|
15
|
+
switch (type) {
|
|
16
|
+
case 'component':
|
|
17
|
+
await scaffoldComponent(name, options);
|
|
18
|
+
break;
|
|
19
|
+
case 'feature':
|
|
20
|
+
await scaffoldFeature(name, options);
|
|
21
|
+
break;
|
|
22
|
+
case 'template':
|
|
23
|
+
await scaffoldTemplate(name, options);
|
|
24
|
+
break;
|
|
25
|
+
default:
|
|
26
|
+
console.error(`❌ Unknown scaffold type: ${type}`);
|
|
27
|
+
console.log('Available types: component, feature, template');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function scaffoldComponent(name, options) {
|
|
32
|
+
const outputDir = options.output || `./src/atoms/composed/${name}`;
|
|
33
|
+
const componentContent = `/**
|
|
34
|
+
* ${name} Component
|
|
35
|
+
*
|
|
36
|
+
* Generated by Pattern-Stack CLI
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
import React from 'react'
|
|
40
|
+
import { cn } from '../../utils/utils'
|
|
41
|
+
|
|
42
|
+
export interface ${name}Props {
|
|
43
|
+
className?: string
|
|
44
|
+
children?: React.ReactNode
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function ${name}({ className, children, ...props }: ${name}Props) {
|
|
48
|
+
return (
|
|
49
|
+
<div className={cn("", className)} {...props}>
|
|
50
|
+
{children}
|
|
51
|
+
</div>
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
${name}.displayName = "${name}"`;
|
|
56
|
+
const indexContent = `export { ${name} } from './${name}'
|
|
57
|
+
export type { ${name}Props } from './${name}'`;
|
|
58
|
+
const testContent = `/**
|
|
59
|
+
* ${name} Component Tests
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
import { render, screen } from '@testing-library/react'
|
|
63
|
+
import { ${name} } from './${name}'
|
|
64
|
+
|
|
65
|
+
describe('${name}', () => {
|
|
66
|
+
it('renders children', () => {
|
|
67
|
+
render(<${name}>Test content</${name}>)
|
|
68
|
+
expect(screen.getByText('Test content')).toBeInTheDocument()
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('applies custom className', () => {
|
|
72
|
+
const { container } = render(<${name} className="custom-class" />)
|
|
73
|
+
expect(container.firstChild).toHaveClass('custom-class')
|
|
74
|
+
})
|
|
75
|
+
})`;
|
|
76
|
+
await ensureDir(outputDir);
|
|
77
|
+
await writeFile((0, path_1.join)(outputDir, `${name}.tsx`), componentContent);
|
|
78
|
+
await writeFile((0, path_1.join)(outputDir, 'index.ts'), indexContent);
|
|
79
|
+
await writeFile((0, path_1.join)(outputDir, `${name}.test.tsx`), testContent);
|
|
80
|
+
console.log(`✅ Component scaffolded: ${outputDir}`);
|
|
81
|
+
}
|
|
82
|
+
async function scaffoldFeature(name, options) {
|
|
83
|
+
const outputDir = options.output || `./src/features/${name.toLowerCase()}`;
|
|
84
|
+
// Feature hook
|
|
85
|
+
const hookContent = `/**
|
|
86
|
+
* ${name} Hooks
|
|
87
|
+
*
|
|
88
|
+
* Generated by Pattern-Stack CLI
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
import { useState, useEffect } from 'react'
|
|
92
|
+
|
|
93
|
+
export function use${name}() {
|
|
94
|
+
const [data, setData] = useState(null)
|
|
95
|
+
const [loading, setLoading] = useState(false)
|
|
96
|
+
const [error, setError] = useState<Error | null>(null)
|
|
97
|
+
|
|
98
|
+
// Add your logic here
|
|
99
|
+
|
|
100
|
+
return {
|
|
101
|
+
data,
|
|
102
|
+
loading,
|
|
103
|
+
error,
|
|
104
|
+
refetch: () => {
|
|
105
|
+
// Implement refetch logic
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}`;
|
|
109
|
+
// Feature component
|
|
110
|
+
const componentContent = `/**
|
|
111
|
+
* ${name} Component
|
|
112
|
+
*
|
|
113
|
+
* Generated by Pattern-Stack CLI
|
|
114
|
+
*/
|
|
115
|
+
|
|
116
|
+
import React from 'react'
|
|
117
|
+
import { use${name} } from '../hooks/use${name}'
|
|
118
|
+
|
|
119
|
+
export interface ${name}ComponentProps {
|
|
120
|
+
className?: string
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function ${name}Component({ className }: ${name}ComponentProps) {
|
|
124
|
+
const { data, loading, error } = use${name}()
|
|
125
|
+
|
|
126
|
+
if (loading) return <div>Loading...</div>
|
|
127
|
+
if (error) return <div>Error: {error.message}</div>
|
|
128
|
+
|
|
129
|
+
return (
|
|
130
|
+
<div className={className}>
|
|
131
|
+
<h2>${name}</h2>
|
|
132
|
+
{/* Add your UI here */}
|
|
133
|
+
</div>
|
|
134
|
+
)
|
|
135
|
+
}`;
|
|
136
|
+
// Feature index
|
|
137
|
+
const indexContent = `export { use${name} } from './hooks/use${name}'
|
|
138
|
+
export { ${name}Component } from './components/${name}Component'
|
|
139
|
+
export type { ${name}ComponentProps } from './components/${name}Component'`;
|
|
140
|
+
await ensureDir((0, path_1.join)(outputDir, 'hooks'));
|
|
141
|
+
await ensureDir((0, path_1.join)(outputDir, 'components'));
|
|
142
|
+
await writeFile((0, path_1.join)(outputDir, 'hooks', `use${name}.ts`), hookContent);
|
|
143
|
+
await writeFile((0, path_1.join)(outputDir, 'hooks', 'index.ts'), `export { use${name} } from './use${name}'`);
|
|
144
|
+
await writeFile((0, path_1.join)(outputDir, 'components', `${name}Component.tsx`), componentContent);
|
|
145
|
+
await writeFile((0, path_1.join)(outputDir, 'components', 'index.ts'), `export { ${name}Component } from './${name}Component'`);
|
|
146
|
+
await writeFile((0, path_1.join)(outputDir, 'index.ts'), indexContent);
|
|
147
|
+
console.log(`✅ Feature scaffolded: ${outputDir}`);
|
|
148
|
+
}
|
|
149
|
+
async function scaffoldTemplate(name, options) {
|
|
150
|
+
const outputDir = options.output || `./src/templates/${name.toLowerCase()}`;
|
|
151
|
+
const templateContent = `/**
|
|
152
|
+
* ${name} Template
|
|
153
|
+
*
|
|
154
|
+
* Generated by Pattern-Stack CLI
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
import React from 'react'
|
|
158
|
+
import { PageTemplate } from '../PageTemplate'
|
|
159
|
+
|
|
160
|
+
export interface ${name}TemplateProps {
|
|
161
|
+
title?: string
|
|
162
|
+
children?: React.ReactNode
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export function ${name}Template({
|
|
166
|
+
title = "${name}",
|
|
167
|
+
children
|
|
168
|
+
}: ${name}TemplateProps) {
|
|
169
|
+
return (
|
|
170
|
+
<PageTemplate>
|
|
171
|
+
<div className="space-y-6">
|
|
172
|
+
<header>
|
|
173
|
+
<h1 className="text-3xl font-bold">{title}</h1>
|
|
174
|
+
</header>
|
|
175
|
+
|
|
176
|
+
<main>
|
|
177
|
+
{children}
|
|
178
|
+
</main>
|
|
179
|
+
</div>
|
|
180
|
+
</PageTemplate>
|
|
181
|
+
)
|
|
182
|
+
}`;
|
|
183
|
+
const indexContent = `export { ${name}Template } from './${name}Template'
|
|
184
|
+
export type { ${name}TemplateProps } from './${name}Template'`;
|
|
185
|
+
await ensureDir(outputDir);
|
|
186
|
+
await writeFile((0, path_1.join)(outputDir, `${name}Template.tsx`), templateContent);
|
|
187
|
+
await writeFile((0, path_1.join)(outputDir, 'index.ts'), indexContent);
|
|
188
|
+
console.log(`✅ Template scaffolded: ${outputDir}`);
|
|
189
|
+
}
|
|
190
|
+
async function ensureDir(dir) {
|
|
191
|
+
try {
|
|
192
|
+
await fs_1.promises.mkdir(dir, { recursive: true });
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
// Directory might already exist
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async function writeFile(path, content) {
|
|
199
|
+
await ensureDir((0, path_1.dirname)(path));
|
|
200
|
+
await fs_1.promises.writeFile(path, content, 'utf8');
|
|
201
|
+
}
|