@shepai/cli 1.12.0 → 1.14.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/dist/eslint.config.mjs +28 -0
- package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
- package/dist/src/presentation/web/app/layout.js +2 -1
- package/dist/src/presentation/web/app/page.js +1 -1
- package/dist/src/presentation/web/app/version/page.js +1 -1
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.d.ts +7 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.js +23 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.js +30 -0
- package/dist/src/presentation/web/components/common/elapsed-time/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/elapsed-time/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/elapsed-time/index.js +1 -0
- package/dist/src/presentation/web/components/common/empty-state/empty-state.d.ts +9 -0
- package/dist/src/presentation/web/components/common/empty-state/empty-state.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/empty-state/empty-state.js +5 -0
- package/dist/src/presentation/web/components/common/empty-state/empty-state.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/common/empty-state/empty-state.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/empty-state/empty-state.stories.js +45 -0
- package/dist/src/presentation/web/components/common/empty-state/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/empty-state/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/empty-state/index.js +1 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts +10 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.js +9 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js +42 -0
- package/dist/src/presentation/web/components/common/feature-list-item/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/feature-list-item/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-list-item/index.js +1 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.js +13 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.js +45 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/index.js +1 -0
- package/dist/src/presentation/web/components/common/feature-status-config.d.ts +11 -0
- package/dist/src/presentation/web/components/common/feature-status-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-config.js +22 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.js +5 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.js +37 -0
- package/dist/src/presentation/web/components/common/feature-status-group/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/feature-status-group/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-group/index.js +1 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/index.js +1 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.d.ts +14 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.js +13 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/loading-skeleton/loading-skeleton.stories.js +48 -0
- package/dist/src/presentation/web/components/common/page-header/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/page-header/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/page-header/index.js +1 -0
- package/dist/src/presentation/web/components/common/page-header/page-header.d.ts +8 -0
- package/dist/src/presentation/web/components/common/page-header/page-header.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/page-header/page-header.js +5 -0
- package/dist/src/presentation/web/components/common/page-header/page-header.stories.d.ts +25 -0
- package/dist/src/presentation/web/components/common/page-header/page-header.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/page-header/page-header.stories.js +46 -0
- package/dist/src/presentation/web/components/common/shep-logo/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/shep-logo/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/index.js +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.d.ts +6 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.js +5 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.js +21 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.js +1 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts +5 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.js +11 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts +8 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.js +21 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/index.js +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts +9 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.js +6 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.js +53 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/index.js +1 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts +8 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.js +11 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts +8 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.js +31 -0
- package/dist/src/presentation/web/components/common/theme-toggle/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/{features → common}/theme-toggle/theme-toggle.stories.js +1 -1
- package/dist/src/presentation/web/{app → components/features}/version/version-page-client.d.ts +1 -1
- package/dist/src/presentation/web/components/features/version/version-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/version/version-page-client.js +13 -0
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts +7 -0
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +9 -0
- package/dist/src/presentation/web/components/layouts/app-shell/index.d.ts +2 -0
- package/dist/src/presentation/web/components/layouts/app-shell/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/app-shell/index.js +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +17 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +34 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +61 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/index.d.ts +3 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/index.js +1 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.d.ts +13 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.js +7 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/dashboard-layout.stories.js +41 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/index.d.ts +2 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/dashboard-layout/index.js +1 -0
- package/dist/src/presentation/web/components/layouts/header/header.d.ts +10 -0
- package/dist/src/presentation/web/components/layouts/header/header.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/header/header.js +5 -0
- package/dist/src/presentation/web/components/layouts/header/header.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/layouts/header/header.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/header/header.stories.js +35 -0
- package/dist/src/presentation/web/components/layouts/header/index.d.ts +2 -0
- package/dist/src/presentation/web/components/layouts/header/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/header/index.js +1 -0
- package/dist/src/presentation/web/components/layouts/sidebar/index.d.ts +3 -0
- package/dist/src/presentation/web/components/layouts/sidebar/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/sidebar/index.js +1 -0
- package/dist/src/presentation/web/components/layouts/sidebar/sidebar.d.ts +14 -0
- package/dist/src/presentation/web/components/layouts/sidebar/sidebar.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/sidebar/sidebar.js +11 -0
- package/dist/src/presentation/web/components/layouts/sidebar/sidebar.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/layouts/sidebar/sidebar.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/sidebar/sidebar.stories.js +44 -0
- package/dist/src/presentation/web/components/ui/accordion.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/alert.js +1 -1
- package/dist/src/presentation/web/components/ui/alert.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/badge.js +4 -4
- package/dist/src/presentation/web/components/ui/badge.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/button.d.ts +3 -4
- package/dist/src/presentation/web/components/ui/button.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/button.js +18 -16
- package/dist/src/presentation/web/components/ui/button.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/card.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/dialog.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/input.d.ts +1 -1
- package/dist/src/presentation/web/components/ui/input.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/input.js +3 -5
- package/dist/src/presentation/web/components/ui/input.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/label.js +1 -1
- package/dist/src/presentation/web/components/ui/label.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/popover.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/scroll-area.d.ts +6 -0
- package/dist/src/presentation/web/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/scroll-area.js +11 -0
- package/dist/src/presentation/web/components/ui/select.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/separator.d.ts +5 -0
- package/dist/src/presentation/web/components/ui/separator.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/separator.js +8 -0
- package/dist/src/presentation/web/components/ui/sheet.d.ts +15 -0
- package/dist/src/presentation/web/components/ui/sheet.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/sheet.js +40 -0
- package/dist/src/presentation/web/components/ui/sidebar.d.ts +70 -0
- package/dist/src/presentation/web/components/ui/sidebar.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/sidebar.js +211 -0
- package/dist/src/presentation/web/components/ui/skeleton.d.ts +3 -0
- package/dist/src/presentation/web/components/ui/skeleton.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/skeleton.js +6 -0
- package/dist/src/presentation/web/components/ui/sonner.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/tabs.stories.js +1 -1
- package/dist/src/presentation/web/components/ui/tooltip.d.ts +8 -0
- package/dist/src/presentation/web/components/ui/tooltip.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/tooltip.js +17 -0
- package/dist/src/presentation/web/hooks/use-deferred-mount.d.ts +10 -0
- package/dist/src/presentation/web/hooks/use-deferred-mount.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-deferred-mount.js +23 -0
- package/dist/src/presentation/web/hooks/use-mobile.d.ts +2 -0
- package/dist/src/presentation/web/hooks/use-mobile.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-mobile.js +15 -0
- package/dist/src/presentation/web/hooks/useTheme.d.ts +1 -2
- package/dist/src/presentation/web/hooks/useTheme.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/useTheme.js +5 -6
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +12 -7
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +5 -5
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/next-server.js.nft.json +1 -1
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page.js +2 -2
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_not-found.html +2 -2
- package/web/.next/server/app/_not-found.rsc +13 -12
- package/web/.next/server/app/_not-found.segments/_full.segment.rsc +13 -12
- package/web/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/_not-found.segments/_index.segment.rsc +5 -4
- package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/web/.next/server/app/index.html +2 -2
- package/web/.next/server/app/index.rsc +14 -13
- package/web/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/web/.next/server/app/index.segments/_full.segment.rsc +14 -13
- package/web/.next/server/app/index.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/index.segments/_index.segment.rsc +5 -4
- package/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/web/.next/server/app/page/build-manifest.json +3 -3
- package/web/.next/server/app/page.js +2 -2
- package/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +3 -3
- package/web/.next/server/app/version/page.js +3 -3
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version.html +2 -2
- package/web/.next/server/app/version.rsc +14 -13
- package/web/.next/server/app/version.segments/_full.segment.rsc +14 -13
- package/web/.next/server/app/version.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/version.segments/_index.segment.rsc +5 -4
- package/web/.next/server/app/version.segments/_tree.segment.rsc +2 -2
- package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +3 -3
- package/web/.next/server/app/version.segments/version.segment.rsc +3 -3
- package/web/.next/server/chunks/ssr/{403f9_next_dist_2ff794b1._.js → 403f9_next_dist_esm_ceb2fa1e._.js} +2 -2
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_ceb2fa1e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18ff2ebf._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18ff2ebf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__2328b471._.js → [root-of-the-server]__479da921._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__479da921._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__3acee9dd._.js → [root-of-the-server]__659cf841._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__659cf841._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ab31d101._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ab31d101._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ccf8a903._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ccf8a903._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0f02ab66._.js +1 -1
- package/web/.next/server/chunks/ssr/_0f02ab66._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_19be0743._.js +3 -0
- package/web/.next/server/chunks/ssr/_19be0743._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_4582f3c3._.js +3 -0
- package/web/.next/server/chunks/ssr/_4582f3c3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a0c04017._.js +10 -0
- package/web/.next/server/chunks/ssr/_a0c04017._.js.map +1 -0
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +3 -0
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{node_modules__pnpm_522e4103._.js → node_modules__pnpm_0ce0b44d._.js} +2 -2
- package/web/.next/server/chunks/ssr/{node_modules__pnpm_522e4103._.js.map → node_modules__pnpm_0ce0b44d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_372075f9._.js +13 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_372075f9._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/404.html +2 -2
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +1 -1
- package/web/.next/static/chunks/07f00e2e73d322d2.js +4 -0
- package/web/.next/static/chunks/33854795ae473cf1.css +1 -0
- package/web/.next/static/chunks/{b3cc49b27e09fa39.js → 37bc3e283f734dca.js} +1 -1
- package/web/.next/static/chunks/5130d7093ad39f4a.js +5 -0
- package/web/.next/static/chunks/523c5cfe0570712c.js +1 -0
- package/web/.next/static/chunks/df7d29673e0ac11d.js +1 -0
- package/web/.next/static/chunks/ef1296dbe67d5aae.js +1 -0
- package/web/.next/static/chunks/{turbopack-76ba02c6b131eee4.js → turbopack-a5a88a85e7ac8e8d.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/package.json +2 -1
- package/dist/src/presentation/web/app/version/version-page-client.d.ts.map +0 -1
- package/dist/src/presentation/web/app/version/version-page-client.js +0 -13
- package/dist/src/presentation/web/components/features/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/index.js +0 -2
- package/dist/src/presentation/web/components/features/theme-toggle/index.d.ts +0 -2
- package/dist/src/presentation/web/components/features/theme-toggle/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/theme-toggle/theme-toggle.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/theme-toggle/theme-toggle.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/ui/index.d.ts +0 -13
- package/dist/src/presentation/web/components/ui/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/ui/index.js +0 -14
- package/web/.next/server/chunks/ssr/403f9_next_dist_2ff794b1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__205a2636._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__205a2636._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2328b471._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3acee9dd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8297ff30._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8297ff30._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d6257aad._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d6257aad._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_ccea5183._.js +0 -3
- package/web/.next/server/chunks/ssr/_ccea5183._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_layout_tsx_aa3a06bd._.js +0 -13
- package/web/.next/server/chunks/ssr/src_presentation_web_app_layout_tsx_aa3a06bd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_version_version-page-client_tsx_bd5ab0cf._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_app_version_version-page-client_tsx_bd5ab0cf._.js.map +0 -1
- package/web/.next/static/chunks/51816495a9eb288c.css +0 -1
- package/web/.next/static/chunks/71462f20e38a4262.js +0 -4
- package/web/.next/static/chunks/86484b9b4aa9f859.js +0 -1
- package/web/.next/static/chunks/8ec8e211eedf31cc.js +0 -1
- /package/dist/src/presentation/web/components/{features → common/theme-toggle}/index.d.ts +0 -0
- /package/dist/src/presentation/web/components/{features → common}/theme-toggle/index.js +0 -0
- /package/dist/src/presentation/web/components/{features → common}/theme-toggle/theme-toggle.d.ts +0 -0
- /package/dist/src/presentation/web/components/{features → common}/theme-toggle/theme-toggle.js +0 -0
- /package/dist/src/presentation/web/components/{features → common}/theme-toggle/theme-toggle.stories.d.ts +0 -0
- /package/web/.next/static/{oYqPsC4DYjduQ_8Je-FJh → fDnQnLH8dIxn_WXo-1RJ-}/_buildManifest.js +0 -0
- /package/web/.next/static/{oYqPsC4DYjduQ_8Je-FJh → fDnQnLH8dIxn_WXo-1RJ-}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{oYqPsC4DYjduQ_8Je-FJh → fDnQnLH8dIxn_WXo-1RJ-}/_ssgManifest.js +0 -0
package/dist/eslint.config.mjs
CHANGED
|
@@ -14,6 +14,8 @@ import prettierConfig from 'eslint-config-prettier';
|
|
|
14
14
|
import reactPlugin from 'eslint-plugin-react';
|
|
15
15
|
import reactHooksPlugin from 'eslint-plugin-react-hooks';
|
|
16
16
|
import nextPlugin from '@next/eslint-plugin-next';
|
|
17
|
+
import tailwindPlugin from 'eslint-plugin-tailwindcss';
|
|
18
|
+
import storybookPlugin from 'eslint-plugin-storybook';
|
|
17
19
|
export default tseslint.config(
|
|
18
20
|
// =============================================================================
|
|
19
21
|
// Global ignores (replaces .eslintignore)
|
|
@@ -176,6 +178,7 @@ eslint.configs.recommended,
|
|
|
176
178
|
react: reactPlugin,
|
|
177
179
|
'react-hooks': reactHooksPlugin,
|
|
178
180
|
'@next/next': nextPlugin,
|
|
181
|
+
tailwindcss: tailwindPlugin,
|
|
179
182
|
},
|
|
180
183
|
languageOptions: {
|
|
181
184
|
parserOptions: {
|
|
@@ -198,6 +201,11 @@ eslint.configs.recommended,
|
|
|
198
201
|
'react/jsx-key': 'error',
|
|
199
202
|
'react/no-array-index-key': 'warn',
|
|
200
203
|
'react/self-closing-comp': 'warn',
|
|
204
|
+
'react/jsx-no-useless-fragment': 'warn',
|
|
205
|
+
'react/jsx-curly-brace-presence': ['warn', { props: 'never', children: 'never' }],
|
|
206
|
+
'react/hook-use-state': 'warn',
|
|
207
|
+
'react/jsx-no-leaked-render': 'warn',
|
|
208
|
+
'react/no-unstable-nested-components': 'error',
|
|
201
209
|
// React Hooks rules
|
|
202
210
|
'react-hooks/rules-of-hooks': 'error',
|
|
203
211
|
'react-hooks/exhaustive-deps': 'warn',
|
|
@@ -205,6 +213,26 @@ eslint.configs.recommended,
|
|
|
205
213
|
'@next/next/no-html-link-for-pages': 'error',
|
|
206
214
|
'@next/next/no-img-element': 'warn',
|
|
207
215
|
'@next/next/no-sync-scripts': 'error',
|
|
216
|
+
// Tailwind CSS rules
|
|
217
|
+
'tailwindcss/classnames-order': 'warn',
|
|
218
|
+
'tailwindcss/no-contradicting-classname': 'error',
|
|
219
|
+
'tailwindcss/no-unnecessary-arbitrary-value': 'warn',
|
|
220
|
+
'tailwindcss/enforces-shorthand': 'warn',
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
// =============================================================================
|
|
224
|
+
// Storybook story files
|
|
225
|
+
// =============================================================================
|
|
226
|
+
{
|
|
227
|
+
files: ['**/*.stories.@(ts|tsx)'],
|
|
228
|
+
plugins: {
|
|
229
|
+
storybook: storybookPlugin,
|
|
230
|
+
},
|
|
231
|
+
rules: {
|
|
232
|
+
'storybook/default-exports': 'error',
|
|
233
|
+
'storybook/hierarchy-separator': 'error',
|
|
234
|
+
'storybook/no-uninstalled-addons': 'error',
|
|
235
|
+
'storybook/prefer-pascal-case': 'warn',
|
|
208
236
|
},
|
|
209
237
|
},
|
|
210
238
|
// =============================================================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,eAAe,CAAC;AAGvB,eAAO,MAAM,QAAQ,EAAE,QAItB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,QAAQ,GACT,EAAE,QAAQ,CAAC;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC,2CAyBD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import './globals.css';
|
|
3
|
+
import { AppShell } from '../components/layouts/app-shell';
|
|
3
4
|
export const metadata = {
|
|
4
5
|
title: 'Shep AI',
|
|
5
6
|
description: 'Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy',
|
|
@@ -17,5 +18,5 @@ export default function RootLayout({ children, }) {
|
|
|
17
18
|
} catch (e) {}
|
|
18
19
|
})();
|
|
19
20
|
`,
|
|
20
|
-
} }) }), _jsx("body", { className: "min-h-screen antialiased", children: children })] }));
|
|
21
|
+
} }) }), _jsx("body", { className: "min-h-screen antialiased", children: _jsx(AppShell, { children: children }) })] }));
|
|
21
22
|
}
|
|
@@ -2,5 +2,5 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import Link from 'next/link';
|
|
3
3
|
import { Button } from '../components/ui/button';
|
|
4
4
|
export default function HomePage() {
|
|
5
|
-
return (_jsx("
|
|
5
|
+
return (_jsx("div", { className: "flex flex-col items-center justify-center p-4", children: _jsxs("div", { className: "text-center", children: [_jsx("h1", { className: "text-4xl font-bold tracking-tight", children: "Shep AI" }), _jsx("p", { className: "text-muted-foreground mt-4 text-lg", children: "Autonomous AI Native SDLC Platform" }), _jsx("p", { className: "text-muted-foreground mt-2 text-sm", children: "Web UI Component Library" }), _jsx("div", { className: "mt-6", children: _jsx(Button, { asChild: true, variant: "outline", children: _jsx(Link, { href: "/version", children: "View Version" }) }) })] }) }));
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { getVersionInfo, getSystemInfo } from '../../lib/version';
|
|
3
|
-
import VersionPageClient from '
|
|
3
|
+
import VersionPageClient from '../../components/features/version/version-page-client';
|
|
4
4
|
export default function VersionPage() {
|
|
5
5
|
const versionInfo = getVersionInfo();
|
|
6
6
|
const systemInfo = getSystemInfo();
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface ElapsedTimeProps {
|
|
2
|
+
startedAt: number;
|
|
3
|
+
}
|
|
4
|
+
export declare function formatElapsed(elapsedMs: number): string;
|
|
5
|
+
export declare function ElapsedTime({ startedAt }: ElapsedTimeProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=elapsed-time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elapsed-time.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/elapsed-time/elapsed-time.tsx"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAgB1D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useEffect, startTransition } from 'react';
|
|
4
|
+
export function formatElapsed(elapsedMs) {
|
|
5
|
+
const totalSeconds = Math.floor(elapsedMs / 1000);
|
|
6
|
+
if (totalSeconds >= 3600) {
|
|
7
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
8
|
+
return `${hours}h`;
|
|
9
|
+
}
|
|
10
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
11
|
+
const seconds = totalSeconds % 60;
|
|
12
|
+
return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
|
|
13
|
+
}
|
|
14
|
+
export function ElapsedTime({ startedAt }) {
|
|
15
|
+
const [elapsed, setElapsed] = useState(() => Date.now() - startedAt);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const id = setInterval(() => {
|
|
18
|
+
startTransition(() => setElapsed(Date.now() - startedAt));
|
|
19
|
+
}, 1000);
|
|
20
|
+
return () => clearInterval(id);
|
|
21
|
+
}, [startedAt]);
|
|
22
|
+
return (_jsx("span", { "data-testid": "elapsed-time", className: "tabular-nums", children: formatElapsed(elapsed) }));
|
|
23
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ElapsedTime } from './elapsed-time';
|
|
3
|
+
declare const meta: Meta<typeof ElapsedTime>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const JustStarted: Story;
|
|
7
|
+
export declare const FiveMinutes: Story;
|
|
8
|
+
export declare const ThirtyMinutes: Story;
|
|
9
|
+
export declare const TwoHours: Story;
|
|
10
|
+
//# sourceMappingURL=elapsed-time.stories.d.ts.map
|
package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elapsed-time.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/elapsed-time/elapsed-time.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAOlC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAItB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ElapsedTime } from './elapsed-time';
|
|
2
|
+
const meta = {
|
|
3
|
+
title: 'Composed/ElapsedTime',
|
|
4
|
+
component: ElapsedTime,
|
|
5
|
+
parameters: {
|
|
6
|
+
layout: 'padded',
|
|
7
|
+
},
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
};
|
|
10
|
+
export default meta;
|
|
11
|
+
export const JustStarted = {
|
|
12
|
+
args: {
|
|
13
|
+
startedAt: Date.now(),
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
export const FiveMinutes = {
|
|
17
|
+
args: {
|
|
18
|
+
startedAt: Date.now() - 5 * 60 * 1000,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export const ThirtyMinutes = {
|
|
22
|
+
args: {
|
|
23
|
+
startedAt: Date.now() - 30 * 60 * 1000,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
export const TwoHours = {
|
|
27
|
+
args: {
|
|
28
|
+
startedAt: Date.now() - 2 * 60 * 60 * 1000,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/elapsed-time/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ElapsedTime, formatElapsed } from './elapsed-time';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode, HTMLAttributes } from 'react';
|
|
2
|
+
export interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
icon?: ReactNode;
|
|
4
|
+
title: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
action?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare function EmptyState({ icon, title, description, action, className, ...props }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=empty-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/empty-state/empty-state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGvD,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACrE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,2CAYjB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../../../lib/utils';
|
|
3
|
+
export function EmptyState({ icon, title, description, action, className, ...props }) {
|
|
4
|
+
return (_jsxs("div", { className: cn('flex flex-col items-center gap-4 px-4 py-12 text-center', className), ...props, children: [icon ? _jsx("div", { className: "text-muted-foreground", children: icon }) : null, _jsx("h3", { className: "text-lg font-semibold", children: title }), description ? _jsx("p", { className: "text-muted-foreground max-w-md text-sm", children: description }) : null, action ? _jsx("div", { className: "mt-2", children: action }) : null] }));
|
|
5
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { EmptyState } from './empty-state';
|
|
3
|
+
declare const meta: Meta<typeof EmptyState>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const WithIcon: Story;
|
|
8
|
+
export declare const WithDescription: Story;
|
|
9
|
+
export declare const WithAction: Story;
|
|
10
|
+
export declare const FullExample: Story;
|
|
11
|
+
//# sourceMappingURL=empty-state.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty-state.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/empty-state/empty-state.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAOjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAK7B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAazB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Inbox, FileQuestion, Plus } from 'lucide-react';
|
|
3
|
+
import { EmptyState } from './empty-state';
|
|
4
|
+
import { Button } from '../../ui/button';
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Composed/EmptyState',
|
|
7
|
+
component: EmptyState,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'centered',
|
|
10
|
+
},
|
|
11
|
+
tags: ['autodocs'],
|
|
12
|
+
};
|
|
13
|
+
export default meta;
|
|
14
|
+
export const Default = {
|
|
15
|
+
args: {
|
|
16
|
+
title: 'No items found',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
export const WithIcon = {
|
|
20
|
+
args: {
|
|
21
|
+
icon: _jsx(Inbox, { className: "h-12 w-12" }),
|
|
22
|
+
title: 'Your inbox is empty',
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export const WithDescription = {
|
|
26
|
+
args: {
|
|
27
|
+
title: 'No results',
|
|
28
|
+
description: 'Try adjusting your search or filter to find what you are looking for.',
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
export const WithAction = {
|
|
32
|
+
args: {
|
|
33
|
+
title: 'No projects yet',
|
|
34
|
+
description: 'Get started by creating your first project.',
|
|
35
|
+
action: (_jsxs(Button, { children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "Create Project"] })),
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export const FullExample = {
|
|
39
|
+
args: {
|
|
40
|
+
icon: _jsx(FileQuestion, { className: "h-12 w-12" }),
|
|
41
|
+
title: 'No features found',
|
|
42
|
+
description: 'It looks like you have not created any features yet. Start by creating a new feature to track your development workflow.',
|
|
43
|
+
action: (_jsxs(Button, { children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "New Feature"] })),
|
|
44
|
+
},
|
|
45
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/empty-state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EmptyState } from './empty-state';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FeatureStatus } from '../../common/feature-status-config';
|
|
2
|
+
export interface FeatureListItemProps {
|
|
3
|
+
name: string;
|
|
4
|
+
status: FeatureStatus;
|
|
5
|
+
startedAt?: number;
|
|
6
|
+
duration?: string;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function FeatureListItem({ name, status, startedAt, duration, onClick, }: FeatureListItemProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=feature-list-item.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-list-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-list-item/feature-list-item.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,MAAM,EACN,SAAS,EACT,QAAQ,EACR,OAAO,GACR,EAAE,oBAAoB,2CA2BtB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { SidebarMenuItem, SidebarMenuButton } from '../../ui/sidebar';
|
|
4
|
+
import { ElapsedTime } from '../../common/elapsed-time';
|
|
5
|
+
import { featureStatusConfig } from '../../common/feature-status-config';
|
|
6
|
+
export function FeatureListItem({ name, status, startedAt, duration, onClick, }) {
|
|
7
|
+
const { icon: StatusIcon, iconClass } = featureStatusConfig[status];
|
|
8
|
+
return (_jsx(SidebarMenuItem, { "data-testid": "feature-list-item", children: _jsxs(SidebarMenuButton, { size: "sm", onClick: onClick, tooltip: name, className: "cursor-pointer", children: [_jsx(StatusIcon, { className: iconClass }), _jsx("span", { className: "flex-1 truncate font-medium", children: name }), status === 'in-progress' && startedAt != null ? (_jsx("span", { "data-testid": "feature-list-item-meta", className: "text-muted-foreground ml-auto text-xs tabular-nums", children: _jsx(ElapsedTime, { startedAt: startedAt }) })) : null, status === 'done' && duration ? (_jsx("span", { "data-testid": "feature-list-item-meta", className: "text-muted-foreground ml-auto text-xs tabular-nums", children: duration })) : null] }) }));
|
|
9
|
+
}
|
package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { FeatureListItem } from './feature-list-item';
|
|
3
|
+
declare const meta: Meta<typeof FeatureListItem>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const ActionNeeded: Story;
|
|
7
|
+
export declare const InProgress: Story;
|
|
8
|
+
export declare const Done: Story;
|
|
9
|
+
export declare const WithClickHandler: Story;
|
|
10
|
+
//# sourceMappingURL=feature-list-item.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-list-item.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-list-item/feature-list-item.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAgBtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,YAAY,EAAE,KAK1B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC"}
|
package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { SidebarProvider, SidebarMenu } from '../../ui/sidebar';
|
|
3
|
+
import { FeatureListItem } from './feature-list-item';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Composed/FeatureListItem',
|
|
6
|
+
component: FeatureListItem,
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: 'padded',
|
|
9
|
+
},
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
decorators: [
|
|
12
|
+
(Story) => (_jsx(SidebarProvider, { children: _jsx(SidebarMenu, { children: _jsx(Story, {}) }) })),
|
|
13
|
+
],
|
|
14
|
+
};
|
|
15
|
+
export default meta;
|
|
16
|
+
export const ActionNeeded = {
|
|
17
|
+
args: {
|
|
18
|
+
name: 'Auth Module',
|
|
19
|
+
status: 'action-needed',
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export const InProgress = {
|
|
23
|
+
args: {
|
|
24
|
+
name: 'Payment Integration',
|
|
25
|
+
status: 'in-progress',
|
|
26
|
+
startedAt: Date.now() - 330_000,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
export const Done = {
|
|
30
|
+
args: {
|
|
31
|
+
name: 'User Dashboard',
|
|
32
|
+
status: 'done',
|
|
33
|
+
duration: '2h',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
export const WithClickHandler = {
|
|
37
|
+
args: {
|
|
38
|
+
name: 'API Gateway',
|
|
39
|
+
status: 'action-needed',
|
|
40
|
+
onClick: () => alert('Clicked!'),
|
|
41
|
+
},
|
|
42
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-list-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FeatureListItem } from './feature-list-item';
|
package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FeatureStatus } from '../../common/feature-status-config';
|
|
2
|
+
export interface FeatureStatusBadgesProps {
|
|
3
|
+
/** Count of features per status. */
|
|
4
|
+
counts: Record<FeatureStatus, number>;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function FeatureStatusBadges({ counts, className }: FeatureStatusBadgesProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
//# sourceMappingURL=feature-status-badges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-status-badges.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-status-badges/feature-status-badges.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,2CAA2C,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,wBAAwB,kDAkClF"}
|
package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip';
|
|
3
|
+
import { cn } from '../../../lib/utils';
|
|
4
|
+
import { featureStatusConfig, featureStatusOrder, } from '../../common/feature-status-config';
|
|
5
|
+
export function FeatureStatusBadges({ counts, className }) {
|
|
6
|
+
const visibleStatuses = featureStatusOrder.filter((s) => counts[s] > 0);
|
|
7
|
+
if (visibleStatuses.length === 0)
|
|
8
|
+
return null;
|
|
9
|
+
return (_jsx("div", { "data-testid": "feature-status-badges", className: cn('flex flex-col items-center gap-1.5 py-1', className), children: visibleStatuses.map((status) => {
|
|
10
|
+
const { icon: Icon, iconClass, bgClass, label } = featureStatusConfig[status];
|
|
11
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { "data-testid": `feature-status-badge-${status}`, className: cn('flex size-8 items-center justify-center gap-0.5 rounded-md', bgClass), children: [_jsx(Icon, { className: cn('size-3.5 shrink-0', iconClass) }), _jsx("span", { className: "text-[0.6rem] font-semibold tabular-nums", children: counts[status] })] }) }), _jsxs(TooltipContent, { side: "right", children: [label, ": ", counts[status]] })] }, status));
|
|
12
|
+
}) }));
|
|
13
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { FeatureStatusBadges } from './feature-status-badges';
|
|
3
|
+
declare const meta: Meta<typeof FeatureStatusBadges>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const AllStatuses: Story;
|
|
7
|
+
export declare const ActionNeededOnly: Story;
|
|
8
|
+
export declare const InProgressOnly: Story;
|
|
9
|
+
export declare const DoneOnly: Story;
|
|
10
|
+
export declare const LargeCounts: Story;
|
|
11
|
+
export declare const Empty: Story;
|
|
12
|
+
//# sourceMappingURL=feature-status-badges.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-status-badges.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAgB1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAI9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAI5B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAItB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { SidebarProvider } from '../../ui/sidebar';
|
|
3
|
+
import { FeatureStatusBadges } from './feature-status-badges';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Composed/FeatureStatusBadges',
|
|
6
|
+
component: FeatureStatusBadges,
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: 'centered',
|
|
9
|
+
},
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
decorators: [
|
|
12
|
+
(Story) => (_jsx(SidebarProvider, { defaultOpen: false, children: _jsx("div", { className: "bg-sidebar flex w-12 justify-center rounded-md p-2", children: _jsx(Story, {}) }) })),
|
|
13
|
+
],
|
|
14
|
+
};
|
|
15
|
+
export default meta;
|
|
16
|
+
export const AllStatuses = {
|
|
17
|
+
args: {
|
|
18
|
+
counts: { 'action-needed': 2, 'in-progress': 3, done: 5 },
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export const ActionNeededOnly = {
|
|
22
|
+
args: {
|
|
23
|
+
counts: { 'action-needed': 4, 'in-progress': 0, done: 0 },
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
export const InProgressOnly = {
|
|
27
|
+
args: {
|
|
28
|
+
counts: { 'action-needed': 0, 'in-progress': 2, done: 0 },
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
export const DoneOnly = {
|
|
32
|
+
args: {
|
|
33
|
+
counts: { 'action-needed': 0, 'in-progress': 0, done: 7 },
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
export const LargeCounts = {
|
|
37
|
+
args: {
|
|
38
|
+
counts: { 'action-needed': 12, 'in-progress': 99, done: 150 },
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
export const Empty = {
|
|
42
|
+
args: {
|
|
43
|
+
counts: { 'action-needed': 0, 'in-progress': 0, done: 0 },
|
|
44
|
+
},
|
|
45
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-status-badges/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FeatureStatusBadges } from './feature-status-badges';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LucideIcon } from 'lucide-react';
|
|
2
|
+
export type FeatureStatus = 'action-needed' | 'in-progress' | 'done';
|
|
3
|
+
export interface FeatureStatusConfig {
|
|
4
|
+
icon: LucideIcon;
|
|
5
|
+
iconClass: string;
|
|
6
|
+
bgClass: string;
|
|
7
|
+
label: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const featureStatusConfig: Record<FeatureStatus, FeatureStatusConfig>;
|
|
10
|
+
export declare const featureStatusOrder: FeatureStatus[];
|
|
11
|
+
//# sourceMappingURL=feature-status-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-status-config.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/common/feature-status-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,aAAa,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAmB1E,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAA6C,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CircleAlert, Loader2, CircleCheck } from 'lucide-react';
|
|
2
|
+
export const featureStatusConfig = {
|
|
3
|
+
'action-needed': {
|
|
4
|
+
icon: CircleAlert,
|
|
5
|
+
iconClass: 'text-amber-500',
|
|
6
|
+
bgClass: 'bg-amber-500/10',
|
|
7
|
+
label: 'Action Needed',
|
|
8
|
+
},
|
|
9
|
+
'in-progress': {
|
|
10
|
+
icon: Loader2,
|
|
11
|
+
iconClass: 'text-blue-500 animate-spin',
|
|
12
|
+
bgClass: 'bg-blue-500/10',
|
|
13
|
+
label: 'In Progress',
|
|
14
|
+
},
|
|
15
|
+
done: {
|
|
16
|
+
icon: CircleCheck,
|
|
17
|
+
iconClass: 'text-emerald-500',
|
|
18
|
+
bgClass: 'bg-emerald-500/10',
|
|
19
|
+
label: 'Done',
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export const featureStatusOrder = ['action-needed', 'in-progress', 'done'];
|
package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface FeatureStatusGroupProps {
|
|
3
|
+
label: string;
|
|
4
|
+
count: number;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare function FeatureStatusGroup({ label, count, children }: FeatureStatusGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=feature-status-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-status-group.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-status-group/feature-status-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,uBAAuB,2CAkBrF"}
|
package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SidebarGroup, SidebarGroupLabel, SidebarGroupContent, SidebarMenu, } from '../../ui/sidebar';
|
|
3
|
+
export function FeatureStatusGroup({ label, count, children }) {
|
|
4
|
+
return (_jsxs(SidebarGroup, { "data-testid": "feature-status-group", className: "px-2 py-1", children: [_jsxs(SidebarGroupLabel, { className: "text-muted-foreground h-6 px-2 text-[0.65rem] font-semibold tracking-wider uppercase", children: [label, _jsx("span", { "aria-label": `${count} items`, className: "bg-sidebar-accent text-sidebar-accent-foreground ml-1.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums", role: "img", children: count })] }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { className: "gap-0.5", children: children }) })] }));
|
|
5
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { FeatureStatusGroup } from './feature-status-group';
|
|
3
|
+
declare const meta: Meta<typeof FeatureStatusGroup>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const InProgress: Story;
|
|
7
|
+
export declare const Done: Story;
|
|
8
|
+
export declare const ActionNeeded: Story;
|
|
9
|
+
//# sourceMappingURL=feature-status-group.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-status-group.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-status-group/feature-status-group.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAgBzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAYlB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAW1B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SidebarProvider } from '../../ui/sidebar';
|
|
3
|
+
import { FeatureListItem } from '../../common/feature-list-item';
|
|
4
|
+
import { FeatureStatusGroup } from './feature-status-group';
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Composed/FeatureStatusGroup',
|
|
7
|
+
component: FeatureStatusGroup,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'padded',
|
|
10
|
+
},
|
|
11
|
+
tags: ['autodocs'],
|
|
12
|
+
decorators: [
|
|
13
|
+
(Story) => (_jsx(SidebarProvider, { children: _jsx("div", { className: "w-64", children: _jsx(Story, {}) }) })),
|
|
14
|
+
],
|
|
15
|
+
};
|
|
16
|
+
export default meta;
|
|
17
|
+
export const InProgress = {
|
|
18
|
+
args: {
|
|
19
|
+
label: 'In Progress',
|
|
20
|
+
count: 2,
|
|
21
|
+
children: (_jsxs(_Fragment, { children: [_jsx(FeatureListItem, { name: "Dashboard", status: "in-progress", startedAt: Date.now() - 330_000 }), _jsx(FeatureListItem, { name: "API Gateway", status: "in-progress", startedAt: Date.now() - 60_000 })] })),
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
export const Done = {
|
|
25
|
+
args: {
|
|
26
|
+
label: 'Done',
|
|
27
|
+
count: 3,
|
|
28
|
+
children: (_jsxs(_Fragment, { children: [_jsx(FeatureListItem, { name: "Settings Page", status: "done", duration: "2h" }), _jsx(FeatureListItem, { name: "User Profile", status: "done", duration: "1h" }), _jsx(FeatureListItem, { name: "Auth Module", status: "done", duration: "30m" })] })),
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
export const ActionNeeded = {
|
|
32
|
+
args: {
|
|
33
|
+
label: 'Action Needed',
|
|
34
|
+
count: 2,
|
|
35
|
+
children: (_jsxs(_Fragment, { children: [_jsx(FeatureListItem, { name: "Auth Module", status: "action-needed" }), _jsx(FeatureListItem, { name: "Payment Flow", status: "action-needed" })] })),
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-status-group/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
|