kanbase 0.0.4 → 0.0.6

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.
Files changed (30) hide show
  1. package/dist/lib/benchmark/fps-monitor.d.ts +7 -0
  2. package/dist/lib/components/add-card-button.d.ts +5 -0
  3. package/dist/lib/components/add-card-form.d.ts +6 -0
  4. package/dist/lib/components/default/default-add-card-form.d.ts +7 -0
  5. package/dist/lib/components/default/default-card-view.d.ts +2 -0
  6. package/dist/lib/components/default/default-card.d.ts +7 -0
  7. package/dist/lib/components/default/default-column-empty.d.ts +1 -0
  8. package/dist/lib/components/default/default-column-header.d.ts +5 -0
  9. package/dist/lib/components/default/default-edit-column-form.d.ts +8 -0
  10. package/dist/lib/components/default/default-edit-form.d.ts +8 -0
  11. package/dist/lib/components/filter-chips.d.ts +1 -0
  12. package/dist/lib/components/filter-group.d.ts +8 -0
  13. package/dist/lib/components/kanban-card.d.ts +17 -0
  14. package/dist/lib/components/kanban-column.d.ts +23 -0
  15. package/dist/lib/components/kanban-filter-drawer.d.ts +1 -0
  16. package/dist/lib/components/kanboom-board.d.ts +16 -0
  17. package/dist/lib/hooks/use-kanban-column.d.ts +10 -0
  18. package/dist/lib/hooks/use-kanban-dnd.d.ts +22 -0
  19. package/dist/lib/hooks/use-kanban.d.ts +63 -0
  20. package/dist/lib/index.d.ts +8 -0
  21. package/dist/lib/inject-styles.d.ts +5 -0
  22. package/dist/lib/store/selectors.d.ts +24 -0
  23. package/dist/lib/store/use-kanban-store.d.ts +56 -0
  24. package/dist/lib/types/kanban.d.ts +128 -0
  25. package/dist/lib/utils/cn.d.ts +2 -0
  26. package/dist/lib/utils/data-discovery.d.ts +7 -0
  27. package/dist/lib/utils/filter-evaluator.d.ts +5 -0
  28. package/dist/lib/utils/utils.d.ts +2 -0
  29. package/package.json +4 -4
  30. package/dist/index.d.ts +0 -347
