@shepai/cli 1.13.0 → 1.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/eslint.config.mjs +28 -0
  2. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.d.ts +7 -0
  3. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.d.ts.map +1 -0
  4. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.js +23 -0
  5. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts +10 -0
  6. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts.map +1 -0
  7. package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.js +30 -0
  8. package/dist/src/presentation/web/components/common/elapsed-time/index.d.ts +2 -0
  9. package/dist/src/presentation/web/components/common/elapsed-time/index.d.ts.map +1 -0
  10. package/dist/src/presentation/web/components/common/elapsed-time/index.js +1 -0
  11. package/dist/src/presentation/web/components/common/empty-state/empty-state.js +1 -1
  12. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts +10 -0
  13. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts.map +1 -0
  14. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.js +9 -0
  15. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts +10 -0
  16. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts.map +1 -0
  17. package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js +42 -0
  18. package/dist/src/presentation/web/components/common/feature-list-item/index.d.ts +3 -0
  19. package/dist/src/presentation/web/components/common/feature-list-item/index.d.ts.map +1 -0
  20. package/dist/src/presentation/web/components/common/feature-list-item/index.js +1 -0
  21. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.d.ts +8 -0
  22. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.d.ts.map +1 -0
  23. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.js +13 -0
  24. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts +12 -0
  25. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts.map +1 -0
  26. package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.js +45 -0
  27. package/dist/src/presentation/web/components/common/feature-status-badges/index.d.ts +3 -0
  28. package/dist/src/presentation/web/components/common/feature-status-badges/index.d.ts.map +1 -0
  29. package/dist/src/presentation/web/components/common/feature-status-badges/index.js +1 -0
  30. package/dist/src/presentation/web/components/common/feature-status-config.d.ts +11 -0
  31. package/dist/src/presentation/web/components/common/feature-status-config.d.ts.map +1 -0
  32. package/dist/src/presentation/web/components/common/feature-status-config.js +22 -0
  33. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.d.ts +8 -0
  34. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.d.ts.map +1 -0
  35. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.js +5 -0
  36. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts +9 -0
  37. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts.map +1 -0
  38. package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.js +37 -0
  39. package/dist/src/presentation/web/components/common/feature-status-group/index.d.ts +3 -0
  40. package/dist/src/presentation/web/components/common/feature-status-group/index.d.ts.map +1 -0
  41. package/dist/src/presentation/web/components/common/feature-status-group/index.js +1 -0
  42. package/dist/src/presentation/web/components/common/page-header/page-header.js +1 -1
  43. package/dist/src/presentation/web/components/common/shep-logo/index.d.ts +3 -0
  44. package/dist/src/presentation/web/components/common/shep-logo/index.d.ts.map +1 -0
  45. package/dist/src/presentation/web/components/common/shep-logo/index.js +1 -0
  46. package/dist/src/presentation/web/components/common/shep-logo/shep-logo.d.ts +6 -0
  47. package/dist/src/presentation/web/components/common/shep-logo/shep-logo.d.ts.map +1 -0
  48. package/dist/src/presentation/web/components/common/shep-logo/shep-logo.js +5 -0
  49. package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.d.ts +9 -0
  50. package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.d.ts.map +1 -0
  51. package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.js +21 -0
  52. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.d.ts +3 -0
  53. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.d.ts.map +1 -0
  54. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.js +1 -0
  55. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts +5 -0
  56. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts.map +1 -0
  57. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.js +11 -0
  58. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts +8 -0
  59. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts.map +1 -0
  60. package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.js +21 -0
  61. package/dist/src/presentation/web/components/common/sidebar-nav-item/index.d.ts +3 -0
  62. package/dist/src/presentation/web/components/common/sidebar-nav-item/index.d.ts.map +1 -0
  63. package/dist/src/presentation/web/components/common/sidebar-nav-item/index.js +1 -0
  64. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts +9 -0
  65. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map +1 -0
  66. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.js +6 -0
  67. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts +11 -0
  68. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts.map +1 -0
  69. package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.js +53 -0
  70. package/dist/src/presentation/web/components/common/sidebar-section-header/index.d.ts +3 -0
  71. package/dist/src/presentation/web/components/common/sidebar-section-header/index.d.ts.map +1 -0
  72. package/dist/src/presentation/web/components/common/sidebar-section-header/index.js +1 -0
  73. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts +8 -0
  74. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts.map +1 -0
  75. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.js +11 -0
  76. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts +8 -0
  77. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts.map +1 -0
  78. package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.js +31 -0
  79. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  80. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +5 -9
  81. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +17 -0
  82. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -0
  83. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +34 -0
  84. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts +11 -0
  85. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -0
  86. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +61 -0
  87. package/dist/src/presentation/web/components/layouts/app-sidebar/index.d.ts +3 -0
  88. package/dist/src/presentation/web/components/layouts/app-sidebar/index.d.ts.map +1 -0
  89. package/dist/src/presentation/web/components/layouts/app-sidebar/index.js +1 -0
  90. package/dist/src/presentation/web/components/layouts/header/header.js +1 -1
  91. package/dist/src/presentation/web/components/layouts/sidebar/sidebar.d.ts.map +1 -1
  92. package/dist/src/presentation/web/components/layouts/sidebar/sidebar.js +2 -1
  93. package/dist/src/presentation/web/components/ui/alert.js +1 -1
  94. package/dist/src/presentation/web/components/ui/badge.js +4 -4
  95. package/dist/src/presentation/web/components/ui/button.d.ts +3 -4
  96. package/dist/src/presentation/web/components/ui/button.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/ui/button.js +18 -16
  98. package/dist/src/presentation/web/components/ui/input.d.ts +1 -1
  99. package/dist/src/presentation/web/components/ui/input.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/ui/input.js +3 -5
  101. package/dist/src/presentation/web/components/ui/label.js +1 -1
  102. package/dist/src/presentation/web/components/ui/scroll-area.d.ts +6 -0
  103. package/dist/src/presentation/web/components/ui/scroll-area.d.ts.map +1 -0
  104. package/dist/src/presentation/web/components/ui/scroll-area.js +11 -0
  105. package/dist/src/presentation/web/components/ui/separator.d.ts +5 -0
  106. package/dist/src/presentation/web/components/ui/separator.d.ts.map +1 -0
  107. package/dist/src/presentation/web/components/ui/separator.js +8 -0
  108. package/dist/src/presentation/web/components/ui/sheet.d.ts +15 -0
  109. package/dist/src/presentation/web/components/ui/sheet.d.ts.map +1 -0
  110. package/dist/src/presentation/web/components/ui/sheet.js +40 -0
  111. package/dist/src/presentation/web/components/ui/sidebar.d.ts +70 -0
  112. package/dist/src/presentation/web/components/ui/sidebar.d.ts.map +1 -0
  113. package/dist/src/presentation/web/components/ui/sidebar.js +211 -0
  114. package/dist/src/presentation/web/components/ui/skeleton.d.ts +3 -0
  115. package/dist/src/presentation/web/components/ui/skeleton.d.ts.map +1 -0
  116. package/dist/src/presentation/web/components/ui/skeleton.js +6 -0
  117. package/dist/src/presentation/web/components/ui/tooltip.d.ts +8 -0
  118. package/dist/src/presentation/web/components/ui/tooltip.d.ts.map +1 -0
  119. package/dist/src/presentation/web/components/ui/tooltip.js +17 -0
  120. package/dist/src/presentation/web/hooks/use-deferred-mount.d.ts +10 -0
  121. package/dist/src/presentation/web/hooks/use-deferred-mount.d.ts.map +1 -0
  122. package/dist/src/presentation/web/hooks/use-deferred-mount.js +23 -0
  123. package/dist/src/presentation/web/hooks/use-mobile.d.ts +2 -0
  124. package/dist/src/presentation/web/hooks/use-mobile.d.ts.map +1 -0
  125. package/dist/src/presentation/web/hooks/use-mobile.js +15 -0
  126. package/dist/src/presentation/web/hooks/useTheme.d.ts +1 -2
  127. package/dist/src/presentation/web/hooks/useTheme.d.ts.map +1 -1
  128. package/dist/src/presentation/web/hooks/useTheme.js +5 -6
  129. package/dist/tsconfig.build.tsbuildinfo +1 -1
  130. package/package.json +11 -9
  131. package/web/.next/BUILD_ID +1 -1
  132. package/web/.next/build-manifest.json +5 -5
  133. package/web/.next/cache/.previewinfo +1 -1
  134. package/web/.next/cache/.rscinfo +1 -1
  135. package/web/.next/cache/.tsbuildinfo +1 -1
  136. package/web/.next/cache/config.json +3 -3
  137. package/web/.next/fallback-build-manifest.json +2 -2
  138. package/web/.next/prerender-manifest.json +3 -3
  139. package/web/.next/required-server-files.js +1 -1
  140. package/web/.next/required-server-files.json +1 -1
  141. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  142. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  143. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  144. package/web/.next/server/app/_global-error.html +2 -2
  145. package/web/.next/server/app/_global-error.rsc +7 -7
  146. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  147. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  148. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  149. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  150. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  151. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  152. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  153. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  154. package/web/.next/server/app/_not-found.html +2 -2
  155. package/web/.next/server/app/_not-found.rsc +9 -9
  156. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +9 -9
  157. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
  158. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
  159. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  160. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  161. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  162. package/web/.next/server/app/index.html +2 -2
  163. package/web/.next/server/app/index.rsc +10 -10
  164. package/web/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  165. package/web/.next/server/app/index.segments/_full.segment.rsc +10 -10
  166. package/web/.next/server/app/index.segments/_head.segment.rsc +3 -3
  167. package/web/.next/server/app/index.segments/_index.segment.rsc +5 -5
  168. package/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  169. package/web/.next/server/app/page/build-manifest.json +3 -3
  170. package/web/.next/server/app/page.js.nft.json +1 -1
  171. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  172. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  173. package/web/.next/server/app/version/page.js.nft.json +1 -1
  174. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  175. package/web/.next/server/app/version.html +2 -2
  176. package/web/.next/server/app/version.rsc +10 -10
  177. package/web/.next/server/app/version.segments/_full.segment.rsc +10 -10
  178. package/web/.next/server/app/version.segments/_head.segment.rsc +3 -3
  179. package/web/.next/server/app/version.segments/_index.segment.rsc +5 -5
  180. package/web/.next/server/app/version.segments/_tree.segment.rsc +2 -2
  181. package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +3 -3
  182. package/web/.next/server/app/version.segments/version.segment.rsc +3 -3
  183. package/web/.next/server/chunks/ssr/{[root-of-the-server]__36b65e3a._.js → [root-of-the-server]__18ff2ebf._.js} +2 -2
  184. package/web/.next/server/chunks/ssr/[root-of-the-server]__18ff2ebf._.js.map +1 -0
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__ab31d101._.js +3 -0
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__ab31d101._.js.map +1 -0
  187. package/web/.next/server/chunks/ssr/{[root-of-the-server]__06cb2b2c._.js → [root-of-the-server]__ccf8a903._.js} +2 -2
  188. package/web/.next/server/chunks/ssr/[root-of-the-server]__ccf8a903._.js.map +1 -0
  189. package/web/.next/server/chunks/ssr/_0f02ab66._.js +1 -1
  190. package/web/.next/server/chunks/ssr/_0f02ab66._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/_19be0743._.js +1 -1
  192. package/web/.next/server/chunks/ssr/_4582f3c3._.js +3 -0
  193. package/web/.next/server/chunks/ssr/_4582f3c3._.js.map +1 -0
  194. package/web/.next/server/chunks/ssr/_a0c04017._.js +5 -1
  195. package/web/.next/server/chunks/ssr/_a0c04017._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +1 -1
  197. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js +3 -0
  199. package/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js.map +1 -0
  200. package/web/.next/server/middleware-build-manifest.js +3 -3
  201. package/web/.next/server/pages/404.html +2 -2
  202. package/web/.next/server/pages/500.html +2 -2
  203. package/web/.next/server/server-reference-manifest.js +1 -1
  204. package/web/.next/server/server-reference-manifest.json +1 -1
  205. package/web/.next/static/chunks/33854795ae473cf1.css +1 -0
  206. package/web/.next/static/chunks/{b3cc49b27e09fa39.js → 37bc3e283f734dca.js} +1 -1
  207. package/web/.next/static/chunks/5130d7093ad39f4a.js +5 -0
  208. package/web/.next/static/chunks/523c5cfe0570712c.js +1 -0
  209. package/web/.next/static/chunks/70993ebedee7eab0.js +2 -0
  210. package/web/.next/static/chunks/df7d29673e0ac11d.js +1 -0
  211. package/web/.next/static/chunks/ef1296dbe67d5aae.js +1 -0
  212. package/web/.next/static/chunks/{turbopack-a05629c8cdde7f2b.js → turbopack-a5a88a85e7ac8e8d.js} +2 -2
  213. package/web/.next/trace +1 -1
  214. package/web/.next/trace-build +1 -1
  215. package/web/package.json +2 -1
  216. package/web/.next/server/chunks/ssr/0d4d2_route-modules_app-page_vendored_ssr_react-server-dom-turbopack-client_105312e6.js +0 -3
  217. package/web/.next/server/chunks/ssr/0d4d2_route-modules_app-page_vendored_ssr_react-server-dom-turbopack-client_105312e6.js.map +0 -1
  218. package/web/.next/server/chunks/ssr/403f9_next_dist_e28a27cf._.js +0 -3
  219. package/web/.next/server/chunks/ssr/403f9_next_dist_e28a27cf._.js.map +0 -1
  220. package/web/.next/server/chunks/ssr/403f9_next_dist_server_route-modules_app-page_vendored_ssr_c0d9b5b7._.js +0 -3
  221. package/web/.next/server/chunks/ssr/403f9_next_dist_server_route-modules_app-page_vendored_ssr_c0d9b5b7._.js.map +0 -1
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__06cb2b2c._.js.map +0 -1
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b188e6d._.js +0 -3
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b188e6d._.js.map +0 -1
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__36b65e3a._.js.map +0 -1
  226. package/web/.next/server/chunks/ssr/_938886f2._.js +0 -3
  227. package/web/.next/server/chunks/ssr/_938886f2._.js.map +0 -1
  228. package/web/.next/static/chunks/26dea72d1da677f0.js +0 -1
  229. package/web/.next/static/chunks/4635405104cd73cd.js +0 -1
  230. package/web/.next/static/chunks/5353ec32bd6fc978.js +0 -1
  231. package/web/.next/static/chunks/68c8622bb8338459.js +0 -2
  232. package/web/.next/static/chunks/abd08b52c2746061.css +0 -1
  233. package/web/.next/static/chunks/b602eefc57a3dcc6.js +0 -1
  234. package/web/.next/static/chunks/cfef0d24c122a550.js +0 -1
  235. /package/web/.next/static/{NPoGKKPZqjVtoh4TrElhz → ozzHAkZyxX7nXyxpqufBs}/_buildManifest.js +0 -0
  236. /package/web/.next/static/{NPoGKKPZqjVtoh4TrElhz → ozzHAkZyxX7nXyxpqufBs}/_clientMiddlewareManifest.json +0 -0
  237. /package/web/.next/static/{NPoGKKPZqjVtoh4TrElhz → ozzHAkZyxX7nXyxpqufBs}/_ssgManifest.js +0 -0
