@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.
- package/dist/eslint.config.mjs +28 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.d.ts +7 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.js +23 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/elapsed-time/elapsed-time.stories.js +30 -0
- package/dist/src/presentation/web/components/common/elapsed-time/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/elapsed-time/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/elapsed-time/index.js +1 -0
- package/dist/src/presentation/web/components/common/empty-state/empty-state.js +1 -1
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts +10 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.js +9 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-list-item/feature-list-item.stories.js +42 -0
- package/dist/src/presentation/web/components/common/feature-list-item/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/feature-list-item/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-list-item/index.js +1 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.js +13 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/feature-status-badges.stories.js +45 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-badges/index.js +1 -0
- package/dist/src/presentation/web/components/common/feature-status-config.d.ts +11 -0
- package/dist/src/presentation/web/components/common/feature-status-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-config.js +22 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.js +5 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-group/feature-status-group.stories.js +37 -0
- package/dist/src/presentation/web/components/common/feature-status-group/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/feature-status-group/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-status-group/index.js +1 -0
- package/dist/src/presentation/web/components/common/page-header/page-header.js +1 -1
- package/dist/src/presentation/web/components/common/shep-logo/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/shep-logo/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/index.js +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.d.ts +6 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.js +5 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/shep-logo/shep-logo.stories.js +21 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/index.js +1 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts +5 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.js +11 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts +8 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.stories.js +21 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/index.js +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts +9 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.js +6 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.js +53 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/index.js +1 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts +8 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.js +11 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts +8 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.js +31 -0
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +5 -9
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +17 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +34 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +61 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/index.d.ts +3 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/index.js +1 -0
- package/dist/src/presentation/web/components/layouts/header/header.js +1 -1
- package/dist/src/presentation/web/components/layouts/sidebar/sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/sidebar/sidebar.js +2 -1
- package/dist/src/presentation/web/components/ui/alert.js +1 -1
- package/dist/src/presentation/web/components/ui/badge.js +4 -4
- package/dist/src/presentation/web/components/ui/button.d.ts +3 -4
- package/dist/src/presentation/web/components/ui/button.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/button.js +18 -16
- package/dist/src/presentation/web/components/ui/input.d.ts +1 -1
- package/dist/src/presentation/web/components/ui/input.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/input.js +3 -5
- package/dist/src/presentation/web/components/ui/label.js +1 -1
- package/dist/src/presentation/web/components/ui/scroll-area.d.ts +6 -0
- package/dist/src/presentation/web/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/scroll-area.js +11 -0
- package/dist/src/presentation/web/components/ui/separator.d.ts +5 -0
- package/dist/src/presentation/web/components/ui/separator.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/separator.js +8 -0
- package/dist/src/presentation/web/components/ui/sheet.d.ts +15 -0
- package/dist/src/presentation/web/components/ui/sheet.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/sheet.js +40 -0
- package/dist/src/presentation/web/components/ui/sidebar.d.ts +70 -0
- package/dist/src/presentation/web/components/ui/sidebar.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/sidebar.js +211 -0
- package/dist/src/presentation/web/components/ui/skeleton.d.ts +3 -0
- package/dist/src/presentation/web/components/ui/skeleton.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/skeleton.js +6 -0
- package/dist/src/presentation/web/components/ui/tooltip.d.ts +8 -0
- package/dist/src/presentation/web/components/ui/tooltip.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/tooltip.js +17 -0
- package/dist/src/presentation/web/hooks/use-deferred-mount.d.ts +10 -0
- package/dist/src/presentation/web/hooks/use-deferred-mount.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-deferred-mount.js +23 -0
- package/dist/src/presentation/web/hooks/use-mobile.d.ts +2 -0
- package/dist/src/presentation/web/hooks/use-mobile.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-mobile.js +15 -0
- package/dist/src/presentation/web/hooks/useTheme.d.ts +1 -2
- package/dist/src/presentation/web/hooks/useTheme.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/useTheme.js +5 -6
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +5 -5
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_not-found.html +2 -2
- package/web/.next/server/app/_not-found.rsc +9 -9
- package/web/.next/server/app/_not-found.segments/_full.segment.rsc +9 -9
- package/web/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
- package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/web/.next/server/app/index.html +2 -2
- package/web/.next/server/app/index.rsc +10 -10
- package/web/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/web/.next/server/app/index.segments/_full.segment.rsc +10 -10
- package/web/.next/server/app/index.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/index.segments/_index.segment.rsc +5 -5
- package/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/web/.next/server/app/page/build-manifest.json +3 -3
- package/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +3 -3
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version.html +2 -2
- package/web/.next/server/app/version.rsc +10 -10
- package/web/.next/server/app/version.segments/_full.segment.rsc +10 -10
- package/web/.next/server/app/version.segments/_head.segment.rsc +3 -3
- package/web/.next/server/app/version.segments/_index.segment.rsc +5 -5
- package/web/.next/server/app/version.segments/_tree.segment.rsc +2 -2
- package/web/.next/server/app/version.segments/version/__PAGE__.segment.rsc +3 -3
- package/web/.next/server/app/version.segments/version.segment.rsc +3 -3
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__36b65e3a._.js → [root-of-the-server]__18ff2ebf._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18ff2ebf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ab31d101._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ab31d101._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__06cb2b2c._.js → [root-of-the-server]__ccf8a903._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ccf8a903._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0f02ab66._.js +1 -1
- package/web/.next/server/chunks/ssr/_0f02ab66._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_19be0743._.js +1 -1
- package/web/.next/server/chunks/ssr/_4582f3c3._.js +3 -0
- package/web/.next/server/chunks/ssr/_4582f3c3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a0c04017._.js +5 -1
- package/web/.next/server/chunks/ssr/_a0c04017._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/404.html +2 -2
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +1 -1
- package/web/.next/static/chunks/33854795ae473cf1.css +1 -0
- package/web/.next/static/chunks/{b3cc49b27e09fa39.js → 37bc3e283f734dca.js} +1 -1
- package/web/.next/static/chunks/5130d7093ad39f4a.js +5 -0
- package/web/.next/static/chunks/523c5cfe0570712c.js +1 -0
- package/web/.next/static/chunks/70993ebedee7eab0.js +2 -0
- package/web/.next/static/chunks/df7d29673e0ac11d.js +1 -0
- package/web/.next/static/chunks/ef1296dbe67d5aae.js +1 -0
- package/web/.next/static/chunks/{turbopack-a05629c8cdde7f2b.js → turbopack-a5a88a85e7ac8e8d.js} +2 -2
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/package.json +2 -1
- package/web/.next/server/chunks/ssr/0d4d2_route-modules_app-page_vendored_ssr_react-server-dom-turbopack-client_105312e6.js +0 -3
- package/web/.next/server/chunks/ssr/0d4d2_route-modules_app-page_vendored_ssr_react-server-dom-turbopack-client_105312e6.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_e28a27cf._.js +0 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_e28a27cf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_server_route-modules_app-page_vendored_ssr_c0d9b5b7._.js +0 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_server_route-modules_app-page_vendored_ssr_c0d9b5b7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__06cb2b2c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b188e6d._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b188e6d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__36b65e3a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_938886f2._.js +0 -3
- package/web/.next/server/chunks/ssr/_938886f2._.js.map +0 -1
- package/web/.next/static/chunks/26dea72d1da677f0.js +0 -1
- package/web/.next/static/chunks/4635405104cd73cd.js +0 -1
- package/web/.next/static/chunks/5353ec32bd6fc978.js +0 -1
- package/web/.next/static/chunks/68c8622bb8338459.js +0 -2
- package/web/.next/static/chunks/abd08b52c2746061.css +0 -1
- package/web/.next/static/chunks/b602eefc57a3dcc6.js +0 -1
- package/web/.next/static/chunks/cfef0d24c122a550.js +0 -1
- /package/web/.next/static/{NPoGKKPZqjVtoh4TrElhz → ozzHAkZyxX7nXyxpqufBs}/_buildManifest.js +0 -0
- /package/web/.next/static/{NPoGKKPZqjVtoh4TrElhz → ozzHAkZyxX7nXyxpqufBs}/_clientMiddlewareManifest.json +0 -0
- /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 @@
|
|
|
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
|
package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map
ADDED
|
@@ -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
|
+
}
|
package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.d.ts
ADDED
|
@@ -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"}
|
package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.stories.js
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.js
ADDED
|
@@ -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;
|
|
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 {
|
|
4
|
-
import {
|
|
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
|
-
|
|
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 @@
|
|
|
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
|
|
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;
|
|
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(
|
|
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
|
|
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:
|
|
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: '
|
|
8
|
-
secondary: '
|
|
9
|
-
destructive: '
|
|
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
|
-
|
|
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;
|
|
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(
|
|
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
|
|
10
|
-
destructive: 'bg-destructive
|
|
11
|
-
outline: '
|
|
12
|
-
secondary: 'bg-secondary text-secondary-foreground
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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 })),
|
|
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
|
|
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,
|
|
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
|
-
|
|
5
|
-
return (_jsx("input", { type: type, className: cn('
|
|
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
|
|
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"}
|