@shepai/cli 1.59.0 → 1.61.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/src/presentation/web/app/skills/page.d.ts +2 -0
- package/dist/src/presentation/web/app/skills/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/skills/page.js +11 -0
- package/dist/src/presentation/web/components/common/action-button/action-button.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/action-button/action-button.js +7 -1
- package/dist/src/presentation/web/components/common/action-button/action-button.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/common/action-button/action-button.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/action-button/action-button.stories.js +1 -1
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +10 -1
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts +20 -0
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js +68 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +21 -2
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +13 -2
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +16 -3
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -1
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.js +14 -1
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.js +2 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.js +4 -1
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.js +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +14 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -1
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.js +13 -0
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.js +2 -0
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -2
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +7 -13
- package/dist/src/presentation/web/components/features/skills/category-filter.d.ts +8 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.js +12 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/category-filter.stories.js +36 -0
- package/dist/src/presentation/web/components/features/skills/index.d.ts +6 -0
- package/dist/src/presentation/web/components/features/skills/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/index.js +5 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.d.ts +7 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.js +12 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-card.stories.js +88 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts +7 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.js +13 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.stories.js +71 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.d.ts +7 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.js +21 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skill-list.stories.js +124 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts +6 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.js +52 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/skills/skills-page-client.stories.js +186 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +3 -2
- package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-notifications.js +18 -18
- package/dist/src/presentation/web/hooks/use-sound-action.d.ts +100 -0
- package/dist/src/presentation/web/hooks/use-sound-action.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-sound-action.js +42 -0
- package/dist/src/presentation/web/hooks/use-sound-action.stories.d.ts +6 -0
- package/dist/src/presentation/web/hooks/use-sound-action.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-sound-action.stories.js +61 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts +10 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/feature-flags.js +12 -0
- package/dist/src/presentation/web/lib/skills.d.ts +30 -0
- package/dist/src/presentation/web/lib/skills.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/skills.js +137 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +4 -4
- 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/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/routes-manifest.json +6 -0
- package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- 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/api/tools/[id]/install/route.js +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/server/app/page/build-manifest.json +2 -2
- package/web/.next/server/app/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/page.js +1 -1
- 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/skills/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/skills/page/build-manifest.json +17 -0
- package/web/.next/server/app/skills/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/skills/page/server-reference-manifest.json +20 -0
- package/web/.next/server/app/skills/page.js +16 -0
- package/web/.next/server/app/skills/page.js.map +5 -0
- package/web/.next/server/app/skills/page.js.nft.json +1 -0
- package/web/.next/server/app/skills/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/tools/page/build-manifest.json +2 -2
- package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +2 -2
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- 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-paths-manifest.json +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js → [root-of-the-server]__e926de65._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js → [root-of-the-server]__b6839c3f._.js} +3 -3
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js.map → [root-of-the-server]__b6839c3f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
- package/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
- package/web/.next/server/chunks/ssr/_380c6567._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
- package/web/.next/server/chunks/ssr/_44cce4e0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_9915d2a7._.js +3 -0
- package/web/.next/server/chunks/ssr/_9915d2a7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a64b7b24._.js +3 -0
- package/web/.next/server/chunks/ssr/{_e242b954._.js.map → _a64b7b24._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_d3711354._.js +6 -0
- package/web/.next/server/chunks/ssr/_d3711354._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e7a4b0e4._.js +3 -0
- package/web/.next/server/chunks/ssr/_e7a4b0e4._.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js → server/chunks/ssr/node_modules__pnpm_fe355030._.js} +2 -2
- package/web/.next/server/chunks/ssr/node_modules__pnpm_fe355030._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +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 +22 -15
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +4 -4
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/app-paths-manifest.json +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +17 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/next-font-manifest.json +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/react-loadable-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +20 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +16 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.map +5 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +2 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js → [root-of-the-server]__e926de65._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2395adc6._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__87fda958._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__86c7bba5._.js → [root-of-the-server]__b6839c3f._.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__ee7cffe1._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9915d2a7._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a64b7b24._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_d3711354._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e7a4b0e4._.js +3 -0
- package/web/.next/{server/chunks/ssr/node_modules__pnpm_d26a7485._.js → standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_fe355030._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +22 -15
- package/web/.next/standalone/src/presentation/web/app/skills/page.tsx +12 -0
- package/web/.next/standalone/src/presentation/web/components/common/action-button/action-button.stories.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/common/action-button/action-button.tsx +9 -1
- package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.tsx +82 -0
- package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx +16 -2
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +27 -3
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +14 -2
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +17 -4
- package/web/.next/standalone/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.tsx +2 -0
- package/web/.next/standalone/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.tsx +14 -1
- package/web/.next/standalone/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.tsx +1 -0
- package/web/.next/standalone/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.tsx +6 -1
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +14 -1
- package/web/.next/standalone/src/presentation/web/components/common/theme-toggle/theme-toggle.stories.tsx +2 -0
- package/web/.next/standalone/src/presentation/web/components/common/theme-toggle/theme-toggle.tsx +14 -0
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +2 -2
- package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +7 -12
- package/web/.next/standalone/src/presentation/web/components/features/skills/category-filter.stories.tsx +57 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/category-filter.tsx +36 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/index.ts +5 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-card.stories.tsx +105 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-card.tsx +48 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-detail-drawer.stories.tsx +96 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-detail-drawer.tsx +100 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-list.stories.tsx +139 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skill-list.tsx +48 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skills-page-client.stories.tsx +199 -0
- package/web/.next/standalone/src/presentation/web/components/features/skills/skills-page-client.tsx +112 -0
- package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +10 -1
- package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +20 -19
- package/web/.next/standalone/src/presentation/web/hooks/use-sound-action.stories.tsx +107 -0
- package/web/.next/standalone/src/presentation/web/hooks/use-sound-action.ts +53 -0
- package/web/.next/standalone/src/presentation/web/lib/feature-flags.ts +14 -0
- package/web/.next/standalone/src/presentation/web/lib/skills.ts +188 -0
- package/web/.next/standalone/src/presentation/web/package.json +2 -0
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/09d898be63c54f20.js +1 -0
- package/web/.next/static/chunks/13664c029245afc8.js +1 -0
- package/web/.next/static/chunks/25f42652257ff43d.js +1 -0
- package/web/.next/static/chunks/2934854f0378f815.js +1 -0
- package/web/.next/static/chunks/2960a70537e4fd12.js +10 -0
- package/web/.next/static/chunks/45f510f84c7c417d.css +2 -0
- package/web/.next/static/chunks/79718b1f5713fdc0.js +1 -0
- package/web/.next/static/chunks/acdb8af5a21f1ae9.js +1 -0
- package/web/.next/static/chunks/{3d4dcf0be654a331.js → cb1b27e4a21415d3.js} +2 -2
- package/web/.next/static/chunks/d4379644a6145352.js +1 -0
- package/web/.next/static/chunks/{turbopack-6a11f2f1634ff6e0.js → turbopack-eb24b869babb34b4.js} +2 -2
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/link.d.ts +1 -0
- package/web/.next/types/routes.d.ts +2 -1
- package/web/.next/types/validator.ts +9 -0
- package/web/package.json +2 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bced1185._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bced1185._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_027596cf._.js +0 -6
- package/web/.next/server/chunks/ssr/_027596cf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e242b954._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__bced1185._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d21f0894._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_027596cf._.js +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e242b954._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +0 -3
- package/web/.next/static/chunks/0cd7c513169faee3.js +0 -1
- package/web/.next/static/chunks/4f7d89c9e09aed99.js +0 -10
- package/web/.next/static/chunks/67459433cc866344.js +0 -1
- package/web/.next/static/chunks/6d33cb9af6245c98.js +0 -1
- package/web/.next/static/chunks/a9c2b889c8749a94.js +0 -1
- package/web/.next/static/chunks/b511c65023ec1889.css +0 -2
- package/web/.next/static/chunks/cda11a2491d519fc.js +0 -1
- package/web/.next/static/chunks/d85b95e893db08bc.js +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__bb619083._.js.map → [root-of-the-server]__e926de65._.js.map} +0 -0
- /package/web/.next/static/{xjc1tfvwTdK1Xv5Id2oaO → _DBWexyU1QkK02q15qod2}/_buildManifest.js +0 -0
- /package/web/.next/static/{xjc1tfvwTdK1Xv5Id2oaO → _DBWexyU1QkK02q15qod2}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{xjc1tfvwTdK1Xv5Id2oaO → _DBWexyU1QkK02q15qod2}/_ssgManifest.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/
|
|
1
|
+
<!DOCTYPE html><!--_DBWexyU1QkK02q15qod2--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/acdb8af5a21f1ae9.js"/><script src="/_next/static/chunks/07f00e2e73d322d2.js" async=""></script><script src="/_next/static/chunks/1887af4ad3781531.js" async=""></script><script src="/_next/static/chunks/cfe4dc9904fcfddb.js" async=""></script><script src="/_next/static/chunks/turbopack-eb24b869babb34b4.js" async=""></script><script src="/_next/static/chunks/ab02eec995295bef.js" async=""></script><script src="/_next/static/chunks/fe70e73feb07bcfd.js" async=""></script><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/acdb8af5a21f1ae9.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[40799,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n3:I[73006,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n4:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"ViewportBoundary\"]\n9:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"MetadataBoundary\"]\nb:I[42726,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"_DBWexyU1QkK02q15qod2\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/ab02eec995295bef.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/fe70e73feb07bcfd.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {\n \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {\n \"00f46b544814f14a9bd450e71019c7325620386871\": {\n \"workers\": {\n \"app/_not-found/page\": {\n \"moduleId\": 66973,\n \"async\": false,\n \"exportedName\": \"pickFolder\",\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\"\n },\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"pickFolder\",\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\"\n },\n \"app/skills/page\": {\n \"moduleId\": 41115,\n \"async\": false,\n \"exportedName\": \"pickFolder\",\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\"\n },\n \"app/tools/page\": {\n \"moduleId\": 19036,\n \"async\": false,\n \"exportedName\": \"pickFolder\",\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\"\n },\n \"app/version/page\": {\n \"moduleId\": 86139,\n \"async\": false,\n \"exportedName\": \"pickFolder\",\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\"\n }\n },\n \"layer\": {\n \"app/_not-found/page\": \"action-browser\",\n \"app/page\": \"action-browser\",\n \"app/skills/page\": \"action-browser\",\n \"app/tools/page\": \"action-browser\",\n \"app/version/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/pick-folder.ts\",\n \"exportedName\": \"pickFolder\"\n },\n \"606a6cb2da71de26e494b33854ed0899ebd5cbe442\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"approveFeature\",\n \"filename\": \"src/presentation/web/app/actions/approve-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/approve-feature.ts\",\n \"exportedName\": \"approveFeature\"\n },\n \"60c0f37b7c0431e729d2cd8b7bd4f976e8e6d4241a\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"rejectFeature\",\n \"filename\": \"src/presentation/web/app/actions/reject-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/reject-feature.ts\",\n \"exportedName\": \"rejectFeature\"\n },\n \"40074e92e9c8b31dafb9c2b3c2fccd414542794fb0\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"getFeatureArtifact\",\n \"filename\": \"src/presentation/web/app/actions/get-feature-artifact.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-feature-artifact.ts\",\n \"exportedName\": \"getFeatureArtifact\"\n },\n \"4053a5b1695c8ddbecf95155e159666e4d3a327737\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"getResearchArtifact\",\n \"filename\": \"src/presentation/web/app/actions/get-research-artifact.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-research-artifact.ts\",\n \"exportedName\": \"getResearchArtifact\"\n },\n \"005aedb87dd5ed000b495650e3a4c0f4171e53beef\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"getWorkflowDefaults\",\n \"filename\": \"src/presentation/web/app/actions/get-workflow-defaults.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-workflow-defaults.ts\",\n \"exportedName\": \"getWorkflowDefaults\"\n },\n \"40802922d3d44b0d0627d4e116ff40171192039d2c\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"getMergeReviewData\",\n \"filename\": \"src/presentation/web/app/actions/get-merge-review-data.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/get-merge-review-data.ts\",\n \"exportedName\": \"getMergeReviewData\"\n },\n \"404bb587718376f52df6e970b32ef8fc3ee2bd727d\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"openIde\",\n \"filename\": \"src/presentation/web/app/actions/open-ide.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-ide.ts\",\n \"exportedName\": \"openIde\"\n },\n \"40e77cba448943b31cb783ca5283f6abba0ea21402\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"openShell\",\n \"filename\": \"src/presentation/web/app/actions/open-shell.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-shell.ts\",\n \"exportedName\": \"openShell\"\n },\n \"4021d8c65b803d424df8fd45cf641ee6ab873213b7\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"openFolder\",\n \"filename\": \"src/presentation/web/app/actions/open-folder.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/open-folder.ts\",\n \"exportedName\": \"openFolder\"\n },\n \"408f0145660d7a16d3638d5c1b3f1fe017ea2a341a\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"createFeature\",\n \"filename\": \"src/presentation/web/app/actions/create-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/create-feature.ts\",\n \"exportedName\": \"createFeature\"\n },\n \"40783b6aa22097e9550fdbc925c54c8b7380230a5c\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"deleteFeature\",\n \"filename\": \"src/presentation/web/app/actions/delete-feature.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/delete-feature.ts\",\n \"exportedName\": \"deleteFeature\"\n },\n \"4068b748dc0ba5097d848c1d0753fd70d49faa713f\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"addRepository\",\n \"filename\": \"src/presentation/web/app/actions/add-repository.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/add-repository.ts\",\n \"exportedName\": \"addRepository\"\n },\n \"403777fed14eec7447f0e66081280d320ac4eded92\": {\n \"workers\": {\n \"app/page\": {\n \"moduleId\": 16555,\n \"async\": false,\n \"exportedName\": \"deleteRepository\",\n \"filename\": \"src/presentation/web/app/actions/delete-repository.ts\"\n }\n },\n \"layer\": {\n \"app/page\": \"action-browser\"\n },\n \"filename\": \"src/presentation/web/app/actions/delete-repository.ts\",\n \"exportedName\": \"deleteRepository\"\n }\n },\n \"edge\": {},\n \"encryptionKey\": \"oDbEBHfy/qkJRG2vVjper+eLy93/oJMo5pkcaRXsWVo=\"\n}"
|
package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"node": {
|
|
3
|
-
"
|
|
3
|
+
"00f46b544814f14a9bd450e71019c7325620386871": {
|
|
4
4
|
"workers": {
|
|
5
5
|
"app/_not-found/page": {
|
|
6
6
|
"moduleId": 66973,
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
"exportedName": "pickFolder",
|
|
15
15
|
"filename": "src/presentation/web/app/actions/pick-folder.ts"
|
|
16
16
|
},
|
|
17
|
+
"app/skills/page": {
|
|
18
|
+
"moduleId": 41115,
|
|
19
|
+
"async": false,
|
|
20
|
+
"exportedName": "pickFolder",
|
|
21
|
+
"filename": "src/presentation/web/app/actions/pick-folder.ts"
|
|
22
|
+
},
|
|
17
23
|
"app/tools/page": {
|
|
18
24
|
"moduleId": 19036,
|
|
19
25
|
"async": false,
|
|
@@ -30,13 +36,14 @@
|
|
|
30
36
|
"layer": {
|
|
31
37
|
"app/_not-found/page": "action-browser",
|
|
32
38
|
"app/page": "action-browser",
|
|
39
|
+
"app/skills/page": "action-browser",
|
|
33
40
|
"app/tools/page": "action-browser",
|
|
34
41
|
"app/version/page": "action-browser"
|
|
35
42
|
},
|
|
36
43
|
"filename": "src/presentation/web/app/actions/pick-folder.ts",
|
|
37
44
|
"exportedName": "pickFolder"
|
|
38
45
|
},
|
|
39
|
-
"
|
|
46
|
+
"606a6cb2da71de26e494b33854ed0899ebd5cbe442": {
|
|
40
47
|
"workers": {
|
|
41
48
|
"app/page": {
|
|
42
49
|
"moduleId": 16555,
|
|
@@ -51,7 +58,7 @@
|
|
|
51
58
|
"filename": "src/presentation/web/app/actions/approve-feature.ts",
|
|
52
59
|
"exportedName": "approveFeature"
|
|
53
60
|
},
|
|
54
|
-
"
|
|
61
|
+
"60c0f37b7c0431e729d2cd8b7bd4f976e8e6d4241a": {
|
|
55
62
|
"workers": {
|
|
56
63
|
"app/page": {
|
|
57
64
|
"moduleId": 16555,
|
|
@@ -66,7 +73,7 @@
|
|
|
66
73
|
"filename": "src/presentation/web/app/actions/reject-feature.ts",
|
|
67
74
|
"exportedName": "rejectFeature"
|
|
68
75
|
},
|
|
69
|
-
"
|
|
76
|
+
"40074e92e9c8b31dafb9c2b3c2fccd414542794fb0": {
|
|
70
77
|
"workers": {
|
|
71
78
|
"app/page": {
|
|
72
79
|
"moduleId": 16555,
|
|
@@ -81,7 +88,7 @@
|
|
|
81
88
|
"filename": "src/presentation/web/app/actions/get-feature-artifact.ts",
|
|
82
89
|
"exportedName": "getFeatureArtifact"
|
|
83
90
|
},
|
|
84
|
-
"
|
|
91
|
+
"4053a5b1695c8ddbecf95155e159666e4d3a327737": {
|
|
85
92
|
"workers": {
|
|
86
93
|
"app/page": {
|
|
87
94
|
"moduleId": 16555,
|
|
@@ -96,7 +103,7 @@
|
|
|
96
103
|
"filename": "src/presentation/web/app/actions/get-research-artifact.ts",
|
|
97
104
|
"exportedName": "getResearchArtifact"
|
|
98
105
|
},
|
|
99
|
-
"
|
|
106
|
+
"005aedb87dd5ed000b495650e3a4c0f4171e53beef": {
|
|
100
107
|
"workers": {
|
|
101
108
|
"app/page": {
|
|
102
109
|
"moduleId": 16555,
|
|
@@ -111,7 +118,7 @@
|
|
|
111
118
|
"filename": "src/presentation/web/app/actions/get-workflow-defaults.ts",
|
|
112
119
|
"exportedName": "getWorkflowDefaults"
|
|
113
120
|
},
|
|
114
|
-
"
|
|
121
|
+
"40802922d3d44b0d0627d4e116ff40171192039d2c": {
|
|
115
122
|
"workers": {
|
|
116
123
|
"app/page": {
|
|
117
124
|
"moduleId": 16555,
|
|
@@ -126,7 +133,7 @@
|
|
|
126
133
|
"filename": "src/presentation/web/app/actions/get-merge-review-data.ts",
|
|
127
134
|
"exportedName": "getMergeReviewData"
|
|
128
135
|
},
|
|
129
|
-
"
|
|
136
|
+
"404bb587718376f52df6e970b32ef8fc3ee2bd727d": {
|
|
130
137
|
"workers": {
|
|
131
138
|
"app/page": {
|
|
132
139
|
"moduleId": 16555,
|
|
@@ -141,7 +148,7 @@
|
|
|
141
148
|
"filename": "src/presentation/web/app/actions/open-ide.ts",
|
|
142
149
|
"exportedName": "openIde"
|
|
143
150
|
},
|
|
144
|
-
"
|
|
151
|
+
"40e77cba448943b31cb783ca5283f6abba0ea21402": {
|
|
145
152
|
"workers": {
|
|
146
153
|
"app/page": {
|
|
147
154
|
"moduleId": 16555,
|
|
@@ -156,7 +163,7 @@
|
|
|
156
163
|
"filename": "src/presentation/web/app/actions/open-shell.ts",
|
|
157
164
|
"exportedName": "openShell"
|
|
158
165
|
},
|
|
159
|
-
"
|
|
166
|
+
"4021d8c65b803d424df8fd45cf641ee6ab873213b7": {
|
|
160
167
|
"workers": {
|
|
161
168
|
"app/page": {
|
|
162
169
|
"moduleId": 16555,
|
|
@@ -171,7 +178,7 @@
|
|
|
171
178
|
"filename": "src/presentation/web/app/actions/open-folder.ts",
|
|
172
179
|
"exportedName": "openFolder"
|
|
173
180
|
},
|
|
174
|
-
"
|
|
181
|
+
"408f0145660d7a16d3638d5c1b3f1fe017ea2a341a": {
|
|
175
182
|
"workers": {
|
|
176
183
|
"app/page": {
|
|
177
184
|
"moduleId": 16555,
|
|
@@ -186,7 +193,7 @@
|
|
|
186
193
|
"filename": "src/presentation/web/app/actions/create-feature.ts",
|
|
187
194
|
"exportedName": "createFeature"
|
|
188
195
|
},
|
|
189
|
-
"
|
|
196
|
+
"40783b6aa22097e9550fdbc925c54c8b7380230a5c": {
|
|
190
197
|
"workers": {
|
|
191
198
|
"app/page": {
|
|
192
199
|
"moduleId": 16555,
|
|
@@ -201,7 +208,7 @@
|
|
|
201
208
|
"filename": "src/presentation/web/app/actions/delete-feature.ts",
|
|
202
209
|
"exportedName": "deleteFeature"
|
|
203
210
|
},
|
|
204
|
-
"
|
|
211
|
+
"4068b748dc0ba5097d848c1d0753fd70d49faa713f": {
|
|
205
212
|
"workers": {
|
|
206
213
|
"app/page": {
|
|
207
214
|
"moduleId": 16555,
|
|
@@ -216,7 +223,7 @@
|
|
|
216
223
|
"filename": "src/presentation/web/app/actions/add-repository.ts",
|
|
217
224
|
"exportedName": "addRepository"
|
|
218
225
|
},
|
|
219
|
-
"
|
|
226
|
+
"403777fed14eec7447f0e66081280d320ac4eded92": {
|
|
220
227
|
"workers": {
|
|
221
228
|
"app/page": {
|
|
222
229
|
"moduleId": 16555,
|
|
@@ -233,5 +240,5 @@
|
|
|
233
240
|
}
|
|
234
241
|
},
|
|
235
242
|
"edge": {},
|
|
236
|
-
"encryptionKey": "/
|
|
243
|
+
"encryptionKey": "oDbEBHfy/qkJRG2vVjper+eLy93/oJMo5pkcaRXsWVo="
|
|
237
244
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { notFound } from 'next/navigation';
|
|
2
|
+
import { getSkills } from '@/lib/skills';
|
|
3
|
+
import { SkillsPageClient } from '@/components/features/skills';
|
|
4
|
+
import { featureFlags } from '@/lib/feature-flags';
|
|
5
|
+
|
|
6
|
+
export default async function SkillsPage() {
|
|
7
|
+
if (!featureFlags.skills) notFound();
|
|
8
|
+
|
|
9
|
+
const skills = await getSkills();
|
|
10
|
+
|
|
11
|
+
return <SkillsPageClient skills={skills} />;
|
|
12
|
+
}
|
|
@@ -24,7 +24,7 @@ function noop() {
|
|
|
24
24
|
// intentional no-op for stories
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
/** Default labeled button with outline variant. */
|
|
27
|
+
/** Default labeled button with outline variant. Plays "click" sound on press. */
|
|
28
28
|
export const Default: Story = {
|
|
29
29
|
args: {
|
|
30
30
|
onClick: noop,
|
package/web/.next/standalone/src/presentation/web/components/common/action-button/action-button.tsx
CHANGED
|
@@ -4,6 +4,7 @@ import type { LucideIcon } from 'lucide-react';
|
|
|
4
4
|
import { Loader2, CircleAlert } from 'lucide-react';
|
|
5
5
|
import { cn } from '@/lib/utils';
|
|
6
6
|
import { Button } from '@/components/ui/button';
|
|
7
|
+
import { useSoundAction } from '@/hooks/use-sound-action';
|
|
7
8
|
|
|
8
9
|
export interface ActionButtonProps {
|
|
9
10
|
label: string;
|
|
@@ -29,13 +30,20 @@ export function ActionButton({
|
|
|
29
30
|
variant = 'outline',
|
|
30
31
|
size = 'sm',
|
|
31
32
|
}: ActionButtonProps) {
|
|
33
|
+
const clickSound = useSoundAction('click');
|
|
34
|
+
|
|
35
|
+
const handleClick = () => {
|
|
36
|
+
clickSound.play();
|
|
37
|
+
onClick();
|
|
38
|
+
};
|
|
39
|
+
|
|
32
40
|
return (
|
|
33
41
|
<Button
|
|
34
42
|
variant={variant}
|
|
35
43
|
size={size}
|
|
36
44
|
aria-label={label}
|
|
37
45
|
disabled={loading}
|
|
38
|
-
onClick={
|
|
46
|
+
onClick={handleClick}
|
|
39
47
|
className={cn(
|
|
40
48
|
'gap-1.5',
|
|
41
49
|
error && 'text-destructive hover:text-destructive',
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { fn } from '@storybook/test';
|
|
3
|
+
import { Check } from 'lucide-react';
|
|
4
|
+
import { DrawerActionBar } from './drawer-action-bar';
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof DrawerActionBar> = {
|
|
7
|
+
title: 'Composed/DrawerActionBar',
|
|
8
|
+
component: DrawerActionBar,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: 'centered',
|
|
12
|
+
},
|
|
13
|
+
args: {
|
|
14
|
+
onApprove: fn().mockName('onApprove'),
|
|
15
|
+
approveLabel: 'Approve',
|
|
16
|
+
},
|
|
17
|
+
decorators: [
|
|
18
|
+
(Story) => (
|
|
19
|
+
<div className="w-[400px] rounded-md border">
|
|
20
|
+
<Story />
|
|
21
|
+
</div>
|
|
22
|
+
),
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export default meta;
|
|
27
|
+
type Story = StoryObj<typeof DrawerActionBar>;
|
|
28
|
+
|
|
29
|
+
/** Default — approve button only. Plays "approve" sound on click. */
|
|
30
|
+
export const Default: Story = {};
|
|
31
|
+
|
|
32
|
+
/** With approve icon. */
|
|
33
|
+
export const WithIcon: Story = {
|
|
34
|
+
args: {
|
|
35
|
+
approveLabel: 'Approve PRD',
|
|
36
|
+
approveIcon: <Check className="mr-1.5 h-4 w-4" />,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/** With reject button. Plays "reject" sound on reject click, "approve" on approve. */
|
|
41
|
+
export const WithReject: Story = {
|
|
42
|
+
args: {
|
|
43
|
+
onReject: fn().mockName('onReject'),
|
|
44
|
+
approveLabel: 'Approve',
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/** Processing state — buttons disabled, no sounds play. */
|
|
49
|
+
export const Processing: Story = {
|
|
50
|
+
args: {
|
|
51
|
+
onReject: fn().mockName('onReject'),
|
|
52
|
+
approveLabel: 'Approve',
|
|
53
|
+
isProcessing: true,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** Rejecting state — buttons disabled. */
|
|
58
|
+
export const Rejecting: Story = {
|
|
59
|
+
args: {
|
|
60
|
+
onReject: fn().mockName('onReject'),
|
|
61
|
+
approveLabel: 'Approve',
|
|
62
|
+
isRejecting: true,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/** With revision input and reject button. */
|
|
67
|
+
export const WithRevisionInput: Story = {
|
|
68
|
+
args: {
|
|
69
|
+
onReject: fn().mockName('onReject'),
|
|
70
|
+
approveLabel: 'Approve',
|
|
71
|
+
revisionPlaceholder: 'Ask AI to revise the plan...',
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/** Custom reject dialog title. */
|
|
76
|
+
export const CustomRejectTitle: Story = {
|
|
77
|
+
args: {
|
|
78
|
+
onReject: fn().mockName('onReject'),
|
|
79
|
+
approveLabel: 'Approve Plan',
|
|
80
|
+
rejectDialogTitle: 'Reject Plan',
|
|
81
|
+
},
|
|
82
|
+
};
|
|
@@ -5,6 +5,7 @@ import { X } from 'lucide-react';
|
|
|
5
5
|
import { Button } from '@/components/ui/button';
|
|
6
6
|
import { RejectFeedbackDialog } from '@/components/common/reject-feedback-dialog';
|
|
7
7
|
import { DrawerRevisionInput } from '@/components/common/drawer-revision-input';
|
|
8
|
+
import { useSoundAction } from '@/hooks/use-sound-action';
|
|
8
9
|
import type { DrawerActionBarProps } from './drawer-action-bar-config';
|
|
9
10
|
|
|
10
11
|
export function DrawerActionBar({
|
|
@@ -20,6 +21,8 @@ export function DrawerActionBar({
|
|
|
20
21
|
children,
|
|
21
22
|
}: DrawerActionBarProps) {
|
|
22
23
|
const [rejectDialogOpen, setRejectDialogOpen] = useState(false);
|
|
24
|
+
const approveSound = useSoundAction('approve');
|
|
25
|
+
const rejectSound = useSoundAction('reject');
|
|
23
26
|
const disabled = isProcessing || isRejecting;
|
|
24
27
|
|
|
25
28
|
return (
|
|
@@ -40,7 +43,10 @@ export function DrawerActionBar({
|
|
|
40
43
|
variant="outline"
|
|
41
44
|
className="text-destructive hover:text-destructive"
|
|
42
45
|
disabled={disabled}
|
|
43
|
-
onClick={() =>
|
|
46
|
+
onClick={() => {
|
|
47
|
+
rejectSound.play();
|
|
48
|
+
setRejectDialogOpen(true);
|
|
49
|
+
}}
|
|
44
50
|
>
|
|
45
51
|
<X className="mr-1.5 h-4 w-4" />
|
|
46
52
|
Reject
|
|
@@ -54,7 +60,15 @@ export function DrawerActionBar({
|
|
|
54
60
|
/>
|
|
55
61
|
</>
|
|
56
62
|
) : null}
|
|
57
|
-
<Button
|
|
63
|
+
<Button
|
|
64
|
+
type="button"
|
|
65
|
+
className="flex-1"
|
|
66
|
+
disabled={disabled}
|
|
67
|
+
onClick={() => {
|
|
68
|
+
approveSound.play();
|
|
69
|
+
onApprove();
|
|
70
|
+
}}
|
|
71
|
+
>
|
|
58
72
|
{approveIcon}
|
|
59
73
|
{approveLabel}
|
|
60
74
|
</Button>
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
CheckIcon,
|
|
15
15
|
} from 'lucide-react';
|
|
16
16
|
import { cn } from '@/lib/utils';
|
|
17
|
+
import { useSoundAction } from '@/hooks/use-sound-action';
|
|
17
18
|
import {
|
|
18
19
|
Drawer,
|
|
19
20
|
DrawerContent,
|
|
@@ -93,6 +94,9 @@ export function FeatureCreateDrawer({
|
|
|
93
94
|
features,
|
|
94
95
|
initialParentId,
|
|
95
96
|
}: FeatureCreateDrawerProps) {
|
|
97
|
+
const drawerOpenSound = useSoundAction('drawer-open');
|
|
98
|
+
const drawerCloseSound = useSoundAction('drawer-close');
|
|
99
|
+
const createSound = useSoundAction('create');
|
|
96
100
|
const defaultGates = workflowDefaults?.approvalGates ?? EMPTY_GATES;
|
|
97
101
|
const defaultPush = workflowDefaults?.push ?? false;
|
|
98
102
|
const defaultOpenPr = workflowDefaults?.openPr ?? false;
|
|
@@ -105,6 +109,13 @@ export function FeatureCreateDrawer({
|
|
|
105
109
|
const [openPr, setOpenPr] = useState(defaultOpenPr);
|
|
106
110
|
const [parentId, setParentId] = useState<string | undefined>(undefined);
|
|
107
111
|
|
|
112
|
+
// Play drawer-open sound when the drawer opens
|
|
113
|
+
useEffect(() => {
|
|
114
|
+
if (open) {
|
|
115
|
+
drawerOpenSound.play();
|
|
116
|
+
}
|
|
117
|
+
}, [open, drawerOpenSound]);
|
|
118
|
+
|
|
108
119
|
// Sync state when workflowDefaults load asynchronously
|
|
109
120
|
useEffect(() => {
|
|
110
121
|
if (workflowDefaults) {
|
|
@@ -134,17 +145,19 @@ export function FeatureCreateDrawer({
|
|
|
134
145
|
const handleOpenChange = useCallback(
|
|
135
146
|
(nextOpen: boolean) => {
|
|
136
147
|
if (!nextOpen) {
|
|
148
|
+
drawerCloseSound.play();
|
|
137
149
|
resetForm();
|
|
138
150
|
onClose();
|
|
139
151
|
}
|
|
140
152
|
},
|
|
141
|
-
[onClose, resetForm]
|
|
153
|
+
[onClose, resetForm, drawerCloseSound]
|
|
142
154
|
);
|
|
143
155
|
|
|
144
156
|
const handleSubmit = useCallback(
|
|
145
157
|
(e: React.FormEvent) => {
|
|
146
158
|
e.preventDefault();
|
|
147
159
|
if (!name.trim()) return;
|
|
160
|
+
createSound.play();
|
|
148
161
|
const trimmedDescription = description.trim() || undefined;
|
|
149
162
|
onSubmit({
|
|
150
163
|
name: name.trim(),
|
|
@@ -171,6 +184,7 @@ export function FeatureCreateDrawer({
|
|
|
171
184
|
push,
|
|
172
185
|
openPr,
|
|
173
186
|
parentId,
|
|
187
|
+
createSound,
|
|
174
188
|
]
|
|
175
189
|
);
|
|
176
190
|
|
|
@@ -198,7 +212,10 @@ export function FeatureCreateDrawer({
|
|
|
198
212
|
<button
|
|
199
213
|
type="button"
|
|
200
214
|
aria-label="Close"
|
|
201
|
-
onClick={
|
|
215
|
+
onClick={() => {
|
|
216
|
+
drawerCloseSound.play();
|
|
217
|
+
onClose();
|
|
218
|
+
}}
|
|
202
219
|
className="ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden"
|
|
203
220
|
>
|
|
204
221
|
<XIcon className="size-4" />
|
|
@@ -357,7 +374,14 @@ export function FeatureCreateDrawer({
|
|
|
357
374
|
{/* Footer */}
|
|
358
375
|
<Separator />
|
|
359
376
|
<DrawerFooter className="flex-row justify-end gap-2">
|
|
360
|
-
<Button
|
|
377
|
+
<Button
|
|
378
|
+
variant="outline"
|
|
379
|
+
onClick={() => {
|
|
380
|
+
drawerCloseSound.play();
|
|
381
|
+
onClose();
|
|
382
|
+
}}
|
|
383
|
+
disabled={isSubmitting}
|
|
384
|
+
>
|
|
361
385
|
Cancel
|
|
362
386
|
</Button>
|
|
363
387
|
<Button type="submit" form="create-feature-form" disabled={!name.trim() || isSubmitting}>
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { XIcon, Loader2, Trash2, ExternalLink, GitCommitHorizontal } from 'lucide-react';
|
|
4
4
|
import { PrStatus } from '@shepai/core/domain/generated/output';
|
|
5
5
|
import { cn } from '@/lib/utils';
|
|
6
|
+
import { useSoundAction } from '@/hooks/use-sound-action';
|
|
6
7
|
import { OpenActionMenu } from '@/components/common/open-action-menu';
|
|
7
8
|
import {
|
|
8
9
|
Drawer,
|
|
@@ -44,6 +45,9 @@ export function FeatureDrawer({
|
|
|
44
45
|
onDelete,
|
|
45
46
|
isDeleting = false,
|
|
46
47
|
}: FeatureDrawerProps) {
|
|
48
|
+
const drawerOpenSound = useSoundAction('drawer-open');
|
|
49
|
+
const drawerCloseSound = useSoundAction('drawer-close');
|
|
50
|
+
|
|
47
51
|
return (
|
|
48
52
|
<Drawer
|
|
49
53
|
direction="right"
|
|
@@ -51,7 +55,12 @@ export function FeatureDrawer({
|
|
|
51
55
|
handleOnly
|
|
52
56
|
open={selectedNode !== null}
|
|
53
57
|
onOpenChange={(open) => {
|
|
54
|
-
if (
|
|
58
|
+
if (open) {
|
|
59
|
+
drawerOpenSound.play();
|
|
60
|
+
} else {
|
|
61
|
+
drawerCloseSound.play();
|
|
62
|
+
onClose();
|
|
63
|
+
}
|
|
55
64
|
}}
|
|
56
65
|
>
|
|
57
66
|
<DrawerContent direction="right" className="w-96" showCloseButton={false}>
|
|
@@ -61,7 +70,10 @@ export function FeatureDrawer({
|
|
|
61
70
|
<button
|
|
62
71
|
type="button"
|
|
63
72
|
aria-label="Close"
|
|
64
|
-
onClick={
|
|
73
|
+
onClick={() => {
|
|
74
|
+
drawerCloseSound.play();
|
|
75
|
+
onClose();
|
|
76
|
+
}}
|
|
65
77
|
className="ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden"
|
|
66
78
|
>
|
|
67
79
|
<XIcon className="size-4" />
|
|
@@ -194,7 +194,7 @@ const mockData: PrdQuestionnaireData = {
|
|
|
194
194
|
finalAction: mockFinalAction,
|
|
195
195
|
};
|
|
196
196
|
|
|
197
|
-
/** Default state — first step shown, no selections. Click options to auto-advance. */
|
|
197
|
+
/** Default state — first step shown, no selections. Click options to auto-advance. Plays "select" on option click, "navigate" on step/nav buttons. */
|
|
198
198
|
export const Default: Story = {
|
|
199
199
|
render: () => <InteractiveQuestionnaire data={mockData} />,
|
|
200
200
|
};
|
|
@@ -6,6 +6,7 @@ import { cn } from '@/lib/utils';
|
|
|
6
6
|
import { Button } from '@/components/ui/button';
|
|
7
7
|
import { Badge } from '@/components/ui/badge';
|
|
8
8
|
import { DrawerActionBar } from '@/components/common/drawer-action-bar';
|
|
9
|
+
import { useSoundAction } from '@/hooks/use-sound-action';
|
|
9
10
|
import type { PrdQuestionnaireProps } from './prd-questionnaire-config';
|
|
10
11
|
|
|
11
12
|
export function PrdQuestionnaire({
|
|
@@ -20,6 +21,8 @@ export function PrdQuestionnaire({
|
|
|
20
21
|
}: PrdQuestionnaireProps) {
|
|
21
22
|
const { question, context, questions, finalAction } = data;
|
|
22
23
|
const [currentStep, setCurrentStep] = useState(0);
|
|
24
|
+
const selectSound = useSoundAction('select');
|
|
25
|
+
const navigateSound = useSoundAction('navigate');
|
|
23
26
|
|
|
24
27
|
const total = questions.length;
|
|
25
28
|
const isFirstStep = currentStep === 0;
|
|
@@ -30,13 +33,14 @@ export function PrdQuestionnaire({
|
|
|
30
33
|
|
|
31
34
|
const handleSelect = useCallback(
|
|
32
35
|
(questionId: string, optionId: string) => {
|
|
36
|
+
selectSound.play();
|
|
33
37
|
onSelect(questionId, optionId);
|
|
34
38
|
// Auto-advance to the next step after selection (unless last step)
|
|
35
39
|
if (!isLastStep) {
|
|
36
40
|
setTimeout(() => setCurrentStep((s) => s + 1), 250);
|
|
37
41
|
}
|
|
38
42
|
},
|
|
39
|
-
[onSelect, isLastStep]
|
|
43
|
+
[onSelect, isLastStep, selectSound]
|
|
40
44
|
);
|
|
41
45
|
|
|
42
46
|
if (total === 0) return null;
|
|
@@ -73,7 +77,10 @@ export function PrdQuestionnaire({
|
|
|
73
77
|
idx !== currentStep && selections[q.id] ? 'bg-primary/50' : '',
|
|
74
78
|
idx !== currentStep && !selections[q.id] ? 'bg-muted-foreground/25' : ''
|
|
75
79
|
)}
|
|
76
|
-
onClick={() =>
|
|
80
|
+
onClick={() => {
|
|
81
|
+
navigateSound.play();
|
|
82
|
+
setCurrentStep(idx);
|
|
83
|
+
}}
|
|
77
84
|
/>
|
|
78
85
|
))}
|
|
79
86
|
</div>
|
|
@@ -129,7 +136,10 @@ export function PrdQuestionnaire({
|
|
|
129
136
|
variant="ghost"
|
|
130
137
|
size="sm"
|
|
131
138
|
disabled={isFirstStep || isProcessing}
|
|
132
|
-
onClick={() =>
|
|
139
|
+
onClick={() => {
|
|
140
|
+
navigateSound.play();
|
|
141
|
+
setCurrentStep((s) => s - 1);
|
|
142
|
+
}}
|
|
133
143
|
>
|
|
134
144
|
<ChevronLeft className="mr-1 h-4 w-4" />
|
|
135
145
|
Previous
|
|
@@ -141,7 +151,10 @@ export function PrdQuestionnaire({
|
|
|
141
151
|
variant="ghost"
|
|
142
152
|
size="sm"
|
|
143
153
|
disabled={isProcessing}
|
|
144
|
-
onClick={() =>
|
|
154
|
+
onClick={() => {
|
|
155
|
+
navigateSound.play();
|
|
156
|
+
setCurrentStep((s) => s + 1);
|
|
157
|
+
}}
|
|
145
158
|
>
|
|
146
159
|
{selections[currentQuestion.id] ? 'Next' : 'Skip'}
|
|
147
160
|
<ChevronRight className="ml-1 h-4 w-4" />
|
|
@@ -25,8 +25,10 @@ const meta: Meta<typeof SidebarCollapseToggle> = {
|
|
|
25
25
|
export default meta;
|
|
26
26
|
type Story = StoryObj<typeof meta>;
|
|
27
27
|
|
|
28
|
+
/** Expanded state — clicking plays "collapse" sound. */
|
|
28
29
|
export const Expanded: Story = {};
|
|
29
30
|
|
|
31
|
+
/** Collapsed state — clicking plays "expand" sound. */
|
|
30
32
|
export const Collapsed: Story = {
|
|
31
33
|
decorators: [
|
|
32
34
|
(Story) => (
|