@industry-theme/alexandria-panels 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +536 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/mocks/panelContext.d.ts +47 -0
- package/dist/mocks/panelContext.d.ts.map +1 -0
- package/dist/panels/LocalProjectsPanel/LocalProjectCard.d.ts +13 -0
- package/dist/panels/LocalProjectsPanel/LocalProjectCard.d.ts.map +1 -0
- package/dist/panels/LocalProjectsPanel/LocalProjectsPanel.stories.d.ts +51 -0
- package/dist/panels/LocalProjectsPanel/LocalProjectsPanel.stories.d.ts.map +1 -0
- package/dist/panels/LocalProjectsPanel/RepositoryAvatar.d.ts +12 -0
- package/dist/panels/LocalProjectsPanel/RepositoryAvatar.d.ts.map +1 -0
- package/dist/panels/LocalProjectsPanel/index.d.ts +34 -0
- package/dist/panels/LocalProjectsPanel/index.d.ts.map +1 -0
- package/dist/panels/LocalProjectsPanel/tools.d.ts +31 -0
- package/dist/panels/LocalProjectsPanel/tools.d.ts.map +1 -0
- package/dist/panels/LocalProjectsPanel/types.d.ts +134 -0
- package/dist/panels/LocalProjectsPanel/types.d.ts.map +1 -0
- package/dist/panels.bundle.css +86 -0
- package/dist/panels.bundle.js +1282 -0
- package/dist/panels.bundle.js.map +1 -0
- package/dist/tools/index.d.ts +35 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools.bundle.js +98 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { LocalProjectsPanel } from './index';
|
|
3
|
+
import { LocalProjectCard } from './LocalProjectCard';
|
|
4
|
+
import { RepositoryAvatar } from './RepositoryAvatar';
|
|
5
|
+
/**
|
|
6
|
+
* LocalProjectsPanel - Browse and manage local Alexandria repositories
|
|
7
|
+
*
|
|
8
|
+
* This panel displays a list of locally registered repositories with:
|
|
9
|
+
* - Search/filter functionality
|
|
10
|
+
* - Add new project capability
|
|
11
|
+
* - Open/focus project actions
|
|
12
|
+
* - Remove project from registry
|
|
13
|
+
*/
|
|
14
|
+
declare const meta: Meta<typeof LocalProjectsPanel>;
|
|
15
|
+
export default meta;
|
|
16
|
+
type Story = StoryObj<typeof LocalProjectsPanel>;
|
|
17
|
+
/**
|
|
18
|
+
* Default state with mock repositories
|
|
19
|
+
*/
|
|
20
|
+
export declare const Default: Story;
|
|
21
|
+
/**
|
|
22
|
+
* Empty state - no repositories registered
|
|
23
|
+
*/
|
|
24
|
+
export declare const Empty: Story;
|
|
25
|
+
/**
|
|
26
|
+
* Loading state
|
|
27
|
+
*/
|
|
28
|
+
export declare const Loading: Story;
|
|
29
|
+
/**
|
|
30
|
+
* Without add button (no selectDirectory action)
|
|
31
|
+
*/
|
|
32
|
+
export declare const ReadOnly: Story;
|
|
33
|
+
/**
|
|
34
|
+
* LocalProjectCard component stories
|
|
35
|
+
*/
|
|
36
|
+
export declare const CardDefault: StoryObj<typeof LocalProjectCard>;
|
|
37
|
+
export declare const CardSelected: StoryObj<typeof LocalProjectCard>;
|
|
38
|
+
export declare const CardWindowOpen: StoryObj<typeof LocalProjectCard>;
|
|
39
|
+
export declare const CardWindowOpening: StoryObj<typeof LocalProjectCard>;
|
|
40
|
+
export declare const CardMinimalMode: StoryObj<typeof LocalProjectCard>;
|
|
41
|
+
export declare const CardAddToWorkspaceMode: StoryObj<typeof LocalProjectCard>;
|
|
42
|
+
export declare const CardLocalOnly: StoryObj<typeof LocalProjectCard>;
|
|
43
|
+
export declare const CardCompact: StoryObj<typeof LocalProjectCard>;
|
|
44
|
+
export declare const CardCompactList: StoryObj<typeof LocalProjectCard>;
|
|
45
|
+
/**
|
|
46
|
+
* RepositoryAvatar component stories
|
|
47
|
+
*/
|
|
48
|
+
export declare const AvatarWithOwner: StoryObj<typeof RepositoryAvatar>;
|
|
49
|
+
export declare const AvatarSizes: StoryObj<typeof RepositoryAvatar>;
|
|
50
|
+
export declare const AvatarFallback: StoryObj<typeof RepositoryAvatar>;
|
|
51
|
+
//# sourceMappingURL=LocalProjectsPanel.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalProjectsPanel.stories.d.ts","sourceRoot":"","sources":["../../../src/panels/LocalProjectsPanel/LocalProjectsPanel.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD;;;;;;;;GAQG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAiCzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,KAsBnB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAsBrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAWtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAazD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAc1D,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAc5D,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAc/D,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAa7D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAapE,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAa3D,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAczD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAgB7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAU7D,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAWzD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,OAAO,gBAAgB,CAe5D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { RepositoryAvatarProps } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* RepositoryAvatar - Displays repository owner avatar
|
|
5
|
+
*
|
|
6
|
+
* Priority:
|
|
7
|
+
* 1. customAvatarUrl prop
|
|
8
|
+
* 2. GitHub avatar from owner username
|
|
9
|
+
* 3. Fallback icon or initial
|
|
10
|
+
*/
|
|
11
|
+
export declare const RepositoryAvatar: React.FC<RepositoryAvatarProps>;
|
|
12
|
+
//# sourceMappingURL=RepositoryAvatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RepositoryAvatar.d.ts","sourceRoot":"","sources":["../../../src/panels/LocalProjectsPanel/RepositoryAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAyD5D,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './LocalProjectsPanel.css';
|
|
3
|
+
import type { PanelComponentProps } from '../../types';
|
|
4
|
+
/**
|
|
5
|
+
* LocalProjectsPanel - Browse and manage local Alexandria repositories
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - List all registered local repositories
|
|
9
|
+
* - Search/filter by name, owner, or path
|
|
10
|
+
* - Add new projects via directory picker
|
|
11
|
+
* - Open projects in dev workspace
|
|
12
|
+
* - Remove projects from registry
|
|
13
|
+
*
|
|
14
|
+
* Data Slices:
|
|
15
|
+
* - alexandriaRepositories: List of AlexandriaEntry objects
|
|
16
|
+
*
|
|
17
|
+
* Events Emitted:
|
|
18
|
+
* - industry-theme.local-projects:repository-selected
|
|
19
|
+
* - industry-theme.local-projects:repository-opened
|
|
20
|
+
*
|
|
21
|
+
* Events Listened:
|
|
22
|
+
* - industry-theme.local-projects:filter
|
|
23
|
+
* - industry-theme.local-projects:select-repository
|
|
24
|
+
* - industry-theme.local-projects:open-repository
|
|
25
|
+
*/
|
|
26
|
+
export declare const LocalProjectsPanel: React.FC<PanelComponentProps>;
|
|
27
|
+
/**
|
|
28
|
+
* LocalProjectsPanelPreview - Compact preview for panel tabs/thumbnails
|
|
29
|
+
*/
|
|
30
|
+
export declare const LocalProjectsPanelPreview: React.FC;
|
|
31
|
+
export type { LocalProjectCardProps, RepositoryAvatarProps } from './types';
|
|
32
|
+
export { LocalProjectCard } from './LocalProjectCard';
|
|
33
|
+
export { RepositoryAvatar } from './RepositoryAvatar';
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/panels/LocalProjectsPanel/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAGzE,OAAO,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAoXvD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAM5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EA6C7C,CAAC;AAGF,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UTCP Tools for LocalProjectsPanel
|
|
3
|
+
*
|
|
4
|
+
* These tools allow AI agents to interact with the Local Projects panel
|
|
5
|
+
* through the Universal Tool Communication Protocol.
|
|
6
|
+
*/
|
|
7
|
+
import type { PanelTool, PanelToolsMetadata } from '../../types';
|
|
8
|
+
/**
|
|
9
|
+
* Filter projects tool
|
|
10
|
+
* Allows filtering the project list by search term
|
|
11
|
+
*/
|
|
12
|
+
export declare const filterProjectsTool: PanelTool;
|
|
13
|
+
/**
|
|
14
|
+
* Select project tool
|
|
15
|
+
* Allows selecting a specific project in the list
|
|
16
|
+
*/
|
|
17
|
+
export declare const selectProjectTool: PanelTool;
|
|
18
|
+
/**
|
|
19
|
+
* Open project tool
|
|
20
|
+
* Allows opening a project in the dev workspace
|
|
21
|
+
*/
|
|
22
|
+
export declare const openProjectTool: PanelTool;
|
|
23
|
+
/**
|
|
24
|
+
* All tools for the LocalProjectsPanel
|
|
25
|
+
*/
|
|
26
|
+
export declare const localProjectsPanelTools: PanelTool[];
|
|
27
|
+
/**
|
|
28
|
+
* Tools metadata for registration
|
|
29
|
+
*/
|
|
30
|
+
export declare const localProjectsPanelToolsMetadata: PanelToolsMetadata;
|
|
31
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/panels/LocalProjectsPanel/tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIjE;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAyBhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAyB/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAyB7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,EAI9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,EAAE,kBAK7C,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalProjectsPanel Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Types for the Local Projects panel, extending core-library types
|
|
5
|
+
*/
|
|
6
|
+
import type { AlexandriaEntry } from '@principal-ai/alexandria-core-library/types';
|
|
7
|
+
import type { PanelActions } from '../../types';
|
|
8
|
+
/**
|
|
9
|
+
* Data slice for Alexandria repositories
|
|
10
|
+
* Provided by the host application through panel context
|
|
11
|
+
*/
|
|
12
|
+
export interface AlexandriaRepositoriesSlice {
|
|
13
|
+
/** List of registered local repositories */
|
|
14
|
+
repositories: AlexandriaEntry[];
|
|
15
|
+
/** Whether repositories are currently loading */
|
|
16
|
+
loading: boolean;
|
|
17
|
+
/** Error message if loading failed */
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Window state for a repository
|
|
22
|
+
*/
|
|
23
|
+
export type RepositoryWindowState = 'closed' | 'opening' | 'ready';
|
|
24
|
+
/**
|
|
25
|
+
* Extended actions for LocalProjectsPanel
|
|
26
|
+
* These are provided by the host application
|
|
27
|
+
*/
|
|
28
|
+
export interface LocalProjectsPanelActions extends PanelActions {
|
|
29
|
+
/**
|
|
30
|
+
* Open a directory picker dialog
|
|
31
|
+
* @returns Selected directory info or null if cancelled
|
|
32
|
+
*/
|
|
33
|
+
selectDirectory?: () => Promise<{
|
|
34
|
+
path: string;
|
|
35
|
+
name: string;
|
|
36
|
+
} | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Register a new repository in Alexandria
|
|
39
|
+
* @param name - Repository name
|
|
40
|
+
* @param path - Local path to the repository
|
|
41
|
+
*/
|
|
42
|
+
registerRepository?: (name: string, path: string) => Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Remove a repository from Alexandria
|
|
45
|
+
* @param name - Repository name
|
|
46
|
+
* @param deleteLocal - Whether to delete local files
|
|
47
|
+
*/
|
|
48
|
+
removeRepository?: (name: string, deleteLocal: boolean) => Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Open a repository in dev workspace
|
|
51
|
+
* @param entry - Alexandria entry to open
|
|
52
|
+
*/
|
|
53
|
+
openRepository?: (entry: AlexandriaEntry) => Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Focus an already-open repository window
|
|
56
|
+
* @param entry - Alexandria entry to focus
|
|
57
|
+
*/
|
|
58
|
+
focusRepository?: (entry: AlexandriaEntry) => Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Check if a repository window is open
|
|
61
|
+
* @param entry - Alexandria entry to check
|
|
62
|
+
* @returns Window state
|
|
63
|
+
*/
|
|
64
|
+
getRepositoryWindowState?: (entry: AlexandriaEntry) => Promise<RepositoryWindowState>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Action mode for LocalProjectCard
|
|
68
|
+
* Controls which action buttons are displayed
|
|
69
|
+
*/
|
|
70
|
+
export type CardActionMode = 'default' | 'add-to-workspace' | 'minimal';
|
|
71
|
+
/**
|
|
72
|
+
* Props for LocalProjectCard component
|
|
73
|
+
*/
|
|
74
|
+
export interface LocalProjectCardProps {
|
|
75
|
+
/** Alexandria entry data */
|
|
76
|
+
entry: AlexandriaEntry;
|
|
77
|
+
/** Action mode controls which buttons are shown */
|
|
78
|
+
actionMode?: CardActionMode;
|
|
79
|
+
/** Whether this card is currently selected */
|
|
80
|
+
isSelected?: boolean;
|
|
81
|
+
/** Callback when card is clicked/selected */
|
|
82
|
+
onSelect?: (entry: AlexandriaEntry) => void;
|
|
83
|
+
/** Callback when open button is clicked */
|
|
84
|
+
onOpen?: (entry: AlexandriaEntry) => void;
|
|
85
|
+
/** Callback when remove button is clicked */
|
|
86
|
+
onRemove?: (entry: AlexandriaEntry) => void;
|
|
87
|
+
/** Callback for add-to-workspace action */
|
|
88
|
+
onAddToWorkspace?: (entry: AlexandriaEntry) => void;
|
|
89
|
+
/** Whether an operation is in progress */
|
|
90
|
+
isLoading?: boolean;
|
|
91
|
+
/** Current window state for this repository */
|
|
92
|
+
windowState?: RepositoryWindowState;
|
|
93
|
+
/** Compact mode - hides path/info, stacks buttons under name */
|
|
94
|
+
compact?: boolean;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Props for RepositoryAvatar component
|
|
98
|
+
*/
|
|
99
|
+
export interface RepositoryAvatarProps {
|
|
100
|
+
/** GitHub owner username for avatar URL */
|
|
101
|
+
owner?: string;
|
|
102
|
+
/** Custom avatar URL (takes precedence over owner) */
|
|
103
|
+
customAvatarUrl?: string | null;
|
|
104
|
+
/** Avatar size in pixels */
|
|
105
|
+
size?: number;
|
|
106
|
+
/** Fallback content when no avatar available */
|
|
107
|
+
fallbackIcon?: React.ReactNode;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Event payloads for LocalProjectsPanel
|
|
111
|
+
*/
|
|
112
|
+
export interface LocalProjectsPanelEventPayloads {
|
|
113
|
+
/** Filter projects event */
|
|
114
|
+
'filter': {
|
|
115
|
+
filter: string;
|
|
116
|
+
};
|
|
117
|
+
/** Select project event */
|
|
118
|
+
'select-repository': {
|
|
119
|
+
identifier: string;
|
|
120
|
+
};
|
|
121
|
+
/** Open project event */
|
|
122
|
+
'open-repository': {
|
|
123
|
+
identifier: string;
|
|
124
|
+
};
|
|
125
|
+
/** Repository selected notification */
|
|
126
|
+
'repository-selected': {
|
|
127
|
+
entry: AlexandriaEntry;
|
|
128
|
+
};
|
|
129
|
+
/** Repository opened notification */
|
|
130
|
+
'repository-opened': {
|
|
131
|
+
entry: AlexandriaEntry;
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/panels/LocalProjectsPanel/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/* Container query for responsive LocalProjectCard */
|
|
2
|
+
.local-projects-panel {
|
|
3
|
+
container-type: inline-size;
|
|
4
|
+
container-name: local-projects;
|
|
5
|
+
height: 100%;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.local-project-card {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: row;
|
|
11
|
+
align-items: center;
|
|
12
|
+
gap: 12px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.local-project-card__content {
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
gap: 12px;
|
|
19
|
+
flex: 1;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.local-project-card__info {
|
|
24
|
+
flex: 1;
|
|
25
|
+
min-width: 0;
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-direction: column;
|
|
28
|
+
gap: 2px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.local-project-card__path,
|
|
32
|
+
.local-project-card__meta {
|
|
33
|
+
display: flex;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.local-project-card__actions {
|
|
37
|
+
display: flex;
|
|
38
|
+
gap: 4px;
|
|
39
|
+
flex-shrink: 0;
|
|
40
|
+
align-items: center;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.local-project-card__actions--stacked {
|
|
44
|
+
display: none;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Compact mode when container is 400px or less */
|
|
48
|
+
@container local-projects (max-width: 400px) {
|
|
49
|
+
.local-projects-panel {
|
|
50
|
+
padding: 8px !important;
|
|
51
|
+
gap: 8px !important;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.local-projects-list {
|
|
55
|
+
gap: 12px !important;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.local-project-card {
|
|
59
|
+
flex-direction: column;
|
|
60
|
+
align-items: stretch;
|
|
61
|
+
gap: 6px;
|
|
62
|
+
padding: 0 !important;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.local-project-card__content {
|
|
66
|
+
gap: 8px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.local-project-card__path,
|
|
70
|
+
.local-project-card__meta {
|
|
71
|
+
display: none;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.local-project-card__actions {
|
|
75
|
+
display: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.local-project-card__actions--stacked {
|
|
79
|
+
display: flex;
|
|
80
|
+
gap: 4px;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.local-project-card__actions--stacked button {
|
|
84
|
+
flex: 1;
|
|
85
|
+
}
|
|
86
|
+
}
|