@industry-theme/backlogmd-kanban-panel 1.0.46 → 1.1.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.
@@ -1,19 +1,5 @@
1
1
  import React from 'react';
2
- import type { PanelComponentProps, PanelContextValue, PanelActions, PanelEventEmitter, DataSlice } from '../types';
3
- /**
4
- * Create a mock file system adapter for Storybook
5
- * Stores files in memory and logs operations
6
- */
7
- export declare const createMockFileSystemAdapter: () => {
8
- exists: (path: string) => Promise<boolean>;
9
- readFile: (path: string) => Promise<string>;
10
- writeFile: (path: string, content: string) => Promise<void>;
11
- deleteFile: (path: string) => Promise<void>;
12
- createDir: (path: string) => Promise<void>;
13
- readDir: (path: string) => Promise<string[]>;
14
- isDirectory: (path: string) => Promise<boolean>;
15
- _files: Map<string, string>;
16
- };
2
+ import type { PanelComponentProps, PanelContextValue, KanbanPanelActions, PanelEventEmitter, DataSlice } from '../types';
17
3
  /**
18
4
  * Options for creating mock context
19
5
  */
@@ -29,8 +15,12 @@ interface MockContextOptions {
29
15
  export declare const createMockContext: (options?: MockContextOptions | Partial<PanelContextValue>) => PanelContextValue;
30
16
  /**
31
17
  * Mock Panel Actions for Storybook
18
+ *
19
+ * Actions are the primary interface for panel-initiated operations:
20
+ * - File operations (read, write, delete, createDir)
21
+ * - Host commands (openFile, openGitDiff, navigateToPanel)
32
22
  */
33
- export declare const createMockActions: (overrides?: Partial<PanelActions>) => PanelActions;
23
+ export declare const createMockActions: (overrides?: Partial<KanbanPanelActions>) => KanbanPanelActions;
34
24
  /**
35
25
  * Mock Event Emitter for Storybook
36
26
  */
@@ -42,7 +32,7 @@ export declare const createMockEvents: () => PanelEventEmitter;
42
32
  export declare const MockPanelProvider: React.FC<{
43
33
  children: (props: PanelComponentProps) => React.ReactNode;
44
34
  contextOverrides?: Partial<PanelContextValue>;
45
- actionsOverrides?: Partial<PanelActions>;
35
+ actionsOverrides?: Partial<KanbanPanelActions>;
46
36
  }>;
47
37
  export {};
48
38
  //# sourceMappingURL=panelContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"panelContext.d.ts","sourceRoot":"","sources":["../../src/mocks/panelContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EAGjB,SAAS,EACV,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,eAAO,MAAM,2BAA2B;mBAIf,MAAM;qBACJ,MAAM;sBAKL,MAAM,WAAW,MAAM;uBAItB,MAAM;sBAIP,MAAM;oBAIR,MAAM;wBAYF,MAAM;;CAUnC,CAAC;AA+BF;;GAEG;AACH,UAAU,kBAAkB;IAC1B,sCAAsC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,KACxD,iBA2HF,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"}
1
+ {"version":3,"file":"panelContext.d.ts","sourceRoot":"","sources":["../../src/mocks/panelContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAGjB,SAAS,EACV,MAAM,UAAU,CAAC;AA+BlB;;GAEG;AACH,UAAU,kBAAkB;IAC1B,sCAAsC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,KACxD,iBAsHF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,YAAY,OAAO,CAAC,kBAAkB,CAAC,KACtC,kBAkDF,CAAC;AAEF;;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,kBAAkB,CAAC,CAAC;CAChD,CAMA,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanPanel.d.ts","sourceRoot":"","sources":["../../src/panels/KanbanPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6E,MAAM,OAAO,CAAC;AAelG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAiBtD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA83CvD,CAAC"}
1
+ {"version":3,"file":"KanbanPanel.d.ts","sourceRoot":"","sources":["../../src/panels/KanbanPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6E,MAAM,OAAO,CAAC;AAelG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAiBtD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAi4CvD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TaskDetailPanel.d.ts","sourceRoot":"","sources":["../../src/panels/TaskDetailPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAMxE,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,UAAU,CAAC;AAsG7E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,yBAAyB;IACrE,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAiDD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAgvB1D,CAAC"}
1
+ {"version":3,"file":"TaskDetailPanel.d.ts","sourceRoot":"","sources":["../../src/panels/TaskDetailPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAMxE,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,UAAU,CAAC;AAsG7E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,yBAAyB;IACrE,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAiDD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAovB1D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Core, type Task, DEFAULT_TASK_STATUSES } from '@backlog-md/core';
2
- import type { KanbanPanelContext, PanelActions, PanelEventEmitter } from '../../../types';
2
+ import type { KanbanPanelContext, KanbanPanelActions, PanelEventEmitter } from '../../../types';
3
3
  import type { PanelContextValue } from '@principal-ade/panel-framework-core';
4
4
  /** Per-column pagination state */
5
5
  export interface ColumnState {
@@ -57,7 +57,7 @@ export interface UseKanbanDataResult {
57
57
  }
58
58
  interface UseKanbanDataOptions {
59
59
  context?: PanelContextValue<KanbanPanelContext>;
60
- actions?: PanelActions;
60
+ actions?: KanbanPanelActions;
61
61
  /** Number of tasks to load per page (default: 20) */
62
62
  tasksLimit?: number;
63
63
  /** Event emitter for panel events */
@@ -1 +1 @@
1
- {"version":3,"file":"useKanbanData.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/hooks/useKanbanData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,EAAwB,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEhG,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAG7E,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,qBAAqB,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAE5F,gDAAgD;AAChD,eAAO,MAAM,cAAc,EAAE,YAAY,EAIxC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yCAAyC;IACzC,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC7C,mDAAmD;IACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,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;IACvE,+CAA+C;IAC/C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,yDAAyD;IACzD,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACpD,mCAAmC;IACnC,eAAe,EAAE,gBAAgB,CAAC;IAClC,sBAAsB;IACtB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,4EAA4E;IAC5E,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IACrE,wBAAwB;IACxB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;IAClD,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAID;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,mBAAmB,CA6gBrB"}
1
+ {"version":3,"file":"useKanbanData.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/hooks/useKanbanData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,EAAwB,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEhG,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAG7E,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,qBAAqB,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAE5F,gDAAgD;AAChD,eAAO,MAAM,cAAc,EAAE,YAAY,EAIxC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yCAAyC;IACzC,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC7C,mDAAmD;IACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,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;IACvE,+CAA+C;IAC/C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,yDAAyD;IACzD,aAAa,EAAE,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACpD,mCAAmC;IACnC,eAAe,EAAE,gBAAgB,CAAC;IAClC,sBAAsB;IACtB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,4EAA4E;IAC5E,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IACrE,wBAAwB;IACxB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;IAClD,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAID;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,mBAAmB,CA2gBrB"}
@@ -1,5 +1,5 @@
1
1
  import { Core, type Milestone, type Task } from '@backlog-md/core';
2
- import type { KanbanPanelContext, PanelActions } from '../../../types';
2
+ import type { KanbanPanelContext, KanbanPanelActions } from '../../../types';
3
3
  import type { PanelContextValue } from '@principal-ade/panel-framework-core';
4
4
  /** State for a single milestone with its tasks */
5
5
  export interface MilestoneState {
@@ -28,7 +28,7 @@ export interface UseMilestoneDataResult {
28
28
  }
29
29
  interface UseMilestoneDataOptions {
30
30
  context?: PanelContextValue<KanbanPanelContext>;
31
- actions?: PanelActions;
31
+ actions?: KanbanPanelActions;
32
32
  }
33
33
  /**
34
34
  * Hook for managing milestone data with lazy task loading
@@ -1 +1 @@
1
- {"version":3,"file":"useMilestoneData.d.ts","sourceRoot":"","sources":["../../../../src/panels/milestone/hooks/useMilestoneData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4CAA4C;IAC5C,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,2BAA2B;IAC3B,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,iCAAiC;IACjC,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,uBAAuB;IACvB,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,UAAU,uBAAuB;IAC/B,OAAO,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,uBAAuB,GAChC,sBAAsB,CAmTxB"}
1
+ {"version":3,"file":"useMilestoneData.d.ts","sourceRoot":"","sources":["../../../../src/panels/milestone/hooks/useMilestoneData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4CAA4C;IAC5C,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,2BAA2B;IAC3B,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,iCAAiC;IACjC,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,uBAAuB;IACvB,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,UAAU,uBAAuB;IAC/B,OAAO,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,uBAAuB,GAChC,sBAAsB,CAiTxB"}
@@ -8733,21 +8733,16 @@ function useKanbanData(options) {
8733
8733
  actionsRef.current = actions;
8734
8734
  }, [context2, actions]);
8735
8735
  const fetchFileContent = useCallback(async (path2) => {
8736
- var _a;
8737
- const currentContext = contextRef.current;
8738
8736
  const currentActions = actionsRef.current;
8739
- if (!currentActions || !currentContext) {
8740
- throw new Error("PanelContext not available");
8737
+ if (!(currentActions == null ? void 0 : currentActions.readFile)) {
8738
+ throw new Error("actions.readFile not available");
8741
8739
  }
8742
8740
  if (activeFilePathRef.current === path2) {
8743
8741
  await new Promise((resolve) => setTimeout(resolve, 100));
8744
8742
  }
8745
8743
  activeFilePathRef.current = path2;
8746
8744
  try {
8747
- if ((_a = currentContext.adapters) == null ? void 0 : _a.readFile) {
8748
- return await currentContext.adapters.readFile(path2);
8749
- }
8750
- throw new Error("No file reading capability available (adapters.readFile not configured)");
8745
+ return await currentActions.readFile(path2);
8751
8746
  } finally {
8752
8747
  activeFilePathRef.current = null;
8753
8748
  }
@@ -8812,12 +8807,15 @@ function useKanbanData(options) {
8812
8807
  const files = fileTreeSlice.data.allFiles;
8813
8808
  const filePaths = files.map((f) => f.path);
8814
8809
  return withSpan(span, async () => {
8815
- var _a2;
8816
8810
  try {
8817
8811
  const fs = new PanelFileSystemAdapter({
8818
8812
  fetchFile: fetchFileContent,
8819
8813
  filePaths,
8820
- hostFileSystem: (_a2 = context2.adapters) == null ? void 0 : _a2.fileSystem
8814
+ hostFileSystem: {
8815
+ writeFile: actions.writeFile,
8816
+ createDir: actions.createDir,
8817
+ deleteFile: actions.deleteFile
8818
+ }
8821
8819
  });
8822
8820
  const core2 = new Core({
8823
8821
  projectRoot: "",
@@ -10549,28 +10547,23 @@ function useMilestoneData(options) {
10549
10547
  actionsRef.current = actions;
10550
10548
  }, [context2, actions]);
10551
10549
  const fetchFileContent = useCallback(async (path2) => {
10552
- var _a;
10553
- const currentContext = contextRef.current;
10554
10550
  const currentActions = actionsRef.current;
10555
- if (!currentActions || !currentContext) {
10556
- throw new Error("PanelContext not available");
10551
+ if (!(currentActions == null ? void 0 : currentActions.readFile)) {
10552
+ throw new Error("actions.readFile not available");
10557
10553
  }
10558
10554
  if (activeFilePathRef.current === path2) {
10559
10555
  await new Promise((resolve) => setTimeout(resolve, 100));
10560
10556
  }
10561
10557
  activeFilePathRef.current = path2;
10562
10558
  try {
10563
- if ((_a = currentContext.adapters) == null ? void 0 : _a.readFile) {
10564
- return await currentContext.adapters.readFile(path2);
10565
- }
10566
- throw new Error("No file reading capability available (adapters.readFile not configured)");
10559
+ return await currentActions.readFile(path2);
10567
10560
  } finally {
10568
10561
  activeFilePathRef.current = null;
10569
10562
  }
10570
10563
  }, []);
10571
10564
  const fileTreeVersionRef = useRef(null);
10572
10565
  const loadMilestoneData = useCallback(async () => {
10573
- var _a, _b, _c;
10566
+ var _a, _b;
10574
10567
  if (!context2 || !actions) {
10575
10568
  console.log("[useMilestoneData] No context provided");
10576
10569
  setIsBacklogProject(false);
@@ -10608,7 +10601,11 @@ function useMilestoneData(options) {
10608
10601
  const fs = new PanelFileSystemAdapter({
10609
10602
  fetchFile: fetchFileContent,
10610
10603
  filePaths,
10611
- hostFileSystem: (_c = context2.adapters) == null ? void 0 : _c.fileSystem
10604
+ hostFileSystem: {
10605
+ writeFile: actions.writeFile,
10606
+ createDir: actions.createDir,
10607
+ deleteFile: actions.deleteFile
10608
+ }
10612
10609
  });
10613
10610
  const core2 = new Core({
10614
10611
  projectRoot: "",
@@ -11069,7 +11066,7 @@ const KanbanPanel = ({
11069
11066
  actions,
11070
11067
  events: events2
11071
11068
  }) => {
11072
- var _a, _b;
11069
+ var _a;
11073
11070
  const { theme: theme2 } = useTheme();
11074
11071
  const [selectedTaskId, setSelectedTaskId] = useState(null);
11075
11072
  const [selectedTab, setSelectedTab] = useState(DEFAULT_TASK_STATUSES.TODO);
@@ -11187,10 +11184,10 @@ const KanbanPanel = ({
11187
11184
  const filtered = /* @__PURE__ */ new Map();
11188
11185
  for (const [status, state] of tasksByStatus) {
11189
11186
  const filteredTasks = state.tasks.filter((task) => {
11190
- var _a2, _b2, _c, _d;
11187
+ var _a2, _b, _c, _d;
11191
11188
  if (task.title.toLowerCase().includes(query)) return true;
11192
11189
  if ((_a2 = task.description) == null ? void 0 : _a2.toLowerCase().includes(query)) return true;
11193
- if ((_b2 = task.labels) == null ? void 0 : _b2.some((label) => label.toLowerCase().includes(query))) return true;
11190
+ if ((_b = task.labels) == null ? void 0 : _b.some((label) => label.toLowerCase().includes(query))) return true;
11194
11191
  if ((_c = task.assignee) == null ? void 0 : _c.some((a) => a.toLowerCase().includes(query))) return true;
11195
11192
  if ((_d = task.milestone) == null ? void 0 : _d.toLowerCase().includes(query)) return true;
11196
11193
  return false;
@@ -11286,14 +11283,13 @@ const KanbanPanel = ({
11286
11283
  });
11287
11284
  }
11288
11285
  };
11289
- const fileSystem = (_a = context2.adapters) == null ? void 0 : _a.fileSystem;
11290
11286
  const canInitialize = Boolean(
11291
- (fileSystem == null ? void 0 : fileSystem.writeFile) && (fileSystem == null ? void 0 : fileSystem.createDir) && ((_b = context2.currentScope.repository) == null ? void 0 : _b.path)
11287
+ actions.writeFile && actions.createDir && ((_a = context2.currentScope.repository) == null ? void 0 : _a.path)
11292
11288
  );
11293
11289
  const handleInitialize = useCallback(async () => {
11294
- var _a2, _b2;
11295
- if (!(fileSystem == null ? void 0 : fileSystem.writeFile) || !(fileSystem == null ? void 0 : fileSystem.createDir)) {
11296
- throw new Error("File system adapter not available");
11290
+ var _a2, _b;
11291
+ if (!actions.writeFile || !actions.createDir) {
11292
+ throw new Error("File operations not available on actions");
11297
11293
  }
11298
11294
  const repoPath = (_a2 = context2.currentScope.repository) == null ? void 0 : _a2.path;
11299
11295
  if (!repoPath) {
@@ -11305,22 +11301,29 @@ const KanbanPanel = ({
11305
11301
  const fsAdapter = {
11306
11302
  // Used by initProject
11307
11303
  exists: async (path2) => {
11304
+ var _a3;
11305
+ if (actions.exists) {
11306
+ return actions.exists(path2);
11307
+ }
11308
11308
  try {
11309
- await fileSystem.readFile(path2);
11309
+ await ((_a3 = actions.readFile) == null ? void 0 : _a3.call(actions, path2));
11310
11310
  return true;
11311
11311
  } catch {
11312
11312
  return false;
11313
11313
  }
11314
11314
  },
11315
11315
  writeFile: async (path2, content2) => {
11316
- await fileSystem.writeFile(path2, content2);
11316
+ await actions.writeFile(path2, content2);
11317
11317
  },
11318
11318
  createDir: async (path2, _options) => {
11319
- await fileSystem.createDir(path2);
11319
+ await actions.createDir(path2);
11320
11320
  },
11321
11321
  join: (...paths) => paths.join("/").replace(/\/+/g, "/"),
11322
11322
  // Not used by initProject - stubs
11323
- readFile: async (path2) => fileSystem.readFile(path2),
11323
+ readFile: async (path2) => {
11324
+ var _a3;
11325
+ return ((_a3 = actions.readFile) == null ? void 0 : _a3.call(actions, path2)) ?? Promise.reject(new Error("readFile not available"));
11326
+ },
11324
11327
  deleteFile: async () => notImplemented(),
11325
11328
  readDir: async () => [],
11326
11329
  isDirectory: async () => false,
@@ -11342,10 +11345,10 @@ const KanbanPanel = ({
11342
11345
  projectRoot: repoPath,
11343
11346
  adapters: { fs: fsAdapter }
11344
11347
  });
11345
- const projectName = ((_b2 = context2.currentScope.repository) == null ? void 0 : _b2.name) || "Backlog";
11348
+ const projectName = ((_b = context2.currentScope.repository) == null ? void 0 : _b.name) || "Backlog";
11346
11349
  await core22.initProject({ projectName });
11347
11350
  await refreshData();
11348
- }, [fileSystem, context2.currentScope.repository, refreshData]);
11351
+ }, [actions, context2.currentScope.repository, refreshData]);
11349
11352
  const taskSaveCompletedRef = useRef(false);
11350
11353
  const taskModalSpanRef = useRef(null);
11351
11354
  const handleOpenNewTask = useCallback(() => {
@@ -12059,8 +12062,8 @@ const KanbanPanel = ({
12059
12062
  const totalTasks = milestoneState.milestone.tasks.length;
12060
12063
  const doneTasks = milestoneState.tasks.filter(
12061
12064
  (t) => {
12062
- var _a2, _b2;
12063
- return ((_a2 = t.status) == null ? void 0 : _a2.toLowerCase().includes("done")) || ((_b2 = t.status) == null ? void 0 : _b2.toLowerCase().includes("complete"));
12065
+ var _a2, _b;
12066
+ return ((_a2 = t.status) == null ? void 0 : _a2.toLowerCase().includes("done")) || ((_b = t.status) == null ? void 0 : _b.toLowerCase().includes("complete"));
12064
12067
  }
12065
12068
  ).length;
12066
12069
  const progress = totalTasks > 0 ? Math.round(doneTasks / totalTasks * 100) : 0;
@@ -12197,14 +12200,14 @@ const KanbanPanel = ({
12197
12200
  const inProgressCount = tasks.filter((t) => t.status === "In Progress").length;
12198
12201
  const doneCount = tasks.filter(
12199
12202
  (t) => {
12200
- var _a2, _b2;
12201
- return ((_a2 = t.status) == null ? void 0 : _a2.toLowerCase().includes("done")) || ((_b2 = t.status) == null ? void 0 : _b2.toLowerCase().includes("complete"));
12203
+ var _a2, _b;
12204
+ return ((_a2 = t.status) == null ? void 0 : _a2.toLowerCase().includes("done")) || ((_b = t.status) == null ? void 0 : _b.toLowerCase().includes("complete"));
12202
12205
  }
12203
12206
  ).length;
12204
12207
  const filteredTasks = milestoneStatusFilter ? tasks.filter((t) => {
12205
- var _a2, _b2;
12208
+ var _a2, _b;
12206
12209
  if (milestoneStatusFilter === "Done") {
12207
- return ((_a2 = t.status) == null ? void 0 : _a2.toLowerCase().includes("done")) || ((_b2 = t.status) == null ? void 0 : _b2.toLowerCase().includes("complete"));
12210
+ return ((_a2 = t.status) == null ? void 0 : _a2.toLowerCase().includes("done")) || ((_b = t.status) == null ? void 0 : _b.toLowerCase().includes("complete"));
12208
12211
  }
12209
12212
  return t.status === milestoneStatusFilter;
12210
12213
  }) : tasks;
@@ -56453,7 +56456,7 @@ const getPriorityStyles = (theme2, priority) => {
56453
56456
  };
56454
56457
  const StatusBadge = ({ status }) => {
56455
56458
  const { theme: theme2 } = useTheme();
56456
- return /* @__PURE__ */ jsx(
56459
+ return /* @__PURE__ */ jsxs(
56457
56460
  "span",
56458
56461
  {
56459
56462
  style: {
@@ -56466,7 +56469,10 @@ const StatusBadge = ({ status }) => {
56466
56469
  color: theme2.colors.primary,
56467
56470
  textTransform: "capitalize"
56468
56471
  },
56469
- children: status
56472
+ children: [
56473
+ "Status: ",
56474
+ status
56475
+ ]
56470
56476
  }
56471
56477
  );
56472
56478
  };
@@ -56686,121 +56692,125 @@ const TaskDetailPanel = ({ context: context2, events: events2, config }) => {
56686
56692
  {
56687
56693
  style: {
56688
56694
  flexShrink: 0,
56689
- padding: "16px 20px",
56695
+ height: "40px",
56696
+ display: "flex",
56697
+ alignItems: "center",
56698
+ justifyContent: "space-between",
56699
+ padding: "0 12px",
56690
56700
  borderBottom: `1px solid ${theme2.colors.border}`,
56691
56701
  backgroundColor: theme2.colors.backgroundSecondary
56692
56702
  },
56693
56703
  children: [
56694
- /* @__PURE__ */ jsxs(
56695
- "div",
56696
- {
56697
- style: {
56698
- display: "flex",
56699
- alignItems: "center",
56700
- justifyContent: "space-between",
56701
- marginBottom: "12px"
56702
- },
56703
- children: [
56704
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [
56705
- /* @__PURE__ */ jsx(
56706
- "span",
56707
- {
56708
- style: {
56709
- fontFamily: theme2.fonts.monospace,
56710
- fontSize: theme2.fontSizes[0],
56711
- fontWeight: theme2.fontWeights.medium,
56712
- color: theme2.colors.textMuted
56713
- },
56714
- children: selectedTask.id
56715
- }
56716
- ),
56717
- selectedTask.priority && /* @__PURE__ */ jsxs("span", { style: getPriorityStyles(theme2, selectedTask.priority), children: [
56718
- "Priority: ",
56719
- selectedTask.priority
56720
- ] }),
56721
- /* @__PURE__ */ jsx(StatusBadge, { status: selectedTask.status })
56722
- ] }),
56723
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
56724
- deleteState.status === "idle" && /* @__PURE__ */ jsx(
56725
- "button",
56726
- {
56727
- onClick: () => setIsDeleteModalOpen(true),
56728
- style: {
56729
- display: "flex",
56730
- alignItems: "center",
56731
- justifyContent: "center",
56732
- width: "32px",
56733
- height: "32px",
56734
- border: `1px solid ${theme2.colors.error}`,
56735
- borderRadius: theme2.radii[1],
56736
- background: "transparent",
56737
- cursor: "pointer",
56738
- color: theme2.colors.error,
56739
- transition: "all 0.2s ease"
56740
- },
56741
- onMouseEnter: (e) => {
56742
- e.currentTarget.style.background = theme2.colors.error;
56743
- e.currentTarget.style.color = theme2.colors.background;
56744
- },
56745
- onMouseLeave: (e) => {
56746
- e.currentTarget.style.background = "transparent";
56747
- e.currentTarget.style.color = theme2.colors.error;
56748
- },
56749
- title: "Delete task",
56750
- children: /* @__PURE__ */ jsx(Trash2, { size: 16 })
56751
- }
56752
- ),
56753
- deleteState.status === "success" && /* @__PURE__ */ jsx(
56754
- "div",
56755
- {
56756
- style: {
56757
- display: "flex",
56758
- alignItems: "center",
56759
- justifyContent: "center",
56760
- width: "32px",
56761
- height: "32px",
56762
- border: `1px solid ${theme2.colors.success}`,
56763
- borderRadius: theme2.radii[1],
56764
- background: `${theme2.colors.success}15`,
56765
- color: theme2.colors.success
56766
- },
56767
- title: "Task deleted",
56768
- children: /* @__PURE__ */ jsx(CircleCheckBig, { size: 16 })
56769
- }
56770
- ),
56771
- /* @__PURE__ */ jsx(
56772
- "button",
56773
- {
56774
- onClick: handleBack,
56775
- style: {
56776
- display: "flex",
56777
- alignItems: "center",
56778
- justifyContent: "center",
56779
- width: "32px",
56780
- height: "32px",
56781
- border: `1px solid ${theme2.colors.border}`,
56782
- borderRadius: theme2.radii[1],
56783
- background: theme2.colors.surface,
56784
- cursor: "pointer",
56785
- color: theme2.colors.textSecondary,
56786
- transition: "all 0.2s ease"
56787
- },
56788
- onMouseEnter: (e) => {
56789
- e.currentTarget.style.background = theme2.colors.backgroundSecondary;
56790
- e.currentTarget.style.color = theme2.colors.text;
56791
- },
56792
- onMouseLeave: (e) => {
56793
- e.currentTarget.style.background = theme2.colors.surface;
56794
- e.currentTarget.style.color = theme2.colors.textSecondary;
56795
- },
56796
- title: "Close",
56797
- children: /* @__PURE__ */ jsx(X, { size: 16 })
56798
- }
56799
- )
56800
- ] })
56801
- ]
56802
- }
56803
- ),
56704
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
56705
+ /* @__PURE__ */ jsx(
56706
+ "span",
56707
+ {
56708
+ style: {
56709
+ fontFamily: theme2.fonts.monospace,
56710
+ fontSize: theme2.fontSizes[0],
56711
+ fontWeight: theme2.fontWeights.medium,
56712
+ color: theme2.colors.textMuted
56713
+ },
56714
+ children: selectedTask.id
56715
+ }
56716
+ ),
56717
+ /* @__PURE__ */ jsx(StatusBadge, { status: selectedTask.status }),
56718
+ selectedTask.priority && /* @__PURE__ */ jsxs("span", { style: getPriorityStyles(theme2, selectedTask.priority), children: [
56719
+ "Priority: ",
56720
+ selectedTask.priority
56721
+ ] })
56722
+ ] }),
56723
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
56724
+ deleteState.status === "idle" && /* @__PURE__ */ jsx(
56725
+ "button",
56726
+ {
56727
+ onClick: () => setIsDeleteModalOpen(true),
56728
+ style: {
56729
+ display: "flex",
56730
+ alignItems: "center",
56731
+ justifyContent: "center",
56732
+ width: "28px",
56733
+ height: "28px",
56734
+ border: `1px solid ${theme2.colors.error}`,
56735
+ borderRadius: theme2.radii[1],
56736
+ background: "transparent",
56737
+ cursor: "pointer",
56738
+ color: theme2.colors.error,
56739
+ transition: "all 0.2s ease"
56740
+ },
56741
+ onMouseEnter: (e) => {
56742
+ e.currentTarget.style.background = theme2.colors.error;
56743
+ e.currentTarget.style.color = theme2.colors.background;
56744
+ },
56745
+ onMouseLeave: (e) => {
56746
+ e.currentTarget.style.background = "transparent";
56747
+ e.currentTarget.style.color = theme2.colors.error;
56748
+ },
56749
+ title: "Delete task",
56750
+ children: /* @__PURE__ */ jsx(Trash2, { size: 14 })
56751
+ }
56752
+ ),
56753
+ deleteState.status === "success" && /* @__PURE__ */ jsx(
56754
+ "div",
56755
+ {
56756
+ style: {
56757
+ display: "flex",
56758
+ alignItems: "center",
56759
+ justifyContent: "center",
56760
+ width: "28px",
56761
+ height: "28px",
56762
+ border: `1px solid ${theme2.colors.success}`,
56763
+ borderRadius: theme2.radii[1],
56764
+ background: `${theme2.colors.success}15`,
56765
+ color: theme2.colors.success
56766
+ },
56767
+ title: "Task deleted",
56768
+ children: /* @__PURE__ */ jsx(CircleCheckBig, { size: 14 })
56769
+ }
56770
+ ),
56771
+ /* @__PURE__ */ jsx(
56772
+ "button",
56773
+ {
56774
+ onClick: handleBack,
56775
+ style: {
56776
+ display: "flex",
56777
+ alignItems: "center",
56778
+ justifyContent: "center",
56779
+ width: "28px",
56780
+ height: "28px",
56781
+ border: `1px solid ${theme2.colors.border}`,
56782
+ borderRadius: theme2.radii[1],
56783
+ background: theme2.colors.surface,
56784
+ cursor: "pointer",
56785
+ color: theme2.colors.textSecondary,
56786
+ transition: "all 0.2s ease"
56787
+ },
56788
+ onMouseEnter: (e) => {
56789
+ e.currentTarget.style.background = theme2.colors.backgroundSecondary;
56790
+ e.currentTarget.style.color = theme2.colors.text;
56791
+ },
56792
+ onMouseLeave: (e) => {
56793
+ e.currentTarget.style.background = theme2.colors.surface;
56794
+ e.currentTarget.style.color = theme2.colors.textSecondary;
56795
+ },
56796
+ title: "Close",
56797
+ children: /* @__PURE__ */ jsx(X, { size: 14 })
56798
+ }
56799
+ )
56800
+ ] })
56801
+ ]
56802
+ }
56803
+ ),
56804
+ /* @__PURE__ */ jsxs(
56805
+ "div",
56806
+ {
56807
+ style: {
56808
+ flexShrink: 0,
56809
+ padding: "12px 16px",
56810
+ borderBottom: `1px solid ${theme2.colors.border}`,
56811
+ backgroundColor: theme2.colors.background
56812
+ },
56813
+ children: [
56804
56814
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "12px" }, children: [
56805
56815
  hasClaudeWorkflow && claudeAssignment.status === "idle" && !getGitHubIssueFromRefs(selectedTask.references) && /* @__PURE__ */ jsxs(
56806
56816
  "button",