@@ -0,0 +1,8 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SidebarCollapseToggle } from './sidebar-collapse-toggle';
3
+ declare const meta: Meta<typeof SidebarCollapseToggle>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Expanded: Story;
7
+ export declare const Collapsed: Story;
8
+ //# sourceMappingURL=sidebar-collapse-toggle.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-collapse-toggle.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,qBAAqB,CAkB5C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,QAAQ,EAAE,KAAU,CAAC;AAElC,eAAO,MAAM,SAAS,EAAE,KAYvB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { SidebarProvider, SidebarMenu, SidebarMenuItem } from '../../ui/sidebar';
3
+ import { SidebarCollapseToggle } from './sidebar-collapse-toggle';
4
+ const meta = {
5
+ title: 'Composed/SidebarCollapseToggle',
6
+ component: SidebarCollapseToggle,
7
+ parameters: {
8
+ layout: 'padded',
9
+ },
10
+ tags: ['autodocs'],
11
+ decorators: [
12
+ (Story) => (_jsx(SidebarProvider, { children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx(Story, {}) }) }) })),
13
+ ],
14
+ };
15
+ export default meta;
16
+ export const Expanded = {};
17
+ export const Collapsed = {
18
+ decorators: [
19
+ (Story) => (_jsx(SidebarProvider, { defaultOpen: false, children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx(Story, {}) }) }) })),
20
+ ],
21
+ };
@@ -0,0 +1,3 @@
1
+ export { SidebarNavItem } from './sidebar-nav-item';
2
+ export type { SidebarNavItemProps } from './sidebar-nav-item';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-nav-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ export { SidebarNavItem } from './sidebar-nav-item';
@@ -0,0 +1,9 @@
1
+ import type { LucideIcon } from 'lucide-react';
2
+ export interface SidebarNavItemProps {
3
+ icon: LucideIcon;
4
+ label: string;
5
+ href: string;
6
+ active?: boolean;
7
+ }
8
+ export declare function SidebarNavItem({ icon: Icon, label, href, active }: SidebarNavItemProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=sidebar-nav-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-nav-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAc,EAAE,EAAE,mBAAmB,2CAW9F"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import Link from 'next/link';
3
+ import { SidebarMenuItem, SidebarMenuButton } from '../../ui/sidebar';
4
+ export function SidebarNavItem({ icon: Icon, label, href, active = false }) {
5
+ return (_jsx(SidebarMenuItem, { "data-testid": "sidebar-nav-item", children: _jsx(SidebarMenuButton, { asChild: true, isActive: active, tooltip: label, children: _jsxs(Link, { href: href, children: [_jsx(Icon, {}), _jsx("span", { children: label })] }) }) }));
6
+ }
@@ -0,0 +1,11 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SidebarNavItem } from './sidebar-nav-item';
3
+ declare const meta: Meta<typeof SidebarNavItem>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Active: Story;
8
+ export declare const WithBrainIcon: Story;
9
+ export declare const WithSettingsIcon: Story;
10
+ export declare const WithDashboardIcon: Story;
11
+ //# sourceMappingURL=sidebar-nav-item.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-nav-item.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAgBrC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAOpB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAM3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAO/B,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Home, Brain, Settings, LayoutDashboard } from 'lucide-react';
3
+ import { SidebarProvider, SidebarMenu } from '../../ui/sidebar';
4
+ import { SidebarNavItem } from './sidebar-nav-item';
5
+ const meta = {
6
+ title: 'Composed/SidebarNavItem',
7
+ component: SidebarNavItem,
8
+ parameters: {
9
+ layout: 'padded',
10
+ },
11
+ tags: ['autodocs'],
12
+ decorators: [
13
+ (Story) => (_jsx(SidebarProvider, { children: _jsx(SidebarMenu, { children: _jsx(Story, {}) }) })),
14
+ ],
15
+ };
16
+ export default meta;
17
+ export const Default = {
18
+ args: {
19
+ icon: Home,
20
+ label: 'Control Center',
21
+ href: '/',
22
+ },
23
+ };
24
+ export const Active = {
25
+ args: {
26
+ icon: Home,
27
+ label: 'Control Center',
28
+ href: '/',
29
+ active: true,
30
+ },
31
+ };
32
+ export const WithBrainIcon = {
33
+ args: {
34
+ icon: Brain,
35
+ label: 'Memory',
36
+ href: '/memory',
37
+ },
38
+ };
39
+ export const WithSettingsIcon = {
40
+ args: {
41
+ icon: Settings,
42
+ label: 'Settings',
43
+ href: '/settings',
44
+ },
45
+ };
46
+ export const WithDashboardIcon = {
47
+ args: {
48
+ icon: LayoutDashboard,
49
+ label: 'Dashboard',
50
+ href: '/dashboard',
51
+ active: true,
52
+ },
53
+ };
@@ -0,0 +1,3 @@
1
+ export { SidebarSectionHeader } from './sidebar-section-header';
2
+ export type { SidebarSectionHeaderProps } from './sidebar-section-header';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-section-header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1 @@
1
+ export { SidebarSectionHeader } from './sidebar-section-header';
@@ -0,0 +1,8 @@
1
+ export interface SidebarSectionHeaderProps {
2
+ label: string;
3
+ onFolderClick?: () => void;
4
+ onMenuClick?: () => void;
5
+ className?: string;
6
+ }
7
+ export declare function SidebarSectionHeader({ label, onFolderClick, onMenuClick, className, }: SidebarSectionHeaderProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=sidebar-section-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-section-header.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,aAAa,EACb,WAAW,EACX,SAAS,GACV,EAAE,yBAAyB,2CA0C3B"}
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Folder, GripHorizontal } from 'lucide-react';
4
+ import { SidebarGroup } from '../../ui/sidebar';
5
+ import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip';
6
+ import { useSidebar } from '../../ui/sidebar';
7
+ import { cn } from '../../../lib/utils';
8
+ export function SidebarSectionHeader({ label, onFolderClick, onMenuClick, className, }) {
9
+ const { state, isMobile } = useSidebar();
10
+ return (_jsx(SidebarGroup, { "data-testid": "sidebar-section-header", className: cn('px-2 py-1', className), children: _jsxs("div", { className: "text-sidebar-foreground flex h-7 w-full shrink-0 items-center px-2 text-sm font-medium", children: [_jsx("span", { className: "min-w-0 flex-1 truncate", children: label }), _jsxs("span", { className: "text-sidebar-foreground/70 flex shrink-0 items-center gap-0.5", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: onFolderClick, className: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground ring-sidebar-ring flex size-7 items-center justify-center rounded-md p-0 outline-hidden transition-colors focus-visible:ring-2 [&>svg]:size-4", "aria-label": "Open features folder", children: _jsx(Folder, { className: "size-4" }) }) }), _jsx(TooltipContent, { side: "right", align: "center", hidden: state !== 'collapsed' || isMobile, children: "Open features folder" })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: onMenuClick, className: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground ring-sidebar-ring flex size-7 items-center justify-center rounded-md p-0 outline-hidden transition-colors focus-visible:ring-2 [&>svg]:size-4", "aria-label": "Features options", children: _jsx(GripHorizontal, { className: "size-4" }) }) }), _jsx(TooltipContent, { side: "right", align: "center", hidden: state !== 'collapsed' || isMobile, children: "Features options" })] })] })] }) }));
11
+ }
@@ -0,0 +1,8 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { SidebarSectionHeader } from './sidebar-section-header';
3
+ declare const meta: Meta<typeof SidebarSectionHeader>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const WithActions: Story;
8
+ //# sourceMappingURL=sidebar-section-header.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-section-header.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,oBAAoB,CAgB3C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAOF,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { SidebarProvider } from '../../ui/sidebar';
3
+ import { SidebarSectionHeader } from './sidebar-section-header';
4
+ const meta = {
5
+ title: 'Composed/SidebarSectionHeader',
6
+ component: SidebarSectionHeader,
7
+ parameters: {
8
+ layout: 'padded',
9
+ },
10
+ tags: ['autodocs'],
11
+ decorators: [
12
+ (Story) => (_jsx(SidebarProvider, { children: _jsx("div", { className: "w-64", children: _jsx(Story, {}) }) })),
13
+ ],
14
+ };
15
+ export default meta;
16
+ export const Default = {
17
+ args: {
18
+ label: 'Features',
19
+ },
20
+ };
21
+ function noop() {
22
+ // Intentional no-op for Storybook interaction demos
23
+ return;
24
+ }
25
+ export const WithActions = {
26
+ args: {
27
+ label: 'Features',
28
+ onFolderClick: noop,
29
+ onMenuClick: noop,
30
+ },
31
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAanD"}
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAenD"}
@@ -1,13 +1,9 @@
1
1
  'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { usePathname } from 'next/navigation';
4
- import { DashboardLayout } from '../../layouts/dashboard-layout';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { SidebarProvider, SidebarInset, SidebarTrigger } from '../../ui/sidebar';
4
+ import { Separator } from '../../ui/separator';
5
+ import { AppSidebar } from '../../layouts/app-sidebar';
5
6
  import { ThemeToggle } from '../../common/theme-toggle';
6
- const navItems = [
7
- { label: 'Home', href: '/' },
8
- { label: 'Version', href: '/version' },
9
- ];
10
7
  export function AppShell({ children }) {
11
- const pathname = usePathname();
12
- return (_jsx(DashboardLayout, { sidebarItems: navItems, pathname: pathname, title: "Shep AI", actions: _jsx(ThemeToggle, {}), children: children }));
8
+ return (_jsxs(SidebarProvider, { children: [_jsx(AppSidebar, { features: [] }), _jsxs(SidebarInset, { children: [_jsxs("header", { className: "flex h-14 items-center gap-2 border-b px-4", children: [_jsx(SidebarTrigger, {}), _jsx(Separator, { orientation: "vertical", className: "h-4" }), _jsx("div", { className: "flex-1" }), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "flex-1 overflow-auto p-6", children: children })] })] }));
13
9
  }
@@ -0,0 +1,17 @@
1
+ import type { FeatureStatus } from '../../common/feature-status-config';
2
+ interface FeatureItem {
3
+ name: string;
4
+ status: FeatureStatus;
5
+ startedAt?: number;
6
+ duration?: string;
7
+ }
8
+ export interface AppSidebarProps {
9
+ features: FeatureItem[];
10
+ onNewFeature?: () => void;
11
+ onFeatureClick?: (name: string) => void;
12
+ onFeaturesFolderClick?: () => void;
13
+ onFeaturesMenuClick?: () => void;
14
+ }
15
+ export declare function AppSidebar({ features, onNewFeature, onFeatureClick, onFeaturesFolderClick, onFeaturesMenuClick, }: AppSidebarProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=app-sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,EAAE,eAAe,2CA+FjB"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { usePathname } from 'next/navigation';
4
+ import { Home, Brain, Plus } from 'lucide-react';
5
+ import { Sidebar, SidebarHeader, SidebarContent, SidebarFooter, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarRail, useSidebar, } from '../../ui/sidebar';
6
+ import { ScrollArea } from '../../ui/scroll-area';
7
+ import { SidebarNavItem } from '../../common/sidebar-nav-item';
8
+ import { SidebarCollapseToggle } from '../../common/sidebar-collapse-toggle';
9
+ import { ShepLogo } from '../../common/shep-logo';
10
+ import { FeatureListItem } from '../../common/feature-list-item';
11
+ import { FeatureStatusGroup } from '../../common/feature-status-group';
12
+ import { SidebarSectionHeader } from '../../common/sidebar-section-header';
13
+ import { featureStatusConfig, featureStatusOrder } from '../../common/feature-status-config';
14
+ import { useDeferredMount } from '../../../hooks/use-deferred-mount';
15
+ export function AppSidebar({ features, onNewFeature, onFeatureClick, onFeaturesFolderClick, onFeaturesMenuClick, }) {
16
+ const pathname = usePathname();
17
+ const { state } = useSidebar();
18
+ const collapsed = state === 'collapsed';
19
+ const { mounted: showExpanded, visible: expandedVisible } = useDeferredMount(collapsed, 200);
20
+ const grouped = featureStatusOrder.map((key) => {
21
+ const { label } = featureStatusConfig[key];
22
+ const items = features.filter((f) => f.status === key);
23
+ return { key, label, items };
24
+ });
25
+ return (_jsxs(Sidebar, { "data-testid": "app-sidebar", collapsible: "icon", children: [_jsx(SidebarHeader, { children: _jsxs(SidebarMenu, { children: [_jsx(SidebarMenuItem, { children: _jsxs("div", { className: "flex h-8 items-center group-data-[collapsible=icon]:justify-center", children: [showExpanded ? (_jsxs("div", { className: [
26
+ 'flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2',
27
+ 'transition-opacity duration-200 ease-out',
28
+ expandedVisible ? 'opacity-100' : 'opacity-0',
29
+ ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20 }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: "Control Center", href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Brain, label: "Memory", href: "/memory", active: pathname === '/memory' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
30
+ 'min-w-0 overflow-hidden transition-opacity duration-200 ease-out',
31
+ '[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
32
+ expandedVisible ? 'opacity-100' : 'opacity-0',
33
+ ].join(' '), children: [_jsx(SidebarSectionHeader, { label: "Features", onFolderClick: onFeaturesFolderClick, onMenuClick: onFeaturesMenuClick }), _jsx(ScrollArea, { children: grouped.map(({ key, label, items }) => items.length > 0 ? (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, onClick: onFeatureClick ? () => onFeatureClick(feature.name) : undefined }, feature.name))) }, key)) : null) })] })) : null }), _jsx(SidebarFooter, { children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { onClick: onNewFeature, tooltip: "New feature", children: [_jsx(Plus, {}), _jsx("span", { children: "New feature" })] }) }) }) }), _jsx(SidebarRail, {})] }));
34
+ }
@@ -0,0 +1,11 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { AppSidebar } from './app-sidebar';
3
+ declare const meta: Meta<typeof AppSidebar>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Collapsed: Story;
8
+ export declare const Empty: Story;
9
+ export declare const AllInProgress: Story;
10
+ export declare const AllDone: Story;
11
+ //# sourceMappingURL=app-sidebar.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAsBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAWnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SidebarProvider, SidebarInset } from '../../ui/sidebar';
3
+ import { AppSidebar } from './app-sidebar';
4
+ const meta = {
5
+ title: 'Layout/AppSidebar',
6
+ component: AppSidebar,
7
+ parameters: {
8
+ layout: 'fullscreen',
9
+ },
10
+ tags: ['autodocs'],
11
+ decorators: [
12
+ (Story, context) => {
13
+ const defaultOpen = context.parameters?.sidebar?.defaultOpen ?? true;
14
+ return (_jsxs(SidebarProvider, { defaultOpen: defaultOpen, children: [_jsx(Story, {}), _jsx(SidebarInset, { "aria-label": "Main content", children: _jsx("div", { className: "flex items-center gap-2 border-b px-4 py-2", children: _jsx("span", { className: "text-muted-foreground text-sm", children: "Content area" }) }) })] }));
15
+ },
16
+ ],
17
+ };
18
+ export default meta;
19
+ const mockFeatures = [
20
+ { name: 'Auth Module', status: 'action-needed' },
21
+ { name: 'Payment Flow', status: 'action-needed' },
22
+ { name: 'Dashboard', status: 'in-progress', startedAt: Date.now() - 330_000 },
23
+ { name: 'API Gateway', status: 'in-progress', startedAt: Date.now() - 60_000 },
24
+ { name: 'Settings Page', status: 'done', duration: '2h' },
25
+ { name: 'User Profile', status: 'done', duration: '1h' },
26
+ ];
27
+ export const Default = {
28
+ args: {
29
+ features: mockFeatures,
30
+ },
31
+ };
32
+ export const Collapsed = {
33
+ args: {
34
+ features: mockFeatures,
35
+ },
36
+ parameters: {
37
+ sidebar: { defaultOpen: false },
38
+ },
39
+ };
40
+ export const Empty = {
41
+ args: {
42
+ features: [],
43
+ },
44
+ };
45
+ export const AllInProgress = {
46
+ args: {
47
+ features: [
48
+ { name: 'Feature A', status: 'in-progress', startedAt: Date.now() - 120_000 },
49
+ { name: 'Feature B', status: 'in-progress', startedAt: Date.now() - 600_000 },
50
+ ],
51
+ },
52
+ };
53
+ export const AllDone = {
54
+ args: {
55
+ features: [
56
+ { name: 'Feature A', status: 'done', duration: '30m' },
57
+ { name: 'Feature B', status: 'done', duration: '1h' },
58
+ { name: 'Feature C', status: 'done', duration: '3h' },
59
+ ],
60
+ },
61
+ };
@@ -0,0 +1,3 @@
1
+ export { AppSidebar } from './app-sidebar';
2
+ export type { AppSidebarProps } from './app-sidebar';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ export { AppSidebar } from './app-sidebar';
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from '../../../lib/utils';
3
3
  export function Header({ title, breadcrumbs, actions, className }) {
4
- return (_jsxs("header", { className: cn('flex flex-col gap-2 px-6 py-4', className), children: [breadcrumbs && _jsx("div", { "data-slot": "breadcrumbs", children: breadcrumbs }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: title }), actions && _jsx("div", { "data-slot": "actions", children: actions })] })] }));
4
+ return (_jsxs("header", { className: cn('flex flex-col gap-2 px-6 py-4', className), children: [breadcrumbs ? _jsx("div", { "data-slot": "breadcrumbs", children: breadcrumbs }) : null, _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: title }), actions ? _jsx("div", { "data-slot": "actions", children: actions }) : null] })] }));
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/sidebar/sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,2CAwBnE"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/sidebar/sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,2CAwBnE"}
@@ -1,9 +1,10 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import Link from 'next/link';
2
3
  import { cn } from '../../../lib/utils';
