@parhelia/core 0.1.12322 → 0.1.12325

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.
@@ -1,7 +0,0 @@
1
- import type { ProjectWithPermission } from "../types";
2
- export declare function ProjectList(props: {
3
- projects: ProjectWithPermission[];
4
- selectedProjectId: string | null;
5
- onSelectProject: (projectId: string) => void;
6
- onProjectsChanged: () => void;
7
- }): import("react/jsx-runtime").JSX.Element;
@@ -1,74 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo, useState } from "react";
3
- import { toast } from "sonner";
4
- import { Plus, Settings, FolderKanban, LayoutGrid, Shield, Trash2 } from "lucide-react";
5
- import { Button } from "../../components/ui/button";
6
- import { cn } from "../../lib/utils";
7
- import { useEditContext } from "../../editor/client/editContext";
8
- import { deleteProject } from "../services/taskService";
9
- import { CreateProjectDialog } from "./CreateProjectDialog";
10
- import { ProjectSettingsDialog } from "./ProjectSettingsDialog";
11
- import { flattenProjectsHierarchy } from "../utils/projectHierarchy";
12
- export function ProjectList(props) {
13
- const { projects, selectedProjectId, onSelectProject, onProjectsChanged } = props;
14
- const editContext = useEditContext();
15
- const [createOpen, setCreateOpen] = useState(false);
16
- const [settingsProjectId, setSettingsProjectId] = useState(null);
17
- const selected = useMemo(() => projects.find((p) => p.project.projectId === selectedProjectId) ?? null, [projects, selectedProjectId]);
18
- const orderedProjects = useMemo(() => flattenProjectsHierarchy(projects.map((projectWithPermission) => ({
19
- ...projectWithPermission,
20
- projectId: projectWithPermission.project.projectId,
21
- parentProjectId: projectWithPermission.project.parentProjectId ?? null,
22
- title: projectWithPermission.project.title,
23
- }))), [projects]);
24
- const handleDeleteProject = (projectId, title) => {
25
- const runDelete = async () => {
26
- const result = await deleteProject(projectId);
27
- if (result.type !== "success") {
28
- toast.error(result.summary || "Failed to delete project");
29
- return;
30
- }
31
- toast.success("Project deleted");
32
- const fallbackProjectId = projects.find((p) => p.project.projectId !== projectId)?.project.projectId;
33
- await onProjectsChanged();
34
- if (selectedProjectId === projectId && fallbackProjectId) {
35
- onSelectProject(fallbackProjectId);
36
- }
37
- };
38
- if (editContext?.confirm) {
39
- editContext.confirm({
40
- header: "Delete project",
41
- message: `Are you sure you want to delete \"${title}\"?\n\nThis action cannot be undone.`,
42
- acceptLabel: "Delete",
43
- showCancel: true,
44
- accept: () => {
45
- void runDelete();
46
- },
47
- });
48
- return;
49
- }
50
- void runDelete();
51
- };
52
- return (_jsxs("div", { className: "flex h-full flex-col bg-slate-50/30 border-r", children: [_jsxs("div", { className: "flex items-center justify-between px-4 py-4 mb-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(FolderKanban, { className: "h-5 w-5 text-primary" }), _jsx("h2", { className: "text-sm font-bold uppercase tracking-wider text-slate-500", children: "Projects" })] }), _jsx(Button, { size: "icon", variant: "ghost", className: "h-8 w-8 rounded-full hover:bg-white hover:shadow-sm", onClick: () => setCreateOpen(true), children: _jsx(Plus, { className: "h-4 w-4" }) })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsx("div", { className: "flex flex-col gap-1 px-3 pb-4", children: projects.length === 0 ? (_jsx("div", { className: "px-4 py-8 text-center rounded-xl border border-dashed border-slate-200 bg-white/50", children: _jsx("p", { className: "text-xs text-slate-400", children: "No projects yet" }) })) : (orderedProjects.map((p) => {
53
- const isSelected = p.project.projectId === selectedProjectId;
54
- const isOwner = p.permission === "Owner";
55
- const depthIndent = Math.max(0, Math.min(p.depth ?? 0, 6)) * 14;
56
- return (_jsxs("div", { className: cn("group relative flex items-center justify-between gap-2 rounded-xl px-3 py-2.5 transition-all cursor-pointer", isSelected
57
- ? "bg-white text-primary shadow-sm ring-1 ring-slate-200"
58
- : "text-slate-600 hover:bg-white/60"), style: { marginLeft: depthIndent > 0 ? `${depthIndent}px` : undefined }, onClick: () => onSelectProject(p.project.projectId), children: [isSelected && (_jsx("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 w-1 h-6 bg-primary rounded-r-full" })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex items-center gap-2 mb-0.5", children: [_jsx(LayoutGrid, { className: cn("h-3.5 w-3.5", isSelected ? "text-primary" : "text-slate-400") }), _jsx("div", { className: cn("truncate text-sm font-semibold tracking-tight", isSelected ? "text-slate-900" : "text-slate-700"), children: p.project.title })] }), _jsxs("div", { className: "flex items-center gap-1.5 pl-5", children: [_jsx(Shield, { className: "h-2.5 w-2.5 text-slate-400" }), _jsx("span", { className: "text-[10px] uppercase font-bold tracking-widest text-slate-400", children: p.permission })] })] }), isOwner ? (_jsxs("div", { className: cn("flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity", isSelected && "opacity-100"), children: [_jsx(Button, { size: "icon", variant: "ghost", className: "h-7 w-7 rounded-lg hover:bg-slate-100", onClick: (e) => {
59
- e.stopPropagation();
60
- setSettingsProjectId(p.project.projectId);
61
- }, title: "Project settings", children: _jsx(Settings, { className: "h-3.5 w-3.5" }) }), _jsx(Button, { size: "icon", variant: "ghost", className: "h-7 w-7 rounded-lg text-destructive hover:bg-destructive/10 hover:text-destructive", onClick: (e) => {
62
- e.stopPropagation();
63
- handleDeleteProject(p.project.projectId, p.project.title);
64
- }, title: "Delete project", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) })] })) : null] }, p.project.projectId));
65
- })) }) }), _jsx(CreateProjectDialog, { open: createOpen, onOpenChange: setCreateOpen, projects: projects, onCreated: async (newProjectId) => {
66
- await onProjectsChanged();
67
- if (newProjectId)
68
- onSelectProject(newProjectId);
69
- } }), _jsx(ProjectSettingsDialog, { open: !!settingsProjectId, onOpenChange: (open) => {
70
- if (!open)
71
- setSettingsProjectId(null);
72
- }, projectId: settingsProjectId, selectedProject: selected, onChanged: onProjectsChanged })] }));
73
- }
74
- //# sourceMappingURL=ProjectList.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProjectList.js","sourceRoot":"","sources":["../../../src/task-board/components/ProjectList.tsx"],"names":[],"mappings":"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"}