@industry-theme/backlogmd-kanban-panel 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/README.md ADDED
@@ -0,0 +1,184 @@
1
+ # Kanban Panel for Industry Theme Framework
2
+
3
+ A Kanban board panel extension for visualizing [Backlog.md](https://github.com/MrLesk/Backlog.md) tasks in the Principal ADE industry-themed panel framework.
4
+
5
+ ## Features
6
+
7
+ - ๐Ÿ“‹ **Kanban Board View** - Visual task organization across status columns (To Do, In Progress, Done)
8
+ - ๐ŸŽจ **Industry Theme Integration** - Fully styled with industry theme colors and typography
9
+ - ๐Ÿท๏ธ **Task Metadata** - Display task labels, assignees, and priority indicators
10
+ - ๐ŸŽฏ **Priority Color Coding** - Visual priority indication with colored borders
11
+ - ๐Ÿ“ **Task Descriptions** - Truncated descriptions with full task details
12
+ - ๐Ÿงช **Mock Data Support** - Built-in mock data generator for testing
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ # Install dependencies
18
+ bun install
19
+
20
+ # Build the panel
21
+ bun run build
22
+
23
+ # Run in development mode with watch
24
+ bun run dev
25
+
26
+ # Run Storybook for component development
27
+ bun run storybook
28
+ ```
29
+
30
+ ## Project Structure
31
+
32
+ ```
33
+ src/
34
+ โ”œโ”€โ”€ panels/
35
+ โ”‚ โ”œโ”€โ”€ KanbanPanel.tsx # Main panel component
36
+ โ”‚ โ””โ”€โ”€ kanban/
37
+ โ”‚ โ”œโ”€โ”€ backlog-types/ # Copied from Backlog.md
38
+ โ”‚ โ”‚ โ”œโ”€โ”€ index.ts # Task type definitions
39
+ โ”‚ โ”‚ โ””โ”€โ”€ README.md # Attribution
40
+ โ”‚ โ”œโ”€โ”€ backlog-utils/ # Copied from Backlog.md
41
+ โ”‚ โ”‚ โ”œโ”€โ”€ board.ts # Board utilities
42
+ โ”‚ โ”‚ โ””โ”€โ”€ README.md # Attribution
43
+ โ”‚ โ”œโ”€โ”€ components/ # Copied from Backlog.md
44
+ โ”‚ โ”‚ โ”œโ”€โ”€ Board.tsx # Board component
45
+ โ”‚ โ”‚ โ”œโ”€โ”€ TaskCard.tsx # Task card component
46
+ โ”‚ โ”‚ โ”œโ”€โ”€ TaskColumn.tsx # Column component
47
+ โ”‚ โ”‚ โ””โ”€โ”€ README.md # Attribution
48
+ โ”‚ โ”œโ”€โ”€ hooks/ # Custom hooks (future)
49
+ โ”‚ โ””โ”€โ”€ mocks/
50
+ โ”‚ โ””โ”€โ”€ mockData.ts # Mock data generator
51
+ โ”œโ”€โ”€ index.tsx # Panel registration
52
+ โ””โ”€โ”€ types/
53
+ โ””โ”€โ”€ index.ts # Type re-exports
54
+ ```
55
+
56
+ ## Usage
57
+
58
+ ### Registering the Panel
59
+
60
+ The panel is automatically registered when the package is loaded:
61
+
62
+ ```typescript
63
+ import { panels } from '@principal-ade/kanban-panel';
64
+
65
+ // Panel metadata
66
+ {
67
+ id: 'principal-ade.kanban-panel',
68
+ name: 'Kanban Board',
69
+ icon: '๐Ÿ“‹',
70
+ version: '0.1.0',
71
+ slices: ['fileTree']
72
+ }
73
+ ```
74
+
75
+ ### Mock Data
76
+
77
+ The panel currently uses mock data for testing. The mock data generator creates sample tasks with:
78
+
79
+ - Different statuses (To Do, In Progress, Done)
80
+ - Priority levels (high, medium, low)
81
+ - Labels and assignees
82
+ - Descriptions and acceptance criteria
83
+ - Task dependencies
84
+
85
+ ```typescript
86
+ import { generateMockTasks } from './panels/kanban/mocks/mockData';
87
+
88
+ const tasks = generateMockTasks();
89
+ ```
90
+
91
+ ## Attribution
92
+
93
+ This panel incorporates code from [Backlog.md](https://github.com/MrLesk/Backlog.md):
94
+
95
+ - **Source commit:** 9b2b4aa4ce7c9dc454215419413109f3efb04708
96
+ - **Source date:** 2025-11-15
97
+ - **License:** MIT
98
+ - **Author:** Alex Gavrilescu (@MrLesk)
99
+
100
+ See individual README files in each directory for specific attribution details.
101
+
102
+ ### Migration Plan
103
+
104
+ The copied code is temporary. Once Backlog.md publishes `@backlog/core` or similar packages, we will migrate to using the official packages. See [KANBAN_PANEL_DESIGN.md](./KANBAN_PANEL_DESIGN.md) for details.
105
+
106
+ ## Development Roadmap
107
+
108
+ ### โœ… Phase 1: Foundation (Complete)
109
+ - [x] Set up panel structure and basic layout
110
+ - [x] Create mock data generator for testing
111
+ - [x] Implement basic board component with static columns
112
+ - [x] Create task card component with basic styling
113
+ - [x] Adapt to industry theme colors and typography
114
+
115
+ ### โœ… Phase 2: Core Functionality (Complete)
116
+ - [x] Add data fetching hook (`useKanbanData`)
117
+ - [x] Implement task sorting and filtering (by priority, ordinal, date)
118
+ - [x] Create reusable `KanbanColumn` component
119
+ - [x] Integrate with industry theme system
120
+ - [x] Add error handling and loading states
121
+ - [x] Create Storybook stories for testing
122
+ - [ ] Implement Backlog.md markdown parser (Future)
123
+ - [ ] Add drag-and-drop functionality (Future)
124
+ - [ ] Handle status updates with file writes (Future)
125
+
126
+ ### ๐Ÿ“‹ Phase 3: Advanced Features
127
+ - [ ] Task creation and editing
128
+ - [ ] Support for labels, assignees, priority
129
+ - [ ] Implement subtask relationships
130
+ - [ ] Add task detail modal/panel
131
+ - [ ] Handle dependencies visualization
132
+
133
+ ### ๐ŸŽจ Phase 4: Polish & Integration
134
+ - [ ] Responsive design improvements
135
+ - [ ] Error handling and loading states
136
+ - [ ] Data persistence (write back to markdown)
137
+ - [ ] Panel configuration options
138
+ - [ ] Testing and documentation
139
+
140
+ ## Scripts
141
+
142
+ ```bash
143
+ # Build
144
+ bun run build # Full build (clean + bundle + types)
145
+ bun run build:panel # Build panel bundle only
146
+ bun run build:types # Generate TypeScript declarations
147
+
148
+ # Development
149
+ bun run dev # Watch mode for development
150
+ bun run typecheck # Type checking without emit
151
+ bun run storybook # Component development environment
152
+
153
+ # Code Quality
154
+ bun run lint # Run ESLint
155
+ bun run lint:fix # Auto-fix ESLint issues
156
+ bun run format # Format with Prettier
157
+ bun run format:check # Check formatting
158
+
159
+ # Testing
160
+ bun run test # Run tests
161
+ bun run test:watch # Watch mode for tests
162
+ ```
163
+
164
+ ## Dependencies
165
+
166
+ - **@principal-ade/panel-framework-core** - Panel framework integration
167
+ - **@principal-ade/industry-theme** - Industry theme system
168
+ - **React 19** - UI library
169
+ - **TypeScript** - Type safety
170
+ - **lucide-react** - Icon library
171
+
172
+ ## License
173
+
174
+ MIT - See LICENSE file for details
175
+
176
+ ## Contributing
177
+
178
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for development guidelines.
179
+
180
+ ## Documentation
181
+
182
+ - [Design Document](./KANBAN_PANEL_DESIGN.md) - Detailed design and implementation plan
183
+ - [Quick Start](./QUICKSTART.md) - Get started quickly
184
+ - [Project Structure](./PROJECT_STRUCTURE.md) - Codebase organization
@@ -0,0 +1,17 @@
1
+ import type { PanelDefinition } from './types';
2
+ /**
3
+ * Export array of panel definitions.
4
+ * This is the required export for panel extensions.
5
+ */
6
+ export declare const panels: PanelDefinition[];
7
+ /**
8
+ * Optional: Called once when the entire package is loaded.
9
+ * Use this for package-level initialization.
10
+ */
11
+ export declare const onPackageLoad: () => Promise<void>;
12
+ /**
13
+ * Optional: Called once when the package is unloaded.
14
+ * Use this for package-level cleanup.
15
+ */
16
+ export declare const onPackageUnload: () => Promise<void>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,eAAe,EA4BnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,qBAGzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,qBAG3B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import type { PanelComponentProps, PanelContextValue, PanelActions, PanelEventEmitter } from '../types';
3
+ /**
4
+ * Mock Panel Context for Storybook
5
+ */
6
+ export declare const createMockContext: (overrides?: Partial<PanelContextValue>) => PanelContextValue;
7
+ /**
8
+ * Mock Panel Actions for Storybook
9
+ */
10
+ export declare const createMockActions: (overrides?: Partial<PanelActions>) => PanelActions;
11
+ /**
12
+ * Mock Event Emitter for Storybook
13
+ */
14
+ export declare const createMockEvents: () => PanelEventEmitter;
15
+ /**
16
+ * Mock Panel Props Provider
17
+ * Wraps components with mock context for Storybook
18
+ */
19
+ export declare const MockPanelProvider: React.FC<{
20
+ children: (props: PanelComponentProps) => React.ReactNode;
21
+ contextOverrides?: Partial<PanelContextValue>;
22
+ actionsOverrides?: Partial<PanelActions>;
23
+ }>;
24
+ //# sourceMappingURL=panelContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panelContext.d.ts","sourceRoot":"","sources":["../../src/mocks/panelContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EAIlB,MAAM,UAAU,CAAC;AA+BlB;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,YAAY,OAAO,CAAC,iBAAiB,CAAC,KACrC,iBAiHF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,YAAY,OAAO,CAAC,YAAY,CAAC,KAChC,YAkBD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,iBAwCnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9C,gBAAgB,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1C,CAMA,CAAC"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { PanelComponentProps } from '../types';
3
+ /**
4
+ * KanbanPanel - A kanban board panel for visualizing Backlog.md tasks.
5
+ *
6
+ * This panel shows:
7
+ * - Kanban board with configurable status columns
8
+ * - Task cards with priority indicators
9
+ * - Labels and assignee information
10
+ * - Mock data for testing (to be replaced with real data)
11
+ */
12
+ export declare const KanbanPanel: React.FC<PanelComponentProps>;
13
+ //# sourceMappingURL=KanbanPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KanbanPanel.d.ts","sourceRoot":"","sources":["../../src/panels/KanbanPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAsIpD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAMrD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ declare const meta: {
3
+ title: string;
4
+ component: import("react").FC<import("@principal-ade/panel-framework-core").PanelComponentProps>;
5
+ parameters: {
6
+ layout: string;
7
+ };
8
+ tags: string[];
9
+ };
10
+ export default meta;
11
+ type Story = StoryObj<typeof meta>;
12
+ export declare const Default: Story;
13
+ export declare const WithRepository: Story;
14
+ export declare const Loading: Story;
15
+ //# sourceMappingURL=KanbanPanel.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KanbanPanel.stories.d.ts","sourceRoot":"","sources":["../../src/panels/KanbanPanel.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIvD,QAAA,MAAM,IAAI;;;;;;;CAO0B,CAAC;AAErC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAkB5B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAarB,CAAC"}
@@ -0,0 +1,196 @@
1
+ export type TaskStatus = string;
2
+ export interface AcceptanceCriterion {
3
+ index: number;
4
+ text: string;
5
+ checked: boolean;
6
+ }
7
+ export interface AcceptanceCriterionInput {
8
+ text: string;
9
+ checked?: boolean;
10
+ }
11
+ export interface Task {
12
+ id: string;
13
+ title: string;
14
+ status: TaskStatus;
15
+ assignee: string[];
16
+ reporter?: string;
17
+ createdDate: string;
18
+ updatedDate?: string;
19
+ labels: string[];
20
+ milestone?: string;
21
+ dependencies: string[];
22
+ readonly rawContent?: string;
23
+ description?: string;
24
+ implementationPlan?: string;
25
+ implementationNotes?: string;
26
+ /** Structured acceptance criteria parsed from body (checked state + text + index) */
27
+ acceptanceCriteriaItems?: AcceptanceCriterion[];
28
+ parentTaskId?: string;
29
+ subtasks?: string[];
30
+ priority?: "high" | "medium" | "low";
31
+ branch?: string;
32
+ ordinal?: number;
33
+ filePath?: string;
34
+ lastModified?: Date;
35
+ source?: "local" | "remote" | "completed";
36
+ }
37
+ export interface TaskCreateInput {
38
+ title: string;
39
+ description?: string;
40
+ status?: TaskStatus;
41
+ priority?: "high" | "medium" | "low";
42
+ labels?: string[];
43
+ assignee?: string[];
44
+ dependencies?: string[];
45
+ parentTaskId?: string;
46
+ implementationPlan?: string;
47
+ implementationNotes?: string;
48
+ acceptanceCriteria?: AcceptanceCriterionInput[];
49
+ rawContent?: string;
50
+ }
51
+ export interface TaskUpdateInput {
52
+ title?: string;
53
+ description?: string;
54
+ status?: TaskStatus;
55
+ priority?: "high" | "medium" | "low";
56
+ labels?: string[];
57
+ addLabels?: string[];
58
+ removeLabels?: string[];
59
+ assignee?: string[];
60
+ ordinal?: number;
61
+ dependencies?: string[];
62
+ addDependencies?: string[];
63
+ removeDependencies?: string[];
64
+ implementationPlan?: string;
65
+ appendImplementationPlan?: string[];
66
+ clearImplementationPlan?: boolean;
67
+ implementationNotes?: string;
68
+ appendImplementationNotes?: string[];
69
+ clearImplementationNotes?: boolean;
70
+ acceptanceCriteria?: AcceptanceCriterionInput[];
71
+ addAcceptanceCriteria?: Array<AcceptanceCriterionInput | string>;
72
+ removeAcceptanceCriteria?: number[];
73
+ checkAcceptanceCriteria?: number[];
74
+ uncheckAcceptanceCriteria?: number[];
75
+ rawContent?: string;
76
+ }
77
+ export interface TaskListFilter {
78
+ status?: string;
79
+ assignee?: string;
80
+ priority?: "high" | "medium" | "low";
81
+ parentTaskId?: string;
82
+ }
83
+ export interface Decision {
84
+ id: string;
85
+ title: string;
86
+ date: string;
87
+ status: "proposed" | "accepted" | "rejected" | "superseded";
88
+ context: string;
89
+ decision: string;
90
+ consequences: string;
91
+ alternatives?: string;
92
+ readonly rawContent: string;
93
+ }
94
+ export interface Document {
95
+ id: string;
96
+ title: string;
97
+ type: "readme" | "guide" | "specification" | "other";
98
+ createdDate: string;
99
+ updatedDate?: string;
100
+ rawContent: string;
101
+ tags?: string[];
102
+ name?: string;
103
+ path?: string;
104
+ lastModified?: string;
105
+ }
106
+ export type SearchResultType = "task" | "document" | "decision";
107
+ export type SearchPriorityFilter = "high" | "medium" | "low";
108
+ export interface SearchMatch {
109
+ key?: string;
110
+ indices: Array<[number, number]>;
111
+ value?: unknown;
112
+ }
113
+ export interface SearchFilters {
114
+ status?: string | string[];
115
+ priority?: SearchPriorityFilter | SearchPriorityFilter[];
116
+ assignee?: string | string[];
117
+ labels?: string | string[];
118
+ }
119
+ export interface SearchOptions {
120
+ query?: string;
121
+ limit?: number;
122
+ types?: SearchResultType[];
123
+ filters?: SearchFilters;
124
+ }
125
+ export interface TaskSearchResult {
126
+ type: "task";
127
+ score: number | null;
128
+ task: Task;
129
+ matches?: SearchMatch[];
130
+ }
131
+ export interface DocumentSearchResult {
132
+ type: "document";
133
+ score: number | null;
134
+ document: Document;
135
+ matches?: SearchMatch[];
136
+ }
137
+ export interface DecisionSearchResult {
138
+ type: "decision";
139
+ score: number | null;
140
+ decision: Decision;
141
+ matches?: SearchMatch[];
142
+ }
143
+ export type SearchResult = TaskSearchResult | DocumentSearchResult | DecisionSearchResult;
144
+ export interface Sequence {
145
+ /** 1-based sequence index */
146
+ index: number;
147
+ /** Tasks that can be executed in parallel within this sequence */
148
+ tasks: Task[];
149
+ }
150
+ export interface BacklogConfig {
151
+ projectName: string;
152
+ defaultAssignee?: string;
153
+ defaultReporter?: string;
154
+ statuses: string[];
155
+ labels: string[];
156
+ milestones: string[];
157
+ defaultStatus?: string;
158
+ dateFormat: string;
159
+ maxColumnWidth?: number;
160
+ taskResolutionStrategy?: "most_recent" | "most_progressed";
161
+ defaultEditor?: string;
162
+ autoOpenBrowser?: boolean;
163
+ defaultPort?: number;
164
+ remoteOperations?: boolean;
165
+ autoCommit?: boolean;
166
+ zeroPaddedIds?: number;
167
+ timezonePreference?: string;
168
+ includeDateTimeInDates?: boolean;
169
+ bypassGitHooks?: boolean;
170
+ checkActiveBranches?: boolean;
171
+ activeBranchDays?: number;
172
+ mcp?: {
173
+ http?: {
174
+ host?: string;
175
+ port?: number;
176
+ auth?: {
177
+ type?: "bearer" | "basic" | "none";
178
+ token?: string;
179
+ username?: string;
180
+ password?: string;
181
+ };
182
+ cors?: {
183
+ origin?: string | string[];
184
+ credentials?: boolean;
185
+ };
186
+ enableDnsRebindingProtection?: boolean;
187
+ allowedHosts?: string[];
188
+ allowedOrigins?: string[];
189
+ };
190
+ };
191
+ }
192
+ export interface ParsedMarkdown {
193
+ frontmatter: Record<string, unknown>;
194
+ content: string;
195
+ }
196
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/backlog-types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Task } from "../backlog-types/index";
2
+ export interface BoardOptions {
3
+ statuses?: string[];
4
+ }
5
+ export type BoardLayout = "horizontal" | "vertical";
6
+ export type BoardFormat = "terminal" | "markdown";
7
+ export declare function buildKanbanStatusGroups(tasks: Task[], statuses: string[]): {
8
+ orderedStatuses: string[];
9
+ groupedTasks: Map<string, Task[]>;
10
+ };
11
+ export declare function generateKanbanBoardWithMetadata(tasks: Task[], statuses: string[], projectName: string): string;
12
+ export declare function exportKanbanBoardToFile(tasks: Task[], statuses: string[], filePath: string, projectName: string, _overwrite?: boolean): Promise<void>;
13
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/backlog-utils/board.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;AAElD,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,MAAM,EAAE,GAChB;IAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAkDlE;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA+G9G;AAED,wBAAsB,uBAAuB,CAC5C,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,UAAU,UAAQ,GAChB,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { Task } from '../backlog-types';
3
+ interface KanbanColumnProps {
4
+ status: string;
5
+ tasks: Task[];
6
+ onTaskClick?: (task: Task) => void;
7
+ }
8
+ export declare const KanbanColumn: React.FC<KanbanColumnProps>;
9
+ export {};
10
+ //# sourceMappingURL=KanbanColumn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KanbanColumn.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/components/KanbanColumn.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CACpC;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+LpD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Task } from '../backlog-types';
2
+ export interface UseKanbanDataResult {
3
+ tasks: Task[];
4
+ statuses: string[];
5
+ isLoading: boolean;
6
+ error: string | null;
7
+ tasksByStatus: Map<string, Task[]>;
8
+ refreshData: () => Promise<void>;
9
+ updateTaskStatus: (taskId: string, newStatus: string) => Promise<void>;
10
+ }
11
+ /**
12
+ * Hook for managing kanban board data
13
+ * Currently uses mock data, will be extended to fetch from Backlog.md files
14
+ */
15
+ export declare function useKanbanData(): UseKanbanDataResult;
16
+ //# sourceMappingURL=useKanbanData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKanbanData.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/hooks/useKanbanData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,mBAAmB,CA0GnD"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Mock Data Generator for Kanban Panel Testing
3
+ *
4
+ * Generates sample task data matching the Backlog.md Task interface
5
+ * for testing and development purposes.
6
+ */
7
+ import type { Task } from '../backlog-types';
8
+ /**
9
+ * Generate mock tasks for testing the kanban board
10
+ */
11
+ export declare function generateMockTasks(): Task[];
12
+ /**
13
+ * Get default status columns for the kanban board
14
+ */
15
+ export declare function getDefaultStatuses(): string[];
16
+ /**
17
+ * Get mock configuration for the kanban panel
18
+ */
19
+ export declare function getMockPanelConfig(): {
20
+ dataSource: "mock";
21
+ columns: string[];
22
+ defaultColumn: string;
23
+ showDescription: boolean;
24
+ truncateLength: number;
25
+ showLabels: boolean;
26
+ showAssignees: boolean;
27
+ showPriority: boolean;
28
+ enableDragDrop: boolean;
29
+ enableEdit: boolean;
30
+ enableCreate: boolean;
31
+ };
32
+ //# sourceMappingURL=mockData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockData.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/mocks/mockData.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,EAAE,CAuI1C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED;;GAEG;AACH,wBAAgB,kBAAkB;;;;;;;;;;;;EAcjC"}