3
4
  export function Sidebar({ items, pathname, className }) {
4
5
  return (_jsx("nav", { className: cn('flex flex-col gap-1 p-4', className), children: items.map((item) => {
5
6
  const isActive = pathname === item.href;
6
- return (_jsxs("a", { href: item.href, "aria-current": isActive ? 'page' : undefined, className: cn('flex items-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors', isActive
7
+ return (_jsxs(Link, { href: item.href, "aria-current": isActive ? 'page' : undefined, className: cn('flex items-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors', isActive
7
8
  ? 'bg-accent text-accent-foreground'
8
9
  : 'text-muted-foreground hover:bg-accent/50 hover:text-accent-foreground'), children: [item.icon, item.label] }, item.href));
9
10
  }) }));
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { cn } from '../../lib/utils';
5
- const alertVariants = cva('relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7', {
5
+ const alertVariants = cva('[&>svg]:text-foreground relative w-full rounded-lg border px-4 py-3 text-sm [&>svg]:absolute [&>svg]:top-4 [&>svg]:left-4 [&>svg+div]:translate-y-[-3px] [&>svg~*]:pl-7', {
6
6
  variants: {
7
7
  variant: {
8
8
  default: 'bg-background text-foreground',
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cva } from 'class-variance-authority';
3
3
  import { cn } from '../../lib/utils';
4
- const badgeVariants = cva('inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', {
4
+ const badgeVariants = cva('focus:ring-ring inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-offset-2 focus:outline-none', {
5
5
  variants: {
6
6
  variant: {
7
- default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',
8
- secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
9
- destructive: 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',
7
+ default: 'bg-primary text-primary-foreground hover:bg-primary/80 border-transparent shadow',
8
+ secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent',
9
+ destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/80 border-transparent shadow',
10
10
  outline: 'text-foreground',
11
11
  },
12
12
  },
@@ -2,11 +2,10 @@ import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  declare const buttonVariants: (props?: ({
4
4
  variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
5
- size?: "default" | "icon" | "sm" | "lg" | null | undefined;
5
+ size?: "default" | "icon" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
- export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
7
+ declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
8
8
  asChild?: boolean;
9
- }
10
- declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
9
+ }): import("react/jsx-runtime").JSX.Element;
11
10
  export { Button, buttonVariants };
12
11
  //# sourceMappingURL=button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,cAAc;;;8EAyBnB,CAAC;AAEF,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,QAAA,MAAM,MAAM,uFAOX,CAAC;AAGF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKlE,QAAA,MAAM,cAAc;;;8EA8BnB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,2CAYF;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
@@ -1,23 +1,26 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import * as React from 'react';
3
- import { Slot } from 'radix-ui';
4
2
  import { cva } from 'class-variance-authority';
3
+ import { Slot } from 'radix-ui';
5
4
  import { cn } from '../../lib/utils';
6
- const buttonVariants = cva('inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', {
5
+ const buttonVariants = cva("focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
6
  variants: {
8
7
  variant: {
9
- default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',
10
- destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',
11
- outline: 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',
12
- secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',
13
- ghost: 'hover:bg-accent hover:text-accent-foreground',
8
+ default: 'bg-primary text-primary-foreground hover:bg-primary/90',
9
+ destructive: 'bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',
10
+ outline: 'bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs',
11
+ secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
12
+ ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
14
13
  link: 'text-primary underline-offset-4 hover:underline',
15
14
  },
16
15
  size: {
17
- default: 'h-9 px-4 py-2',
18
- sm: 'h-8 rounded-md px-3 text-xs',
19
- lg: 'h-10 rounded-md px-8',
20
- icon: 'h-9 w-9',
16
+ default: 'h-9 px-4 py-2 has-[>svg]:px-3',
17
+ xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
18
+ sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',
19
+ lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
20
+ icon: 'size-9',
21
+ 'icon-xs': "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
22
+ 'icon-sm': 'size-8',
23
+ 'icon-lg': 'size-10',
21
24
  },
22
25
  },
23
26
  defaultVariants: {
@@ -25,9 +28,8 @@ const buttonVariants = cva('inline-flex items-center justify-center gap-2 whites
25
28
  size: 'default',
26
29
  },
27
30
  });
28
- const Button = React.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => {
31
+ function Button({ className, variant = 'default', size = 'default', asChild = false, ...props }) {
29
32
  const Comp = asChild ? Slot.Root : 'button';
30
- return (_jsx(Comp, { className: cn(buttonVariants({ variant, size, className })), ref: ref, ...props }));
31
- });
32
- Button.displayName = 'Button';
33
+ return (_jsx(Comp, { "data-slot": "button", "data-variant": variant, "data-size": size, className: cn(buttonVariants({ variant, size, className })), ...props }));
34
+ }
33
35
  export { Button, buttonVariants };
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
- declare const Input: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
2
+ declare function Input({ className, type, ...props }: React.ComponentProps<'input'>): import("react/jsx-runtime").JSX.Element;
3
3
  export { Input };
4
4
  //# sourceMappingURL=input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,KAAK,8KAcV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,2CAc1E;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import * as React from 'react';
3
2
  import { cn } from '../../lib/utils';
4
- const Input = React.forwardRef(({ className, type, ...props }, ref) => {
5
- return (_jsx("input", { type: type, className: cn('border-input file:text-foreground placeholder:text-muted-foreground focus-visible:ring-ring flex h-9 w-full rounded-md border bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-1 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', className), ref: ref, ...props }));
6
- });
7
- Input.displayName = 'Input';
3
+ function Input({ className, type, ...props }) {
4
+ return (_jsx("input", { type: type, "data-slot": "input", className: cn('file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive', className), ...props }));
5
+ }
8
6
  export { Input };
@@ -4,7 +4,7 @@ import * as React from 'react';
4
4
  import { Label as LabelPrimitive } from 'radix-ui';
5
5
  import { cva } from 'class-variance-authority';
6
6
  import { cn } from '../../lib/utils';
7
- const labelVariants = cva('text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70');
7
+ const labelVariants = cva('text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70');
8
8
  const Label = React.forwardRef(({ className, ...props }, ref) => (_jsx(LabelPrimitive.Root, { ref: ref, className: cn(labelVariants(), className), ...props })));
9
9
  Label.displayName = LabelPrimitive.Root.displayName;
10
10
  export { Label };
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ import { ScrollArea as ScrollAreaPrimitive } from 'radix-ui';
3
+ declare function ScrollArea({ className, children, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function ScrollBar({ className, orientation, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>): import("react/jsx-runtime").JSX.Element;
5
+ export { ScrollArea, ScrollBar };
6
+ //# sourceMappingURL=scroll-area.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-area.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/scroll-area.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAI7D,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,2CAiBvD;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,WAAwB,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,2CAmBtE;AAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}