@composy/kanban-core 0.0.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.
Files changed (145) hide show
  1. package/README.md +37 -0
  2. package/dist/index.css +307 -0
  3. package/dist/index.js +1279 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.min.css +1 -0
  6. package/dist/index.min.js +1 -0
  7. package/es/core/ColumnManager.d.ts +99 -0
  8. package/es/core/ColumnManager.d.ts.map +1 -0
  9. package/es/core/ColumnManager.js +285 -0
  10. package/es/core/ColumnManager.js.map +1 -0
  11. package/es/core/DragController.d.ts +55 -0
  12. package/es/core/DragController.d.ts.map +1 -0
  13. package/es/core/DragController.js +225 -0
  14. package/es/core/DragController.js.map +1 -0
  15. package/es/core/EventEmitter.d.ts +35 -0
  16. package/es/core/EventEmitter.d.ts.map +1 -0
  17. package/es/core/EventEmitter.js +68 -0
  18. package/es/core/EventEmitter.js.map +1 -0
  19. package/es/core/FilterEngine.d.ts +45 -0
  20. package/es/core/FilterEngine.d.ts.map +1 -0
  21. package/es/core/FilterEngine.js +127 -0
  22. package/es/core/FilterEngine.js.map +1 -0
  23. package/es/core/KanbanBoard.d.ts +152 -0
  24. package/es/core/KanbanBoard.d.ts.map +1 -0
  25. package/es/core/KanbanBoard.js +332 -0
  26. package/es/core/KanbanBoard.js.map +1 -0
  27. package/es/core/Renderer.d.ts +59 -0
  28. package/es/core/Renderer.d.ts.map +1 -0
  29. package/es/core/Renderer.js +247 -0
  30. package/es/core/Renderer.js.map +1 -0
  31. package/es/core/index.d.ts +11 -0
  32. package/es/core/index.d.ts.map +1 -0
  33. package/es/core/index.js +17 -0
  34. package/es/index.d.ts +15 -0
  35. package/es/index.d.ts.map +1 -0
  36. package/es/index.js +21 -0
  37. package/es/styles/kanban.css +306 -0
  38. package/es/types/index.d.ts +209 -0
  39. package/es/types/index.d.ts.map +1 -0
  40. package/es/types/index.js +10 -0
  41. package/es/utils/dom.d.ts +24 -0
  42. package/es/utils/dom.d.ts.map +1 -0
  43. package/es/utils/dom.js +37 -0
  44. package/es/utils/dom.js.map +1 -0
  45. package/es/utils/id.d.ts +9 -0
  46. package/es/utils/id.d.ts.map +1 -0
  47. package/es/utils/id.js +22 -0
  48. package/es/utils/id.js.map +1 -0
  49. package/es/utils/index.d.ts +25 -0
  50. package/es/utils/index.d.ts.map +1 -0
  51. package/es/utils/index.js +20 -0
  52. package/es/utils/index.js.map +1 -0
  53. package/es/version.d.ts +6 -0
  54. package/es/version.d.ts.map +1 -0
  55. package/es/version.js +15 -0
  56. package/es/version.js.map +1 -0
  57. package/esm/core/ColumnManager.d.ts +99 -0
  58. package/esm/core/ColumnManager.d.ts.map +1 -0
  59. package/esm/core/ColumnManager.js +285 -0
  60. package/esm/core/ColumnManager.js.map +1 -0
  61. package/esm/core/DragController.d.ts +55 -0
  62. package/esm/core/DragController.d.ts.map +1 -0
  63. package/esm/core/DragController.js +225 -0
  64. package/esm/core/DragController.js.map +1 -0
  65. package/esm/core/EventEmitter.d.ts +35 -0
  66. package/esm/core/EventEmitter.d.ts.map +1 -0
  67. package/esm/core/EventEmitter.js +68 -0
  68. package/esm/core/EventEmitter.js.map +1 -0
  69. package/esm/core/FilterEngine.d.ts +45 -0
  70. package/esm/core/FilterEngine.d.ts.map +1 -0
  71. package/esm/core/FilterEngine.js +127 -0
  72. package/esm/core/FilterEngine.js.map +1 -0
  73. package/esm/core/KanbanBoard.d.ts +152 -0
  74. package/esm/core/KanbanBoard.d.ts.map +1 -0
  75. package/esm/core/KanbanBoard.js +332 -0
  76. package/esm/core/KanbanBoard.js.map +1 -0
  77. package/esm/core/Renderer.d.ts +59 -0
  78. package/esm/core/Renderer.d.ts.map +1 -0
  79. package/esm/core/Renderer.js +247 -0
  80. package/esm/core/Renderer.js.map +1 -0
  81. package/esm/core/index.d.ts +11 -0
  82. package/esm/core/index.d.ts.map +1 -0
  83. package/esm/core/index.js +17 -0
  84. package/esm/index.d.ts +15 -0
  85. package/esm/index.d.ts.map +1 -0
  86. package/esm/index.js +21 -0
  87. package/esm/styles/kanban.less +339 -0
  88. package/esm/types/index.d.ts +209 -0
  89. package/esm/types/index.d.ts.map +1 -0
  90. package/esm/types/index.js +10 -0
  91. package/esm/utils/dom.d.ts +24 -0
  92. package/esm/utils/dom.d.ts.map +1 -0
  93. package/esm/utils/dom.js +37 -0
  94. package/esm/utils/dom.js.map +1 -0
  95. package/esm/utils/id.d.ts +9 -0
  96. package/esm/utils/id.d.ts.map +1 -0
  97. package/esm/utils/id.js +22 -0
  98. package/esm/utils/id.js.map +1 -0
  99. package/esm/utils/index.d.ts +25 -0
  100. package/esm/utils/index.d.ts.map +1 -0
  101. package/esm/utils/index.js +20 -0
  102. package/esm/utils/index.js.map +1 -0
  103. package/esm/version.d.ts +6 -0
  104. package/esm/version.d.ts.map +1 -0
  105. package/esm/version.js +15 -0
  106. package/esm/version.js.map +1 -0
  107. package/lib/core/ColumnManager.cjs +286 -0
  108. package/lib/core/ColumnManager.cjs.map +1 -0
  109. package/lib/core/ColumnManager.d.ts +99 -0
  110. package/lib/core/DragController.cjs +226 -0
  111. package/lib/core/DragController.cjs.map +1 -0
  112. package/lib/core/DragController.d.ts +55 -0
  113. package/lib/core/EventEmitter.cjs +69 -0
  114. package/lib/core/EventEmitter.cjs.map +1 -0
  115. package/lib/core/EventEmitter.d.ts +35 -0
  116. package/lib/core/FilterEngine.cjs +128 -0
  117. package/lib/core/FilterEngine.cjs.map +1 -0
  118. package/lib/core/FilterEngine.d.ts +45 -0
  119. package/lib/core/KanbanBoard.cjs +334 -0
  120. package/lib/core/KanbanBoard.cjs.map +1 -0
  121. package/lib/core/KanbanBoard.d.ts +152 -0
  122. package/lib/core/Renderer.cjs +248 -0
  123. package/lib/core/Renderer.cjs.map +1 -0
  124. package/lib/core/Renderer.d.ts +59 -0
  125. package/lib/core/index.cjs +24 -0
  126. package/lib/core/index.d.ts +11 -0
  127. package/lib/index.cjs +37 -0
  128. package/lib/index.d.ts +15 -0
  129. package/lib/package.json +3 -0
  130. package/lib/styles/kanban.css +306 -0
  131. package/lib/types/index.cjs +11 -0
  132. package/lib/types/index.d.ts +209 -0
  133. package/lib/utils/dom.cjs +42 -0
  134. package/lib/utils/dom.cjs.map +1 -0
  135. package/lib/utils/dom.d.ts +24 -0
  136. package/lib/utils/id.cjs +24 -0
  137. package/lib/utils/id.cjs.map +1 -0
  138. package/lib/utils/id.d.ts +9 -0
  139. package/lib/utils/index.cjs +28 -0
  140. package/lib/utils/index.cjs.map +1 -0
  141. package/lib/utils/index.d.ts +25 -0
  142. package/lib/version.cjs +16 -0
  143. package/lib/version.cjs.map +1 -0
  144. package/lib/version.d.ts +6 -0
  145. package/package.json +105 -0