@@ -0,0 +1,7 @@
1
+ export declare const useFPS: () => number;
2
+ interface BenchmarkStatsProps {
3
+ cardCount: number;
4
+ columnCount: number;
5
+ }
6
+ export declare const BenchmarkStats: ({ cardCount, columnCount }: BenchmarkStatsProps) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,5 @@
1
+ interface AddCardButtonProps {
2
+ onClick: () => void;
3
+ }
4
+ export declare function AddCardButton({ onClick }: AddCardButtonProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,6 @@
1
+ interface AddCardFormProps {
2
+ onSave: (title: string) => void;
3
+ onCancel: () => void;
4
+ }
5
+ export declare function AddCardForm({ onSave, onCancel }: AddCardFormProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,7 @@
1
+ interface DefaultAddCardFormProps {
2
+ columnId: string;
3
+ onAdd: (data: any) => void;
4
+ onCancel: () => void;
5
+ }
6
+ export declare function DefaultAddCardForm({ columnId: _columnId, onAdd, onCancel }: DefaultAddCardFormProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,2 @@
1
+ import { ViewCardRenderProps, KanboomCard } from '../../types/kanban';
2
+ export declare const DefaultCardView: import('react').MemoExoticComponent<(<TCard extends KanboomCard>({ card, onClose }: ViewCardRenderProps<TCard>) => import("react/jsx-runtime").JSX.Element)>;
@@ -0,0 +1,7 @@
1
+ import { CardRenderProps } from '../../types/kanban';
2
+ export declare const DefaultCard: import('react').MemoExoticComponent<(<TCard extends {
3
+ id: string;
4
+ title: string;
5
+ description?: string;
6
+ metadata?: any;
7
+ }>({ card, isDragging }: CardRenderProps<TCard>) => import("react/jsx-runtime").JSX.Element)>;
@@ -0,0 +1 @@
1
+ export declare const DefaultColumnEmpty: import('react').MemoExoticComponent<() => import("react/jsx-runtime").JSX.Element>;
@@ -0,0 +1,5 @@
1
+ import { ColumnHeaderRenderProps } from '../../types/kanban';
2
+ export declare const DefaultColumnHeader: import('react').MemoExoticComponent<(<TColumn extends {
3
+ id: string;
4
+ title: string;
5
+ }>({ column, cardCount, isOver, dragHandleProps, onAddCard, onEditColumn }: ColumnHeaderRenderProps<TColumn>) => import("react/jsx-runtime").JSX.Element)>;
@@ -0,0 +1,8 @@
1
+ interface DefaultEditColumnFormProps {
2
+ column: any;
3
+ onSave: (updates: any) => void;
4
+ onCancel: () => void;
5
+ onDelete?: () => void;
6
+ }
7
+ export declare function DefaultEditColumnForm({ column, onSave, onCancel, onDelete }: DefaultEditColumnFormProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,8 @@
1
+ interface DefaultEditFormProps {
2
+ card: any;
3
+ onSave: (updates: any) => void;
4
+ onCancel: () => void;
5
+ onDelete?: () => void;
6
+ }
7
+ export declare function DefaultEditForm({ card, onSave, onCancel, onDelete }: DefaultEditFormProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1 @@
1
+ export declare function FilterChips(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,8 @@
1
+ import { FilterGroup as FilterGroupType } from '../types/kanban';
2
+ import { DiscoveredField } from '../utils/data-discovery';
3
+ interface FilterGroupProps {
4
+ group: FilterGroupType;
5
+ availableFields: DiscoveredField[];
6
+ }
7
+ export declare function FilterGroup({ group, availableFields }: FilterGroupProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,17 @@
1
+ import { CardRenderProps } from '../types/kanban';
2
+ interface KanbanCardProps<TCard> {
3
+ card: TCard;
4
+ isDragging: boolean;
5
+ renderCard: (props: CardRenderProps<TCard>) => React.ReactNode;
6
+ onClick?: (card: TCard) => void;
7
+ onEdit?: (card: TCard) => void;
8
+ allowEdit?: boolean;
9
+ index: number;
10
+ columnId: string;
11
+ overId: string | null;
12
+ overSide: 'top' | 'bottom' | 'left' | 'right' | null;
13
+ }
14
+ export declare const KanbanCard: <TCard extends {
15
+ id: string;
16
+ }>(props: KanbanCardProps<TCard>) => React.ReactElement;
17
+ export {};
@@ -0,0 +1,23 @@
1
+ import { KanboomCard, KanboomColumn, KanboomConfig } from '../types/kanban';
2
+ interface KanbanColumnProps<TCard = KanboomCard, TColumn = KanboomColumn> {
3
+ column: TColumn;
4
+ allCards: Record<string, TCard>;
5
+ activeId: string | null;
6
+ overId: string | null;
7
+ overSide: 'top' | 'bottom' | 'left' | 'right' | null;
8
+ config: Required<Pick<KanboomConfig<TCard, TColumn>, 'renderCard' | 'renderColumnHeader' | 'renderColumnEmpty' | 'estimatedCardHeight' | 'virtualOverscan' | 'columnWidth' | 'columnMinHeight'>> & Pick<KanboomConfig<TCard, TColumn>, 'onCardClick' | 'onEditCard' | 'onColumnClick' | 'onEditColumn' | 'renderAddButton' | 'renderAddForm' | 'renderEditForm' | 'allowAdd' | 'allowEdit' | 'allowColumnEdit'>;
9
+ dragHandleProps?: {
10
+ attributes: any;
11
+ listeners: any;
12
+ };
13
+ isActiveColumnDragging?: boolean;
14
+ isDragging?: boolean;
15
+ isOverlay?: boolean;
16
+ }
17
+ export declare const KanbanColumn: <TCard extends {
18
+ id: string;
19
+ }, TColumn extends {
20
+ id: string;
21
+ title: string;
22
+ }>(props: KanbanColumnProps<TCard, TColumn>) => React.ReactElement;
23
+ export {};
@@ -0,0 +1 @@
1
+ export declare function KanbanFilterDrawer(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { KanboomCard, KanboomColumn, KanboomConfig } from '../types/kanban';
2
+ interface KanboomBoardProps<TCard extends {
3
+ id: string;
4
+ } = KanboomCard, TColumn extends {
5
+ id: string;
6
+ title: string;
7
+ } = KanboomColumn> {
8
+ config?: KanboomConfig<TCard, TColumn>;
9
+ }
10
+ export declare function KanboomBoard<TCard extends {
11
+ id: string;
12
+ } = KanboomCard, TColumn extends {
13
+ id: string;
14
+ title: string;
15
+ } = KanboomColumn>({ config }: KanboomBoardProps<TCard, TColumn>): import("react/jsx-runtime").JSX.Element;
16
+ export {};
@@ -0,0 +1,10 @@
1
+ interface UseKanbanColumnProps {
2
+ cardIds: string[];
3
+ estimatedCardHeight: number;
4
+ overscan: number;
5
+ }
6
+ export declare function useKanbanColumn({ cardIds, estimatedCardHeight, overscan: baseOverscan }: UseKanbanColumnProps): {
7
+ parentRef: import('react').RefObject<HTMLDivElement | null>;
8
+ rowVirtualizer: import('@tanstack/react-virtual').Virtualizer<HTMLDivElement, Element>;
9
+ };
10
+ export {};
@@ -0,0 +1,22 @@
1
+ import { DragOverEvent, DragStartEvent } from '@dnd-kit/core';
2
+ import { MutableRefObject } from 'react';
3
+ interface UseKanbanDndProps {
4
+ dragActivationDistance: number;
5
+ touchActivationDelay: number;
6
+ onDragStart: (id: string, type: 'Card' | 'Column') => void;
7
+ onDragOver: (overId: string | null, side?: 'top' | 'bottom' | 'left' | 'right' | null) => void;
8
+ onDragEnd: () => void;
9
+ onCardMove: (cardId: string, sourceColumnId: string, targetColumnId: string, index: number) => void;
10
+ onColumnMove: (columnId: string, index: number) => void;
11
+ onCreateColumnWithCard?: (cardId: string, sourceColumnId: string) => void;
12
+ columns: Record<string, any>;
13
+ columnOrder: string[];
14
+ recentlyMovedToNewContainer?: MutableRefObject<boolean>;
15
+ }
16
+ export declare function useKanbanDnd({ dragActivationDistance, touchActivationDelay, onDragStart, onDragOver, onDragEnd, onCardMove, onColumnMove, onCreateColumnWithCard, columns, columnOrder, recentlyMovedToNewContainer }: UseKanbanDndProps): {
17
+ sensors: import('@dnd-kit/core').SensorDescriptor<import('@dnd-kit/core').SensorOptions>[];
18
+ handleDragStart: (event: DragStartEvent) => void;
19
+ handleDragOver: (event: DragOverEvent) => void;
20
+ handleDragEnd: () => void;
21
+ };
22
+ export {};
@@ -0,0 +1,63 @@
1
+ import { KanboomConfig } from '../types/kanban';
2
+ export declare function useKanban<TCard = any, TColumn = any>(config?: KanboomConfig<TCard, TColumn>): {
3
+ activeId: string | null;
4
+ overId: string | null;
5
+ overSide: "top" | "bottom" | "left" | "right" | null;
6
+ viewingCardId: string | null;
7
+ editingCardId: string | null;
8
+ addingCardInColumnId: string | null;
9
+ editingColumnId: string | null;
10
+ setViewingCardId: (id: string | null) => void;
11
+ clearViewingCardId: () => void;
12
+ handleDragStart: (cardId: string) => void;
13
+ handleDragOver: (id: string | null, side?: "top" | "bottom" | "left" | "right" | null) => void;
14
+ handleDragEnd: () => void;
15
+ moveCard: (cardId: string, sourceColumnId: string, targetColumnId: string, index: number) => void;
16
+ addCard: (columnId: string, card: Omit<import('..').KanboomCard, "id">) => string;
17
+ updateCard: (cardId: string, updates: Partial<import('..').KanboomCard>) => void;
18
+ deleteCard: (cardId: string) => void;
19
+ duplicateCard: (cardId: string) => string;
20
+ setEditingCardId: (id: string | null) => void;
21
+ clearEditingCardId: () => void;
22
+ setAddingCardInColumnId: (id: string | null) => void;
23
+ clearAddingCardInColumnId: () => void;
24
+ addColumn: (column: Omit<import('..').KanboomColumn, "id" | "cardIds">, position?: number) => string;
25
+ addColumnWithCard: (cardId: string, sourceColId: string, columnData: Omit<import('..').KanboomColumn, "id" | "cardIds">) => void;
26
+ updateColumn: (columnId: string, updates: Partial<import('..').KanboomColumn>) => void;
27
+ deleteColumn: (columnId: string, moveCardsTo?: string) => void;
28
+ moveColumn: (columnId: string, newIndex: number) => void;
29
+ setEditingColumnId: (id: string | null) => void;
30
+ clearEditingColumnId: () => void;
31
+ clearBoard: () => void;
32
+ config: {
33
+ dragActivationDistance: number;
34
+ touchActivationDelay: number;
35
+ virtualOverscan: number;
36
+ estimatedCardHeight: number;
37
+ columnWidth: number;
38
+ columnMinHeight: number;
39
+ gap: number;
40
+ allowAdd: boolean;
41
+ allowEdit: boolean;
42
+ allowColumnAdd: boolean;
43
+ allowColumnEdit: boolean;
44
+ allowColumnDelete: boolean;
45
+ allowColumnReorder: boolean;
46
+ allowFilters: boolean;
47
+ showURLSync: boolean;
48
+ };
49
+ filters: import('..').KanbanFilters;
50
+ setSearchQuery: (query: string) => void;
51
+ addFilterGroup: (group: import('..').FilterGroup) => void;
52
+ updateFilterGroup: (groupId: string, updates: Partial<import('..').FilterGroup>) => void;
53
+ removeFilterGroup: (groupId: string) => void;
54
+ removeFilterRule: (groupId: string, ruleId: string) => void;
55
+ setFilters: (filters: import('..').KanbanFilters) => void;
56
+ clearFilters: () => void;
57
+ setBoardData: (data: import('..').KanboomData) => void;
58
+ setConfig: (config: Partial<KanboomConfig>) => void;
59
+ setActiveId: (id: string | null) => void;
60
+ cards: Record<string, import('..').KanboomCard>;
61
+ columns: Record<string, import('..').KanboomColumn>;
62
+ columnOrder: string[];
63
+ };
@@ -0,0 +1,8 @@
1
+ export { KanboomBoard as Kanbase, KanboomBoard as Kanban, KanboomBoard } from './components/kanboom-board';
2
+ export type { KanboomCard, KanboomColumn, KanboomData, KanboomConfig, CardRenderProps, ColumnHeaderRenderProps, ColumnEmptyRenderProps, AddCardRenderProps, EditCardRenderProps, AddColumnRenderProps, EditColumnRenderProps, ViewCardRenderProps, FilterOperator, FilterRule, FilterDefinition, FilterGroup, KanbanFilters, } from './types/kanban';
3
+ export { useKanbanStore, type KanbanStore, } from './store/use-kanban-store';
4
+ export { useKanban } from './hooks/use-kanban';
5
+ export { selectCard, selectAllCards, selectCardsByIds, selectColumn, selectAllColumns, selectColumnOrder, selectColumnCards, selectColumnCardIds, selectMoveCard, selectMoveColumn, selectSetBoardData, selectBoardData, selectCardCount, selectColumnCount, } from './store/selectors';
6
+ export { discoverFields, type DiscoveredField } from './utils/data-discovery';
7
+ export { evaluateFilter } from './utils/filter-evaluator';
8
+ export { useFPS, BenchmarkStats } from './benchmark/fps-monitor';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Injeta os estilos do Kanbase automaticamente no documento
3
+ * Isso garante que os estilos estejam disponíveis sem necessidade de import manual
4
+ */
5
+ export declare function injectKanbaseStyles(): void;
@@ -0,0 +1,24 @@
1
+ import { KanbanStore } from './use-kanban-store';
2
+ import { KanboomCard, KanboomColumn } from '../types/kanban';
3
+ /**
4
+ * Zustand selectors for optimized component subscriptions
5
+ * Components should use these instead of subscribing to the entire store
6
+ */
7
+ export declare const selectCard: (cardId: string) => (state: KanbanStore) => KanboomCard | undefined;
8
+ export declare const selectAllCards: (state: KanbanStore) => Record<string, KanboomCard>;
9
+ export declare const selectCardsByIds: (cardIds: string[]) => (state: KanbanStore) => KanboomCard[];
10
+ export declare const selectColumn: (columnId: string) => (state: KanbanStore) => KanboomColumn | undefined;
11
+ export declare const selectAllColumns: (state: KanbanStore) => Record<string, KanboomColumn>;
12
+ export declare const selectColumnOrder: (state: KanbanStore) => string[];
13
+ export declare const selectColumnCards: (columnId: string) => (state: KanbanStore) => KanboomCard[];
14
+ export declare const selectColumnCardIds: (columnId: string) => (state: KanbanStore) => string[];
15
+ export declare const selectMoveCard: (state: KanbanStore) => (cardId: string, sourceColId: string, targetColId: string, newIndex: number) => void;
16
+ export declare const selectMoveColumn: (state: KanbanStore) => (columnId: string, newIndex: number) => void;
17
+ export declare const selectSetBoardData: (state: KanbanStore) => (data: import('..').KanboomData) => void;
18
+ export declare const selectBoardData: (state: KanbanStore) => {
19
+ cards: Record<string, KanboomCard>;
20
+ columns: Record<string, KanboomColumn>;
21
+ columnOrder: string[];
22
+ };
23
+ export declare const selectCardCount: (state: KanbanStore) => number;
24
+ export declare const selectColumnCount: (state: KanbanStore) => number;
@@ -0,0 +1,56 @@
1
+ import { KanboomCard, KanboomColumn, KanboomData, KanboomConfig, KanbanFilters, FilterGroup } from '../types/kanban';
2
+ export interface KanbanStore extends KanboomData {
3
+ config: KanboomConfig;
4
+ activeId: string | null;
5
+ viewingCardId: string | null;
6
+ editingCardId: string | null;
7
+ addingCardInColumnId: string | null;
8
+ editingColumnId: string | null;
9
+ addCard: (columnId: string, card: Omit<KanboomCard, 'id'>) => string;
10
+ updateCard: (cardId: string, updates: Partial<KanboomCard>) => void;
11
+ deleteCard: (cardId: string) => void;
12
+ duplicateCard: (cardId: string) => string;
13
+ addColumn: (column: Omit<KanboomColumn, 'id' | 'cardIds'>, position?: number) => string;
14
+ updateColumn: (columnId: string, updates: Partial<KanboomColumn>) => void;
15
+ deleteColumn: (columnId: string, moveCardsTo?: string) => void;
16
+ moveCard: (cardId: string, sourceColId: string, targetColId: string, newIndex: number) => void;
17
+ moveColumn: (columnId: string, newIndex: number) => void;
18
+ addColumnWithCard: (cardId: string, sourceColId: string, columnData: Omit<KanboomColumn, 'id' | 'cardIds'>) => void;
19
+ filters: KanbanFilters;
20
+ setSearchQuery: (query: string) => void;
21
+ addFilterGroup: (group: FilterGroup) => void;
22
+ updateFilterGroup: (groupId: string, updates: Partial<FilterGroup>) => void;
23
+ removeFilterGroup: (groupId: string) => void;
24
+ removeFilterRule: (groupId: string, ruleId: string) => void;
25
+ setFilters: (filters: KanbanFilters) => void;
26
+ clearFilters: () => void;
27
+ setBoardData: (data: KanboomData) => void;
28
+ setConfig: (config: Partial<KanboomConfig>) => void;
29
+ setActiveId: (id: string | null) => void;
30
+ setViewingCardId: (id: string | null) => void;
31
+ clearViewingCardId: () => void;
32
+ setEditingCardId: (id: string | null) => void;
33
+ clearEditingCardId: () => void;
34
+ setAddingCardInColumnId: (id: string | null) => void;
35
+ clearAddingCardInColumnId: () => void;
36
+ setEditingColumnId: (id: string | null) => void;
37
+ clearEditingColumnId: () => void;
38
+ clearBoard: () => void;
39
+ }
40
+ export declare const useKanbanStore: import('zustand').UseBoundStore<Omit<import('zustand').StoreApi<KanbanStore>, "setState" | "devtools"> & {
41
+ setState(partial: KanbanStore | Partial<KanbanStore> | ((state: KanbanStore) => KanbanStore | Partial<KanbanStore>), replace?: false | undefined, action?: (string | {
42
+ [x: string]: unknown;
43
+ [x: number]: unknown;
44
+ [x: symbol]: unknown;
45
+ type: string;
46
+ }) | undefined): void;
47
+ setState(state: KanbanStore | ((state: KanbanStore) => KanbanStore), replace: true, action?: (string | {
48
+ [x: string]: unknown;
49
+ [x: number]: unknown;
50
+ [x: symbol]: unknown;
51
+ type: string;
52
+ }) | undefined): void;
53
+ devtools: {
54
+ cleanup: () => void;
55
+ };
56
+ }>;
@@ -0,0 +1,128 @@
1
+ export interface KanboomCard {
2
+ id: string;
3
+ title: string;
4
+ description?: string;
5
+ content?: any;
6
+ metadata?: any;
7
+ previousColumnId?: string;
8
+ }
9
+ export interface KanboomColumn {
10
+ id: string;
11
+ title: string;
12
+ cardIds: string[];
13
+ metadata?: any;
14
+ }
15
+ export interface KanboomData<TCard = KanboomCard> {
16
+ cards: Record<string, TCard>;
17
+ columns: Record<string, KanboomColumn>;
18
+ columnOrder: string[];
19
+ }
20
+ export interface CardRenderProps<TCard = KanboomCard> {
21
+ card: TCard;
22
+ isDragging: boolean;
23
+ }
24
+ export interface ColumnHeaderRenderProps<TColumn = KanboomColumn> {
25
+ column: TColumn;
26
+ cardCount: number;
27
+ isOver: boolean;
28
+ dragHandleProps?: {
29
+ attributes: any;
30
+ listeners: any;
31
+ };
32
+ onAddCard?: () => void;
33
+ onEditColumn?: () => void;
34
+ }
35
+ export interface AddCardRenderProps<TCard = KanboomCard> {
36
+ columnId: string;
37
+ onAdd: (data: Omit<TCard, 'id'>) => void;
38
+ onCancel: () => void;
39
+ }
40
+ export interface EditCardRenderProps<TCard = KanboomCard> {
41
+ card: TCard;
42
+ onSave: (updates: Partial<TCard>) => void;
43
+ onCancel: () => void;
44
+ onDelete?: () => void;
45
+ }
46
+ export interface AddColumnRenderProps<TColumn = KanboomColumn> {
47
+ onAdd: (data: Omit<TColumn, 'id' | 'cardIds'>) => void;
48
+ onCancel: () => void;
49
+ }
50
+ export interface EditColumnRenderProps<TColumn = KanboomColumn> {
51
+ column: TColumn;
52
+ onSave: (updates: Partial<TColumn>) => void;
53
+ onCancel: () => void;
54
+ onDelete?: () => void;
55
+ }
56
+ export interface ColumnEmptyRenderProps {
57
+ }
58
+ export interface ViewCardRenderProps<TCard = KanboomCard> {
59
+ card: TCard;
60
+ onClose: () => void;
61
+ }
62
+ export interface KanboomConfig<TCard = KanboomCard, TColumn = KanboomColumn> {
63
+ renderCard?: (props: CardRenderProps<TCard>) => React.ReactNode;
64
+ renderColumnHeader?: (props: ColumnHeaderRenderProps<TColumn>) => React.ReactNode;
65
+ renderColumnEmpty?: (props: ColumnEmptyRenderProps) => React.ReactNode;
66
+ renderAddButton?: (props: {
67
+ onClick: () => void;
68
+ columnId: string;
69
+ }) => React.ReactNode;
70
+ renderAddForm?: (props: AddCardRenderProps<TCard>) => React.ReactNode;
71
+ renderEditForm?: (props: EditCardRenderProps<TCard>) => React.ReactNode;
72
+ renderAddColumnButton?: (props: {
73
+ onClick: () => void;
74
+ }) => React.ReactNode;
75
+ renderAddColumnForm?: (props: AddColumnRenderProps<TColumn>) => React.ReactNode;
76
+ renderEditColumnForm?: (props: EditColumnRenderProps<TColumn>) => React.ReactNode;
77
+ renderCardView?: (props: ViewCardRenderProps<TCard>) => React.ReactNode;
78
+ allowAdd?: boolean;
79
+ allowEdit?: boolean;
80
+ allowColumnAdd?: boolean;
81
+ allowColumnEdit?: boolean;
82
+ allowColumnDelete?: boolean;
83
+ allowColumnReorder?: boolean;
84
+ allowFilters?: boolean;
85
+ showURLSync?: boolean;
86
+ dragActivationDistance?: number;
87
+ touchActivationDelay?: number;
88
+ virtualOverscan?: number;
89
+ estimatedCardHeight?: number;
90
+ columnWidth?: number;
91
+ columnMinHeight?: number;
92
+ gap?: number;
93
+ onCardMove?: (cardId: string, fromColumn: string, toColumn: string, index: number) => void;
94
+ onCardClick?: (card: TCard) => void;
95
+ onEditCard?: (card: TCard) => void;
96
+ onColumnClick?: (column: TColumn) => void;
97
+ onEditColumn?: (column: TColumn) => void;
98
+ }
99
+ export type FilterOperator = 'eq' | 'neq' | 'contains' | 'notContains' | 'in' | 'notIn' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'isEmpty' | 'isNotEmpty';
100
+ export interface FilterRule {
101
+ id: string;
102
+ field: string;
103
+ operator: FilterOperator;
104
+ value: any;
105
+ enabled: boolean;
106
+ type?: 'text' | 'number' | 'date' | 'select' | 'boolean';
107
+ }
108
+ export interface FilterDefinition {
109
+ field: string;
110
+ label: string;
111
+ type: 'text' | 'number' | 'date' | 'select' | 'boolean';
112
+ options?: {
113
+ label: string;
114
+ value: any;
115
+ }[];
116
+ getFieldValue?: (card: any) => any;
117
+ }
118
+ export interface FilterGroup {
119
+ id: string;
120
+ conjunction: 'and' | 'or';
121
+ rules: (FilterRule | FilterGroup)[];
122
+ enabled: boolean;
123
+ }
124
+ export interface KanbanFilters {
125
+ searchQuery: string;
126
+ groups: FilterGroup[];
127
+ quickFilters: string[];
128
+ }
@@ -0,0 +1,2 @@
1
+ import { ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,7 @@
1
+ import { KanboomCard } from '../types/kanban';
2
+ export interface DiscoveredField {
3
+ label: string;
4
+ value: string;
5
+ type: 'text' | 'number' | 'boolean' | 'other';
6
+ }
7
+ export declare function discoverFields(cards: Record<string, KanboomCard>): DiscoveredField[];
@@ -0,0 +1,5 @@
1
+ import { KanboomCard, FilterGroup } from '../types/kanban';
2
+ export declare function evaluateFilter(card: KanboomCard, filters: {
3
+ searchQuery: string;
4
+ groups: FilterGroup[];
5
+ }): boolean;
@@ -0,0 +1,2 @@
1
+ import { ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "kanbase",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "High-performance, enterprise-grade Kanban component for React with virtualization, advanced filtering, and fluid precision interactions",
5
5
  "type": "module",
6
6
  "main": "./dist/kanbase.umd.js",
7
7
  "module": "./dist/kanbase.es.js",
8
- "types": "./dist/index.d.ts",
8
+ "types": "./dist/lib/index.d.ts",
9
9
  "files": [
10
10
  "dist",
11
11
  "assets",
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "exports": {
15
15
  ".": {
16
- "types": "./dist/index.d.ts",
16
+ "types": "./dist/lib/index.d.ts",
17
17
  "import": "./dist/kanbase.es.js",
18
18
  "require": "./dist/kanbase.umd.js"
19
19
  },
@@ -22,7 +22,7 @@
22
22
  "typesVersions": {
23
23
  "*": {
24
24
  "*": [
25
- "./dist/index.d.ts"
25
+ "./dist/lib/index.d.ts"
26
26
  ]
27
27
  }
28
28
  },
package/dist/index.d.ts DELETED
@@ -1,347 +0,0 @@
1
- import { JSX } from 'react/jsx-runtime';
2
- import { StoreApi } from 'zustand';
3
- import { UseBoundStore } from 'zustand';
4
-
5
- export declare interface AddCardRenderProps<TCard = KanboomCard> {
6
- columnId: string;
7
- onAdd: (data: Omit<TCard, 'id'>) => void;
8
- onCancel: () => void;
9
- }
10
-
11
- export declare interface AddColumnRenderProps<TColumn = KanboomColumn> {
12
- onAdd: (data: Omit<TColumn, 'id' | 'cardIds'>) => void;
13
- onCancel: () => void;
14
- }
15
-
16
- export declare const BenchmarkStats: ({ cardCount, columnCount }: BenchmarkStatsProps) => JSX.Element;
17
-
18
- declare interface BenchmarkStatsProps {
19
- cardCount: number;
20
- columnCount: number;
21
- }
22
-
23
- export declare interface CardRenderProps<TCard = KanboomCard> {
24
- card: TCard;
25
- isDragging: boolean;
26
- }
27
-
28
- export declare interface ColumnEmptyRenderProps {
29
- }
30
-
31
- export declare interface ColumnHeaderRenderProps<TColumn = KanboomColumn> {
32
- column: TColumn;
33
- cardCount: number;
34
- isOver: boolean;
35
- dragHandleProps?: {
36
- attributes: any;
37
- listeners: any;
38
- };
39
- onAddCard?: () => void;
40
- onEditColumn?: () => void;
41
- }
42
-
43
- export declare interface DiscoveredField {
44
- label: string;
45
- value: string;
46
- type: 'text' | 'number' | 'boolean' | 'other';
47
- }
48
-
49
- export declare function discoverFields(cards: Record<string, KanboomCard>): DiscoveredField[];
50
-
51
- export declare interface EditCardRenderProps<TCard = KanboomCard> {
52
- card: TCard;
53
- onSave: (updates: Partial<TCard>) => void;
54
- onCancel: () => void;
55
- onDelete?: () => void;
56
- }
57
-
58
- export declare interface EditColumnRenderProps<TColumn = KanboomColumn> {
59
- column: TColumn;
60
- onSave: (updates: Partial<TColumn>) => void;
61
- onCancel: () => void;
62
- onDelete?: () => void;
63
- }
64
-
65
- export declare function evaluateFilter(card: KanboomCard, filters: {
66
- searchQuery: string;
67
- groups: FilterGroup[];
68
- }): boolean;
69
-
70
- export declare interface FilterDefinition {
71
- field: string;
72
- label: string;
73
- type: 'text' | 'number' | 'date' | 'select' | 'boolean';
74
- options?: {
75
- label: string;
76
- value: any;
77
- }[];
78
- getFieldValue?: (card: any) => any;
79
- }
80
-
81
- export declare interface FilterGroup {
82
- id: string;
83
- conjunction: 'and' | 'or';
84
- rules: (FilterRule | FilterGroup)[];
85
- enabled: boolean;
86
- }
87
-
88
- export declare type FilterOperator = 'eq' | 'neq' | 'contains' | 'notContains' | 'in' | 'notIn' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'isEmpty' | 'isNotEmpty';
89
-
90
- export declare interface FilterRule {
91
- id: string;
92
- field: string;
93
- operator: FilterOperator;
94
- value: any;
95
- enabled: boolean;
96
- type?: 'text' | 'number' | 'date' | 'select' | 'boolean';
97
- }
98
-
99
- export declare interface KanbanFilters {
100
- searchQuery: string;
101
- groups: FilterGroup[];
102
- quickFilters: string[];
103
- }
104
-
105
- export declare interface KanbanStore extends KanboomData {
106
- config: KanboomConfig;
107
- activeId: string | null;
108
- viewingCardId: string | null;
109
- editingCardId: string | null;
110
- addingCardInColumnId: string | null;
111
- editingColumnId: string | null;
112
- addCard: (columnId: string, card: Omit<KanboomCard, 'id'>) => string;
113
- updateCard: (cardId: string, updates: Partial<KanboomCard>) => void;
114
- deleteCard: (cardId: string) => void;
115
- duplicateCard: (cardId: string) => string;
116
- addColumn: (column: Omit<KanboomColumn, 'id' | 'cardIds'>, position?: number) => string;
117
- updateColumn: (columnId: string, updates: Partial<KanboomColumn>) => void;
118
- deleteColumn: (columnId: string, moveCardsTo?: string) => void;
119
- moveCard: (cardId: string, sourceColId: string, targetColId: string, newIndex: number) => void;
120
- moveColumn: (columnId: string, newIndex: number) => void;
121
- addColumnWithCard: (cardId: string, sourceColId: string, columnData: Omit<KanboomColumn, 'id' | 'cardIds'>) => void;
122
- filters: KanbanFilters;
123
- setSearchQuery: (query: string) => void;
124
- addFilterGroup: (group: FilterGroup) => void;
125
- updateFilterGroup: (groupId: string, updates: Partial<FilterGroup>) => void;
126
- removeFilterGroup: (groupId: string) => void;
127
- removeFilterRule: (groupId: string, ruleId: string) => void;
128
- setFilters: (filters: KanbanFilters) => void;
129
- clearFilters: () => void;
130
- setBoardData: (data: KanboomData) => void;
131
- setConfig: (config: Partial<KanboomConfig>) => void;
132
- setActiveId: (id: string | null) => void;
133
- setViewingCardId: (id: string | null) => void;
134
- clearViewingCardId: () => void;
135
- setEditingCardId: (id: string | null) => void;
136
- clearEditingCardId: () => void;
137
- setAddingCardInColumnId: (id: string | null) => void;
138
- clearAddingCardInColumnId: () => void;
139
- setEditingColumnId: (id: string | null) => void;
140
- clearEditingColumnId: () => void;
141
- clearBoard: () => void;
142
- }
143
-
144
- declare function KanboomBoard<TCard extends {
145
- id: string;
146
- } = KanboomCard, TColumn extends {
147
- id: string;
148
- title: string;
149
- } = KanboomColumn>({ config }: KanboomBoardProps<TCard, TColumn>): JSX.Element;
150
- export { KanboomBoard as Kanban }
151
- export { KanboomBoard as Kanbase }
152
- export { KanboomBoard }
153
-
154
- declare interface KanboomBoardProps<TCard extends {
155
- id: string;
156
- } = KanboomCard, TColumn extends {
157
- id: string;
158
- title: string;
159
- } = KanboomColumn> {
160
- config?: KanboomConfig<TCard, TColumn>;
161
- }
162
-
163
- export declare interface KanboomCard {
164
- id: string;
165
- title: string;
166
- description?: string;
167
- content?: any;
168
- metadata?: any;
169
- previousColumnId?: string;
170
- }
171
-
172
- export declare interface KanboomColumn {
173
- id: string;
174
- title: string;
175
- cardIds: string[];
176
- metadata?: any;
177
- }
178
-
179
- export declare interface KanboomConfig<TCard = KanboomCard, TColumn = KanboomColumn> {
180
- renderCard?: (props: CardRenderProps<TCard>) => React.ReactNode;
181
- renderColumnHeader?: (props: ColumnHeaderRenderProps<TColumn>) => React.ReactNode;
182
- renderColumnEmpty?: (props: ColumnEmptyRenderProps) => React.ReactNode;
183
- renderAddButton?: (props: {
184
- onClick: () => void;
185
- columnId: string;
186
- }) => React.ReactNode;
187
- renderAddForm?: (props: AddCardRenderProps<TCard>) => React.ReactNode;
188
- renderEditForm?: (props: EditCardRenderProps<TCard>) => React.ReactNode;
189
- renderAddColumnButton?: (props: {
190
- onClick: () => void;
191
- }) => React.ReactNode;
192
- renderAddColumnForm?: (props: AddColumnRenderProps<TColumn>) => React.ReactNode;
193
- renderEditColumnForm?: (props: EditColumnRenderProps<TColumn>) => React.ReactNode;
194
- renderCardView?: (props: ViewCardRenderProps<TCard>) => React.ReactNode;
195
- allowAdd?: boolean;
196
- allowEdit?: boolean;
197
- allowColumnAdd?: boolean;
198
- allowColumnEdit?: boolean;
199
- allowColumnDelete?: boolean;
200
- allowColumnReorder?: boolean;
201
- allowFilters?: boolean;
202
- showURLSync?: boolean;
203
- dragActivationDistance?: number;
204
- touchActivationDelay?: number;
205
- virtualOverscan?: number;
206
- estimatedCardHeight?: number;
207
- columnWidth?: number;
208
- columnMinHeight?: number;
209
- gap?: number;
210
- onCardMove?: (cardId: string, fromColumn: string, toColumn: string, index: number) => void;
211
- onCardClick?: (card: TCard) => void;
212
- onEditCard?: (card: TCard) => void;
213
- onColumnClick?: (column: TColumn) => void;
214
- onEditColumn?: (column: TColumn) => void;
215
- }
216
-
217
- export declare interface KanboomData<TCard = KanboomCard> {
218
- cards: Record<string, TCard>;
219
- columns: Record<string, KanboomColumn>;
220
- columnOrder: string[];
221
- }
222
-
223
- export declare const selectAllCards: (state: KanbanStore) => Record<string, KanboomCard>;
224
-
225
- export declare const selectAllColumns: (state: KanbanStore) => Record<string, KanboomColumn>;
226
-
227
- export declare const selectBoardData: (state: KanbanStore) => {
228
- cards: Record<string, KanboomCard>;
229
- columns: Record<string, KanboomColumn>;
230
- columnOrder: string[];
231
- };
232
-
233
- /**
234
- * Zustand selectors for optimized component subscriptions
235
- * Components should use these instead of subscribing to the entire store
236
- */
237
- export declare const selectCard: (cardId: string) => (state: KanbanStore) => KanboomCard | undefined;
238
-
239
- export declare const selectCardCount: (state: KanbanStore) => number;
240
-
241
- export declare const selectCardsByIds: (cardIds: string[]) => (state: KanbanStore) => KanboomCard[];
242
-
243
- export declare const selectColumn: (columnId: string) => (state: KanbanStore) => KanboomColumn | undefined;
244
-
245
- export declare const selectColumnCardIds: (columnId: string) => (state: KanbanStore) => string[];
246
-
247
- export declare const selectColumnCards: (columnId: string) => (state: KanbanStore) => KanboomCard[];
248
-
249
- export declare const selectColumnCount: (state: KanbanStore) => number;
250
-
251
- export declare const selectColumnOrder: (state: KanbanStore) => string[];
252
-
253
- export declare const selectMoveCard: (state: KanbanStore) => (cardId: string, sourceColId: string, targetColId: string, newIndex: number) => void;
254
-
255
- export declare const selectMoveColumn: (state: KanbanStore) => (columnId: string, newIndex: number) => void;
256
-
257
- export declare const selectSetBoardData: (state: KanbanStore) => (data: KanboomData) => void;
258
-
259
- export declare const useFPS: () => number;
260
-
261
- export declare function useKanban<TCard = any, TColumn = any>(config?: KanboomConfig<TCard, TColumn>): {
262
- activeId: string | null;
263
- overId: string | null;
264
- overSide: "top" | "bottom" | "left" | "right" | null;
265
- viewingCardId: string | null;
266
- editingCardId: string | null;
267
- addingCardInColumnId: string | null;
268
- editingColumnId: string | null;
269
- setViewingCardId: (id: string | null) => void;
270
- clearViewingCardId: () => void;
271
- handleDragStart: (cardId: string) => void;
272
- handleDragOver: (id: string | null, side?: "top" | "bottom" | "left" | "right" | null) => void;
273
- handleDragEnd: () => void;
274
- moveCard: (cardId: string, sourceColumnId: string, targetColumnId: string, index: number) => void;
275
- addCard: (columnId: string, card: Omit<KanboomCard, "id">) => string;
276
- updateCard: (cardId: string, updates: Partial<KanboomCard>) => void;
277
- deleteCard: (cardId: string) => void;
278
- duplicateCard: (cardId: string) => string;
279
- setEditingCardId: (id: string | null) => void;
280
- clearEditingCardId: () => void;
281
- setAddingCardInColumnId: (id: string | null) => void;
282
- clearAddingCardInColumnId: () => void;
283
- addColumn: (column: Omit<KanboomColumn, "id" | "cardIds">, position?: number) => string;
284
- addColumnWithCard: (cardId: string, sourceColId: string, columnData: Omit<KanboomColumn, "id" | "cardIds">) => void;
285
- updateColumn: (columnId: string, updates: Partial<KanboomColumn>) => void;
286
- deleteColumn: (columnId: string, moveCardsTo?: string) => void;
287
- moveColumn: (columnId: string, newIndex: number) => void;
288
- setEditingColumnId: (id: string | null) => void;
289
- clearEditingColumnId: () => void;
290
- clearBoard: () => void;
291
- config: {
292
- dragActivationDistance: number;
293
- touchActivationDelay: number;
294
- virtualOverscan: number;
295
- estimatedCardHeight: number;
296
- columnWidth: number;
297
- columnMinHeight: number;
298
- gap: number;
299
- allowAdd: boolean;
300
- allowEdit: boolean;
301
- allowColumnAdd: boolean;
302
- allowColumnEdit: boolean;
303
- allowColumnDelete: boolean;
304
- allowColumnReorder: boolean;
305
- allowFilters: boolean;
306
- showURLSync: boolean;
307
- };
308
- filters: KanbanFilters;
309
- setSearchQuery: (query: string) => void;
310
- addFilterGroup: (group: FilterGroup) => void;
311
- updateFilterGroup: (groupId: string, updates: Partial<FilterGroup>) => void;
312
- removeFilterGroup: (groupId: string) => void;
313
- removeFilterRule: (groupId: string, ruleId: string) => void;
314
- setFilters: (filters: KanbanFilters) => void;
315
- clearFilters: () => void;
316
- setBoardData: (data: KanboomData) => void;
317
- setConfig: (config: Partial<KanboomConfig>) => void;
318
- setActiveId: (id: string | null) => void;
319
- cards: Record<string, KanboomCard>;
320
- columns: Record<string, KanboomColumn>;
321
- columnOrder: string[];
322
- };
323
-
324
- export declare const useKanbanStore: UseBoundStore<Omit<StoreApi<KanbanStore>, "setState" | "devtools"> & {
325
- setState(partial: KanbanStore | Partial<KanbanStore> | ((state: KanbanStore) => KanbanStore | Partial<KanbanStore>), replace?: false | undefined, action?: (string | {
326
- [x: string]: unknown;
327
- [x: number]: unknown;
328
- [x: symbol]: unknown;
329
- type: string;
330
- }) | undefined): void;
331
- setState(state: KanbanStore | ((state: KanbanStore) => KanbanStore), replace: true, action?: (string | {
332
- [x: string]: unknown;
333
- [x: number]: unknown;
334
- [x: symbol]: unknown;
335
- type: string;
336
- }) | undefined): void;
337
- devtools: {
338
- cleanup: () => void;
339
- };
340
- }>;
341
-
342
- export declare interface ViewCardRenderProps<TCard = KanboomCard> {
343
- card: TCard;
344
- onClose: () => void;
345
- }
346
-
347
- export { }