@@ -0,0 +1,209 @@
1
+ /**
2
+ * @composy/kanban-core - Type Definitions
3
+ */
4
+ /**
5
+ * 标签
6
+ */
7
+ export interface Label {
8
+ id: string;
9
+ name: string;
10
+ color: string;
11
+ }
12
+ /**
13
+ * 卡片
14
+ */
15
+ export interface Card {
16
+ id: string;
17
+ title: string;
18
+ description?: string;
19
+ labels?: Label[];
20
+ assignees?: string[];
21
+ dueDate?: string | Date;
22
+ priority?: 'low' | 'medium' | 'high' | 'urgent';
23
+ order: number;
24
+ columnId: string;
25
+ /** 自定义数据 */
26
+ data?: Record<string, unknown>;
27
+ /** 创建时间 */
28
+ createdAt?: string;
29
+ /** 更新时间 */
30
+ updatedAt?: string;
31
+ }
32
+ /**
33
+ * 列
34
+ */
35
+ export interface Column {
36
+ id: string;
37
+ title: string;
38
+ cards: Card[];
39
+ /** WIP 限制(Work In Progress) */
40
+ wipLimit?: number;
41
+ /** 是否折叠 */
42
+ collapsed?: boolean;
43
+ /** 列颜色 */
44
+ color?: string;
45
+ /** 排序序号 */
46
+ order: number;
47
+ }
48
+ /**
49
+ * 看板数据
50
+ */
51
+ export interface Board {
52
+ id: string;
53
+ title: string;
54
+ columns: Column[];
55
+ labels?: Label[];
56
+ }
57
+ /**
58
+ * 看板配置项
59
+ */
60
+ export interface KanbanOptions {
61
+ /** 容器元素或 CSS 选择器 */
62
+ container: HTMLElement | string;
63
+ /** 初始列数据 */
64
+ columns?: Partial<Column>[];
65
+ /** 初始标签 */
66
+ labels?: Label[];
67
+ /** 看板标题 */
68
+ title?: string;
69
+ /** 是否启用拖拽 */
70
+ draggable?: boolean;
71
+ /** 是否启用列拖拽 */
72
+ columnDraggable?: boolean;
73
+ /** 是否允许跨列拖拽 */
74
+ crossColumnDrag?: boolean;
75
+ /** 是否启用搜索 */
76
+ searchable?: boolean;
77
+ /** 是否显示添加卡片按钮 */
78
+ showAddCard?: boolean;
79
+ /** 是否显示添加列按钮 */
80
+ showAddColumn?: boolean;
81
+ /** 是否显示列头部操作菜单 */
82
+ showColumnActions?: boolean;
83
+ /** 是否显示卡片数量徽章 */
84
+ showCardCount?: boolean;
85
+ /** 调试模式 */
86
+ debug?: boolean;
87
+ /** 自定义 CSS 类名前缀 */
88
+ classPrefix?: string;
89
+ /** 卡片渲染器 */
90
+ cardRenderer?: (card: Card, element: HTMLElement) => void;
91
+ /** 列头部渲染器 */
92
+ columnHeaderRenderer?: (column: Column, element: HTMLElement) => void;
93
+ onCardAdd?: (card: Card, columnId: string) => void;
94
+ onCardRemove?: (card: Card, columnId: string) => void;
95
+ onCardMove?: (card: Card, fromColumnId: string, toColumnId: string, toIndex: number) => void;
96
+ onCardClick?: (card: Card) => void;
97
+ onCardUpdate?: (card: Card) => void;
98
+ onColumnAdd?: (column: Column) => void;
99
+ onColumnRemove?: (column: Column) => void;
100
+ onColumnMove?: (column: Column, fromIndex: number, toIndex: number) => void;
101
+ onColumnCollapse?: (column: Column, collapsed: boolean) => void;
102
+ onReady?: (instance: unknown) => void;
103
+ onDestroy?: () => void;
104
+ onError?: (error: Error) => void;
105
+ }
106
+ /**
107
+ * 看板事件映射
108
+ */
109
+ export interface KanbanEventMap {
110
+ 'ready': {
111
+ instance: unknown;
112
+ };
113
+ 'destroy': void;
114
+ 'error': {
115
+ error: Error;
116
+ };
117
+ 'card:add': {
118
+ card: Card;
119
+ columnId: string;
120
+ };
121
+ 'card:remove': {
122
+ card: Card;
123
+ columnId: string;
124
+ };
125
+ 'card:move': {
126
+ card: Card;
127
+ fromColumnId: string;
128
+ toColumnId: string;
129
+ toIndex: number;
130
+ };
131
+ 'card:click': {
132
+ card: Card;
133
+ };
134
+ 'card:update': {
135
+ card: Card;
136
+ changes: Partial<Card>;
137
+ };
138
+ 'card:drag-start': {
139
+ card: Card;
140
+ };
141
+ 'card:drag-end': {
142
+ card: Card;
143
+ };
144
+ 'column:add': {
145
+ column: Column;
146
+ };
147
+ 'column:remove': {
148
+ column: Column;
149
+ };
150
+ 'column:move': {
151
+ column: Column;
152
+ fromIndex: number;
153
+ toIndex: number;
154
+ };
155
+ 'column:collapse': {
156
+ column: Column;
157
+ collapsed: boolean;
158
+ };
159
+ 'column:update': {
160
+ column: Column;
161
+ changes: Partial<Column>;
162
+ };
163
+ 'filter:change': {
164
+ criteria: FilterCriteria;
165
+ };
166
+ 'filter:clear': void;
167
+ 'search:change': {
168
+ keyword: string;
169
+ };
170
+ 'data:import': {
171
+ board: BoardData;
172
+ };
173
+ 'data:export': {
174
+ board: BoardData;
175
+ };
176
+ }
177
+ /**
178
+ * 筛选条件
179
+ */
180
+ export interface FilterCriteria {
181
+ /** 关键词搜索(匹配标题和描述) */
182
+ keyword?: string;
183
+ /** 按标签筛选 */
184
+ labelIds?: string[];
185
+ /** 按成员筛选 */
186
+ assignees?: string[];
187
+ /** 按优先级筛选 */
188
+ priorities?: Card['priority'][];
189
+ /** 按列筛选 */
190
+ columnIds?: string[];
191
+ /** 按截止日期范围筛选 */
192
+ dueDateRange?: {
193
+ start?: string;
194
+ end?: string;
195
+ };
196
+ /** 自定义筛选函数 */
197
+ custom?: (card: Card) => boolean;
198
+ }
199
+ /**
200
+ * 看板导出数据格式
201
+ */
202
+ export interface BoardData {
203
+ version: string;
204
+ title: string;
205
+ columns: Column[];
206
+ labels: Label[];
207
+ exportedAt: string;
208
+ }
209
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;CAClB;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,SAAS,EAAE,WAAW,GAAG,MAAM,CAAC;IAChC,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5B,WAAW;IACX,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1D,aAAa;IACb,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAGtE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7F,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5E,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAE7B,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;IAG1B,UAAU,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,aAAa,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,WAAW,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACvF,YAAY,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAC7B,aAAa,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACtD,iBAAiB,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAClC,eAAe,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAGhC,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,eAAe,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,aAAa,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,iBAAiB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1D,eAAe,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IAG9D,eAAe,EAAE;QAAE,QAAQ,EAAE,cAAc,CAAA;KAAE,CAAC;IAC9C,cAAc,EAAE,IAAI,CAAC;IACrB,eAAe,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAGrC,aAAa,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IACpC,aAAa,EAAE;QAAE,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;CACrC;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa;IACb,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IAChC,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB;IAChB,YAAY,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,cAAc;IACd,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;CAClC;AAMD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/kanban-core v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-08-17 11:33:25 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ /*! End of @composy/kanban-core | Powered by @composy/builder */
@@ -0,0 +1,24 @@
1
+ /**
2
+ * DOM 工具函数
3
+ */
4
+ /**
5
+ * 创建 DOM 元素
6
+ */
7
+ export declare function createElement<K extends keyof HTMLElementTagNameMap>(tag: K, className?: string, attributes?: Record<string, string>): HTMLElementTagNameMap[K];
8
+ /**
9
+ * 从选择器或元素获取 HTMLElement
10
+ */
11
+ export declare function resolveElement(target: HTMLElement | string): HTMLElement | null;
12
+ /**
13
+ * 清空元素内容
14
+ */
15
+ export declare function clearElement(el: HTMLElement): void;
16
+ /**
17
+ * 安全移除元素
18
+ */
19
+ export declare function removeElement(el: HTMLElement | null): void;
20
+ /**
21
+ * 插入元素到指定位置
22
+ */
23
+ export declare function insertAt(parent: HTMLElement, child: HTMLElement, index: number): void;
24
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utils/dom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,qBAAqB,EACjE,GAAG,EAAE,CAAC,EACN,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,qBAAqB,CAAC,CAAC,CAAC,CAS1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAK/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOrF"}
@@ -0,0 +1,37 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/kanban-core v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-08-17 11:33:25 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ //#region src/utils/dom.ts
11
+ function createElement(tag, className, attributes) {
12
+ const el = document.createElement(tag);
13
+ if (className) el.className = className;
14
+ if (attributes) Object.entries(attributes).forEach(([key, value]) => {
15
+ el.setAttribute(key, value);
16
+ });
17
+ return el;
18
+ }
19
+ function resolveElement(target) {
20
+ if (typeof target === "string") return document.querySelector(target);
21
+ return target;
22
+ }
23
+ function clearElement(el) {
24
+ el.innerHTML = "";
25
+ }
26
+ function removeElement(el) {
27
+ el?.parentNode?.removeChild(el);
28
+ }
29
+ function insertAt(parent, child, index) {
30
+ const ref = parent.children[index];
31
+ if (ref) parent.insertBefore(child, ref);
32
+ else parent.appendChild(child);
33
+ }
34
+ //#endregion
35
+ export { clearElement, createElement, insertAt, removeElement, resolveElement };
36
+ /*! End of @composy/kanban-core | Powered by @composy/builder */
37
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","names":[],"sources":["../../src/utils/dom.ts"],"sourcesContent":["/**\n * DOM 工具函数\n */\n\n/**\n * 创建 DOM 元素\n */\nexport function createElement<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n className?: string,\n attributes?: Record<string, string>,\n): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n if (className) el.className = className;\n if (attributes) {\n Object.entries(attributes).forEach(([key, value]) => {\n el.setAttribute(key, value);\n });\n }\n return el;\n}\n\n/**\n * 从选择器或元素获取 HTMLElement\n */\nexport function resolveElement(target: HTMLElement | string): HTMLElement | null {\n if (typeof target === 'string') {\n return document.querySelector(target);\n }\n return target;\n}\n\n/**\n * 清空元素内容\n */\nexport function clearElement(el: HTMLElement): void {\n el.innerHTML = '';\n}\n\n/**\n * 安全移除元素\n */\nexport function removeElement(el: HTMLElement | null): void {\n el?.parentNode?.removeChild(el);\n}\n\n/**\n * 插入元素到指定位置\n */\nexport function insertAt(parent: HTMLElement, child: HTMLElement, index: number): void {\n const ref = parent.children[index] as HTMLElement | undefined;\n if (ref) {\n parent.insertBefore(child, ref);\n } else {\n parent.appendChild(child);\n }\n}\n"],"mappings":";;;;;;;;;;AAOO,SAAS,cACd,KACA,WACA,YAC0B;CAC1B,MAAM,KAAK,SAAS,cAAc,GAAG;CACrC,IAAI,WAAW,GAAG,YAAY;CAC9B,IAAI,YACF,OAAO,QAAQ,UAAU,CAAA,CAAE,SAAS,CAAC,KAAK,WAAW;EACnD,GAAG,aAAa,KAAK,KAAK;CAC5B,CAAC;CAEH,OAAO;AACT;AAKO,SAAS,eAAe,QAAkD;CAC/E,IAAI,OAAO,WAAW,UACpB,OAAO,SAAS,cAAc,MAAM;CAEtC,OAAO;AACT;AAKO,SAAS,aAAa,IAAuB;CAClD,GAAG,YAAY;AACjB;AAKO,SAAS,cAAc,IAA8B;CAC1D,IAAI,YAAY,YAAY,EAAE;AAChC;AAKO,SAAS,SAAS,QAAqB,OAAoB,OAAqB;CACrF,MAAM,MAAM,OAAO,SAAS;CAC5B,IAAI,KACF,OAAO,aAAa,OAAO,GAAG;MAE9B,OAAO,YAAY,KAAK;AAE5B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 生成唯一 ID
3
+ */
4
+ export declare function generateId(prefix?: string): string;
5
+ /**
6
+ * 重置计数器(仅测试用)
7
+ */
8
+ export declare function resetIdCounter(): void;
9
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,SAAO,GAAG,MAAM,CAKhD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
package/es/utils/id.js ADDED
@@ -0,0 +1,22 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/kanban-core v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-08-17 11:33:25 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ //#region src/utils/id.ts
11
+ let counter = 0;
12
+ function generateId(prefix = "kb") {
13
+ counter++;
14
+ return `${prefix}_${Date.now().toString(36)}_${Math.random().toString(36).substring(2, 6)}_${counter}`;
15
+ }
16
+ function resetIdCounter() {
17
+ counter = 0;
18
+ }
19
+ //#endregion
20
+ export { generateId, resetIdCounter };
21
+ /*! End of @composy/kanban-core | Powered by @composy/builder */
22
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","names":[],"sources":["../../src/utils/id.ts"],"sourcesContent":["let counter = 0;\n\n/**\n * 生成唯一 ID\n */\nexport function generateId(prefix = 'kb'): string {\n counter++;\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 6);\n return `${prefix}_${timestamp}_${random}_${counter}`;\n}\n\n/**\n * 重置计数器(仅测试用)\n */\nexport function resetIdCounter(): void {\n counter = 0;\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAI,UAAU;AAKP,SAAS,WAAW,SAAS,MAAc;CAChD;CAGA,OAAO,GAAG,OAAM,GAFE,KAAK,IAAI,CAAA,CAAE,SAAS,EAElB,EAAS,GADd,KAAK,OAAO,CAAA,CAAE,SAAS,EAAE,CAAA,CAAE,UAAU,GAAG,CACtB,EAAM,GAAI;AAC7C;AAKO,SAAS,iBAAuB;CACrC,UAAU;AACZ"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @file index.ts
3
+ * @description index 模块
4
+ */
5
+ /**
6
+ * Utility functions for @composy/kanban-core
7
+ */
8
+ export { generateId, resetIdCounter } from './id';
9
+ export { createElement, resolveElement, clearElement, removeElement, insertAt } from './dom';
10
+ /**
11
+ * Get element from selector or element
12
+ * @deprecated Use resolveElement instead
13
+ */
14
+ /**
15
+ * getElement 函数
16
+ * @param target - 参数
17
+ * @returns 返回值
18
+ */
19
+ /**
20
+ * getElement - get Element function
21
+ * @param target - 参数说明
22
+ * @returns 返回值说明
23
+ */
24
+ export declare function getElement(target: HTMLElement | string): HTMLElement | null;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE7F;;;GAGG;AACH;;;;GAIG;AACH;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAK3E"}
@@ -0,0 +1,20 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/kanban-core v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-08-17 11:33:25 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ import { generateId, resetIdCounter } from "./id.js";
11
+ import { clearElement, createElement, insertAt, removeElement, resolveElement } from "./dom.js";
12
+ //#region src/utils/index.ts
13
+ function getElement(target) {
14
+ if (typeof target === "string") return document.querySelector(target);
15
+ return target;
16
+ }
17
+ //#endregion
18
+ export { clearElement, createElement, generateId, getElement, insertAt, removeElement, resetIdCounter, resolveElement };
19
+ /*! End of @composy/kanban-core | Powered by @composy/builder */
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/utils/index.ts"],"sourcesContent":["/**\n * @file index.ts\n * @description index 模块\n */\n\n/**\n * Utility functions for @composy/kanban-core\n */\n\nexport { generateId, resetIdCounter } from './id';\nexport { createElement, resolveElement, clearElement, removeElement, insertAt } from './dom';\n\n/**\n * Get element from selector or element\n * @deprecated Use resolveElement instead\n */\n/**\n * getElement 函数\n * @param target - 参数\n * @returns 返回值\n */\n/**\n * getElement - get Element function\n * @param target - 参数说明\n * @returns 返回值说明\n */\nexport function getElement(target: HTMLElement | string): HTMLElement | null {\n if (typeof target === 'string') {\n return document.querySelector(target);\n }\n return target;\n}\n"],"mappings":";;;;;;;;;;;;AA0BO,SAAS,WAAW,QAAkD;CAC3E,IAAI,OAAO,WAAW,UACpB,OAAO,SAAS,cAAc,MAAM;CAEtC,OAAO;AACT"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @file version.ts
3
+ * @description version 模块
4
+ */
5
+ export declare const VERSION = "0.1.0";
6
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC"}
package/es/version.js ADDED
@@ -0,0 +1,15 @@
1
+ /*!
2
+ * ***********************************
3
+ * @composy/kanban-core v0.0.1 *
4
+ * Built with rollup *
5
+ * Build time: 2024-08-17 11:33:25 *
6
+ * Build mode: production *
7
+ * Minified: No *
8
+ * ***********************************
9
+ */
10
+ //#region src/version.ts
11
+ const VERSION = "0.1.0";
12
+ //#endregion
13
+ export { VERSION };
14
+ /*! End of @composy/kanban-core | Powered by @composy/builder */
15
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","names":[],"sources":["../src/version.ts"],"sourcesContent":["/**\n * @file version.ts\n * @description version 模块\n */\n\nexport const VERSION = '0.1.0';\n"],"mappings":";;;;;;;;;;AAKO,MAAM,UAAU"}
@@ -0,0 +1,99 @@
1
+ import type { Column, Card } from '../types';
2
+ import { EventEmitter } from './EventEmitter';
3
+ /**
4
+ * 列管理器
5
+ */
6
+ export declare class ColumnManager {
7
+ private columns;
8
+ private events;
9
+ constructor(events: EventEmitter);
10
+ /**
11
+ * 初始化列
12
+ */
13
+ init(columns: Partial<Column>[]): void;
14
+ /**
15
+ * 标准化列数据
16
+ */
17
+ private normalizeColumn;
18
+ /**
19
+ * 标准化卡片数据
20
+ */
21
+ private normalizeCard;
22
+ /**
23
+ * 获取所有列
24
+ */
25
+ getColumns(): Column[];
26
+ /**
27
+ * 获取单列
28
+ */
29
+ getColumn(id: string): Column | undefined;
30
+ /**
31
+ * 添加列
32
+ */
33
+ addColumn(partial: Partial<Column>): Column;
34
+ /**
35
+ * 移除列
36
+ */
37
+ removeColumn(id: string): Column | undefined;
38
+ /**
39
+ * 更新列
40
+ */
41
+ updateColumn(id: string, changes: Partial<Column>): Column | undefined;
42
+ /**
43
+ * 移动列
44
+ */
45
+ moveColumn(id: string, toIndex: number): void;
46
+ /**
47
+ * 折叠/展开列
48
+ */
49
+ toggleCollapse(id: string): void;
50
+ /**
51
+ * 获取列中的卡片
52
+ */
53
+ getCards(columnId: string): Card[];
54
+ /**
55
+ * 添加卡片到列
56
+ */
57
+ addCard(columnId: string, partial: Partial<Card>): Card | undefined;
58
+ /**
59
+ * 移除卡片
60
+ */
61
+ removeCard(cardId: string): Card | undefined;
62
+ /**
63
+ * 更新卡片
64
+ */
65
+ updateCard(cardId: string, changes: Partial<Card>): Card | undefined;
66
+ /**
67
+ * 获取单张卡片
68
+ */
69
+ getCard(cardId: string): Card | undefined;
70
+ /**
71
+ * 移动卡片
72
+ */
73
+ moveCard(cardId: string, toColumnId: string, toIndex: number): void;
74
+ /**
75
+ * 获取所有卡片
76
+ */
77
+ getAllCards(): Card[];
78
+ /**
79
+ * 获取卡片总数
80
+ */
81
+ getCardCount(): number;
82
+ /**
83
+ * 重新排序列
84
+ */
85
+ private reorderColumns;
86
+ /**
87
+ * 重新排序列中的卡片
88
+ */
89
+ private reorderCards;
90
+ /**
91
+ * 设置列数据(用于导入)
92
+ */
93
+ setColumns(columns: Column[]): void;
94
+ /**
95
+ * 清空所有数据
96
+ */
97
+ clear(): void;
98
+ }
99
+ //# sourceMappingURL=ColumnManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnManager.d.ts","sourceRoot":"","sources":["../../src/core/ColumnManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAIhC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI;IAItC;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAS3C;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAS5C;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS;IAQtE;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAS7C;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOhC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IAKlC;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS;IAsBnE;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAa5C;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS;IAapE;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAQzC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IA6CnE;;OAEG;IACH,WAAW,IAAI,IAAI,EAAE;IAQrB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAInC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}