@composy/kanban-core 0.0.1 → 0.0.2

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 (147) hide show
  1. package/README.md +171 -37
  2. package/dist/index.css +114 -114
  3. package/dist/index.js +221 -126
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.min.css +1 -1
  6. package/dist/index.min.js +758 -1
  7. package/dist/index.min.js.map +1 -0
  8. package/es/.dts-output-manifest.json +1 -0
  9. package/es/.dts.tsbuildinfo +1 -0
  10. package/es/core/ColumnManager.d.ts +4 -3
  11. package/es/core/ColumnManager.js +43 -18
  12. package/es/core/ColumnManager.js.map +1 -1
  13. package/es/core/DragController.d.ts +1 -2
  14. package/es/core/DragController.js +11 -1
  15. package/es/core/DragController.js.map +1 -1
  16. package/es/core/EventEmitter.d.ts +0 -1
  17. package/es/core/EventEmitter.js +8 -3
  18. package/es/core/EventEmitter.js.map +1 -1
  19. package/es/core/FilterEngine.d.ts +1 -2
  20. package/es/core/FilterEngine.js +10 -5
  21. package/es/core/FilterEngine.js.map +1 -1
  22. package/es/core/KanbanBoard.d.ts +3 -3
  23. package/es/core/KanbanBoard.js +61 -15
  24. package/es/core/KanbanBoard.js.map +1 -1
  25. package/es/core/Renderer.d.ts +2 -3
  26. package/es/core/Renderer.js +11 -7
  27. package/es/core/Renderer.js.map +1 -1
  28. package/es/core/index.d.ts +2 -3
  29. package/es/core/index.js +1 -1
  30. package/es/index.d.ts +3 -4
  31. package/es/index.js +2 -2
  32. package/es/styles/kanban.css +114 -114
  33. package/es/types/index.d.ts +3 -4
  34. package/es/types/index.js +1 -1
  35. package/es/utils/dom.d.ts +0 -1
  36. package/es/utils/dom.js +1 -1
  37. package/es/utils/dom.js.map +1 -1
  38. package/es/utils/id.d.ts +0 -1
  39. package/es/utils/id.js +1 -1
  40. package/es/utils/id.js.map +1 -1
  41. package/es/utils/index.d.ts +1 -2
  42. package/es/utils/index.js +1 -1
  43. package/es/utils/index.js.map +1 -1
  44. package/es/version.d.ts +0 -1
  45. package/es/version.js +1 -1
  46. package/es/version.js.map +1 -1
  47. package/esm/core/ColumnManager.js +43 -18
  48. package/esm/core/ColumnManager.js.map +1 -1
  49. package/esm/core/DragController.js +11 -1
  50. package/esm/core/DragController.js.map +1 -1
  51. package/esm/core/EventEmitter.js +8 -3
  52. package/esm/core/EventEmitter.js.map +1 -1
  53. package/esm/core/FilterEngine.js +10 -5
  54. package/esm/core/FilterEngine.js.map +1 -1
  55. package/esm/core/KanbanBoard.js +63 -17
  56. package/esm/core/KanbanBoard.js.map +1 -1
  57. package/esm/core/Renderer.js +11 -7
  58. package/esm/core/Renderer.js.map +1 -1
  59. package/esm/index.js +4 -4
  60. package/esm/styles/kanban.less +357 -339
  61. package/esm/utils/dom.js +1 -1
  62. package/esm/utils/dom.js.map +1 -1
  63. package/esm/utils/id.js +1 -1
  64. package/esm/utils/id.js.map +1 -1
  65. package/esm/utils/index.js +2 -2
  66. package/esm/utils/index.js.map +1 -1
  67. package/esm/version.js +1 -1
  68. package/esm/version.js.map +1 -1
  69. package/lib/core/ColumnManager.cjs +43 -18
  70. package/lib/core/ColumnManager.cjs.map +1 -1
  71. package/{esm/core/ColumnManager.d.ts → lib/core/ColumnManager.d.cts} +4 -3
  72. package/lib/core/DragController.cjs +11 -1
  73. package/lib/core/DragController.cjs.map +1 -1
  74. package/{esm/core/DragController.d.ts → lib/core/DragController.d.cts} +1 -2
  75. package/lib/core/EventEmitter.cjs +8 -3
  76. package/lib/core/EventEmitter.cjs.map +1 -1
  77. package/lib/core/{EventEmitter.d.ts → EventEmitter.d.cts} +0 -1
  78. package/lib/core/FilterEngine.cjs +10 -5
  79. package/lib/core/FilterEngine.cjs.map +1 -1
  80. package/{esm/core/FilterEngine.d.ts → lib/core/FilterEngine.d.cts} +1 -2
  81. package/lib/core/KanbanBoard.cjs +61 -15
  82. package/lib/core/KanbanBoard.cjs.map +1 -1
  83. package/{esm/core/KanbanBoard.d.ts → lib/core/KanbanBoard.d.cts} +3 -3
  84. package/lib/core/Renderer.cjs +11 -7
  85. package/lib/core/Renderer.cjs.map +1 -1
  86. package/{esm/core/Renderer.d.ts → lib/core/Renderer.d.cts} +2 -3
  87. package/lib/core/index.cjs +1 -1
  88. package/{esm/core/index.d.ts → lib/core/index.d.cts} +2 -3
  89. package/lib/index.cjs +2 -2
  90. package/lib/{index.d.ts → index.d.cts} +3 -4
  91. package/lib/styles/kanban.css +114 -114
  92. package/lib/types/index.cjs +1 -1
  93. package/{esm/types/index.d.ts → lib/types/index.d.cts} +3 -4
  94. package/lib/utils/dom.cjs +1 -1
  95. package/lib/utils/dom.cjs.map +1 -1
  96. package/lib/utils/{dom.d.ts → dom.d.cts} +0 -1
  97. package/lib/utils/id.cjs +1 -1
  98. package/lib/utils/id.cjs.map +1 -1
  99. package/{esm/utils/id.d.ts → lib/utils/id.d.cts} +0 -1
  100. package/lib/utils/index.cjs +1 -1
  101. package/lib/utils/index.cjs.map +1 -1
  102. package/lib/utils/{index.d.ts → index.d.cts} +1 -2
  103. package/lib/version.cjs +1 -1
  104. package/lib/version.cjs.map +1 -1
  105. package/{esm/version.d.ts → lib/version.d.cts} +0 -1
  106. package/package.json +23 -21
  107. package/es/core/ColumnManager.d.ts.map +0 -1
  108. package/es/core/DragController.d.ts.map +0 -1
  109. package/es/core/EventEmitter.d.ts.map +0 -1
  110. package/es/core/FilterEngine.d.ts.map +0 -1
  111. package/es/core/KanbanBoard.d.ts.map +0 -1
  112. package/es/core/Renderer.d.ts.map +0 -1
  113. package/es/core/index.d.ts.map +0 -1
  114. package/es/index.d.ts.map +0 -1
  115. package/es/types/index.d.ts.map +0 -1
  116. package/es/utils/dom.d.ts.map +0 -1
  117. package/es/utils/id.d.ts.map +0 -1
  118. package/es/utils/index.d.ts.map +0 -1
  119. package/es/version.d.ts.map +0 -1
  120. package/esm/core/ColumnManager.d.ts.map +0 -1
  121. package/esm/core/DragController.d.ts.map +0 -1
  122. package/esm/core/EventEmitter.d.ts +0 -35
  123. package/esm/core/EventEmitter.d.ts.map +0 -1
  124. package/esm/core/FilterEngine.d.ts.map +0 -1
  125. package/esm/core/KanbanBoard.d.ts.map +0 -1
  126. package/esm/core/Renderer.d.ts.map +0 -1
  127. package/esm/core/index.d.ts.map +0 -1
  128. package/esm/core/index.js +0 -17
  129. package/esm/index.d.ts +0 -15
  130. package/esm/index.d.ts.map +0 -1
  131. package/esm/types/index.d.ts.map +0 -1
  132. package/esm/types/index.js +0 -10
  133. package/esm/utils/dom.d.ts +0 -24
  134. package/esm/utils/dom.d.ts.map +0 -1
  135. package/esm/utils/id.d.ts.map +0 -1
  136. package/esm/utils/index.d.ts +0 -25
  137. package/esm/utils/index.d.ts.map +0 -1
  138. package/esm/version.d.ts.map +0 -1
  139. package/lib/core/ColumnManager.d.ts +0 -99
  140. package/lib/core/DragController.d.ts +0 -55
  141. package/lib/core/FilterEngine.d.ts +0 -45
  142. package/lib/core/KanbanBoard.d.ts +0 -152
  143. package/lib/core/Renderer.d.ts +0 -59
  144. package/lib/core/index.d.ts +0 -11
  145. package/lib/types/index.d.ts +0 -209
  146. package/lib/utils/id.d.ts +0 -9
  147. package/lib/version.d.ts +0 -6
@@ -1,339 +1,357 @@
1
- /* @composy/kanban-core - Default Styles */
2
-
3
- .kanban-board {
4
- width: 100%;
5
- min-height: 400px;
6
- overflow-x: auto;
7
- overflow-y: hidden;
8
- max-width: 100%;
9
- }
10
-
11
- .kanban-columns {
12
- display: flex;
13
- gap: 16px;
14
- padding: 8px;
15
- min-height: 100%;
16
- align-items: flex-start;
17
- }
18
-
19
- /* Column */
20
- .kanban-column {
21
- flex: 0 0 280px;
22
- max-width: 280px;
23
- background: #f4f5f7;
24
- border-radius: 8px;
25
- display: flex;
26
- flex-direction: column;
27
- max-height: calc(100vh - 200px);
28
- transition: opacity 0.2s, box-shadow 0.2s;
29
- }
30
-
31
- .kanban-column--collapsed {
32
- flex: 0 0 48px;
33
- max-width: 48px;
34
- min-height: 200px;
35
- }
36
-
37
- .kanban-column--dragging {
38
- opacity: 0.5;
39
- }
40
-
41
- .kanban-column--drag-over {
42
- box-shadow: 0 0 0 2px #4c9aff;
43
- }
44
-
45
- /* Column Header */
46
- .kanban-column-header {
47
- display: flex;
48
- align-items: center;
49
- gap: 6px;
50
- padding: 10px 12px;
51
- border-bottom: 1px solid #e1e4e8;
52
- user-select: none;
53
- }
54
-
55
- .kanban-column-drag-handle {
56
- cursor: grab;
57
- color: #a0a0a0;
58
- font-size: 12px;
59
- letter-spacing: -3px;
60
- line-height: 1;
61
- padding: 2px 0;
62
- }
63
-
64
- .kanban-column-drag-handle:active {
65
- cursor: grabbing;
66
- }
67
-
68
- .kanban-column-color {
69
- width: 12px;
70
- height: 12px;
71
- border-radius: 3px;
72
- flex-shrink: 0;
73
- }
74
-
75
- .kanban-column-title {
76
- font-size: 14px;
77
- font-weight: 600;
78
- color: #172b4d;
79
- flex: 1;
80
- overflow: hidden;
81
- text-overflow: ellipsis;
82
- white-space: nowrap;
83
- }
84
-
85
- .kanban-column-count {
86
- font-size: 12px;
87
- color: #6b778c;
88
- background: #dfe1e6;
89
- border-radius: 10px;
90
- padding: 1px 8px;
91
- flex-shrink: 0;
92
- }
93
-
94
- .kanban-column-count--limit {
95
- background: #ffebe6;
96
- color: #bf2600;
97
- }
98
-
99
- .kanban-column-collapse-btn,
100
- .kanban-column-actions-btn {
101
- background: none;
102
- border: none;
103
- cursor: pointer;
104
- color: #6b778c;
105
- font-size: 12px;
106
- padding: 2px 4px;
107
- border-radius: 3px;
108
- line-height: 1;
109
- }
110
-
111
- .kanban-column-collapse-btn:hover,
112
- .kanban-column-actions-btn:hover {
113
- background: #dfe1e6;
114
- color: #172b4d;
115
- }
116
-
117
- /* Column Body */
118
- .kanban-column-body {
119
- flex: 1;
120
- overflow-y: auto;
121
- padding: 8px;
122
- min-height: 40px;
123
- }
124
-
125
- .kanban-column-body--drag-over {
126
- background: #e3f2fd;
127
- border-radius: 0 0 8px 8px;
128
- }
129
-
130
- /* Placeholder */
131
- .kanban-placeholder {
132
- background: #e3f2fd;
133
- border: 2px dashed #90caf9;
134
- border-radius: 6px;
135
- margin-bottom: 8px;
136
- min-height: 40px;
137
- transition: height 0.15s ease;
138
- }
139
-
140
- /* Card */
141
- .kanban-card {
142
- background: #fff;
143
- border-radius: 6px;
144
- padding: 10px 12px;
145
- margin-bottom: 8px;
146
- cursor: pointer;
147
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
148
- transition: box-shadow 0.2s, transform 0.15s, opacity 0.2s;
149
- border: 1px solid transparent;
150
- position: relative;
151
- }
152
-
153
- .kanban-card:hover {
154
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
155
- border-color: #e1e4e8;
156
- }
157
-
158
- .kanban-card--dragging {
159
- opacity: 0.4;
160
- transform: rotate(2deg);
161
- }
162
-
163
- /* Card Priority */
164
- .kanban-card-priority {
165
- position: absolute;
166
- left: 0;
167
- top: 0;
168
- bottom: 0;
169
- width: 3px;
170
- border-radius: 6px 0 0 6px;
171
- }
172
-
173
- .kanban-card-priority--low { background: #36b37e; }
174
- .kanban-card-priority--medium { background: #ffab00; }
175
- .kanban-card-priority--high { background: #ff5630; }
176
- .kanban-card-priority--urgent { background: #bf2600; }
177
-
178
- /* Card Labels */
179
- .kanban-card-labels {
180
- display: flex;
181
- flex-wrap: wrap;
182
- gap: 4px;
183
- margin-bottom: 6px;
184
- }
185
-
186
- .kanban-card-label {
187
- display: inline-block;
188
- padding: 1px 8px;
189
- border-radius: 3px;
190
- font-size: 11px;
191
- color: #fff;
192
- font-weight: 500;
193
- line-height: 1.6;
194
- }
195
-
196
- /* Card Title */
197
- .kanban-card-title {
198
- font-size: 14px;
199
- font-weight: 500;
200
- color: #172b4d;
201
- line-height: 1.4;
202
- word-break: break-word;
203
- }
204
-
205
- /* Card Description */
206
- .kanban-card-desc {
207
- font-size: 12px;
208
- color: #6b778c;
209
- margin-top: 4px;
210
- line-height: 1.4;
211
- display: -webkit-box;
212
- -webkit-line-clamp: 2;
213
- -webkit-box-orient: vertical;
214
- overflow: hidden;
215
- }
216
-
217
- /* Card Footer */
218
- .kanban-card-footer {
219
- display: flex;
220
- align-items: center;
221
- justify-content: space-between;
222
- margin-top: 8px;
223
- gap: 8px;
224
- }
225
-
226
- .kanban-card-assignees {
227
- display: flex;
228
- gap: -4px;
229
- }
230
-
231
- .kanban-card-avatar {
232
- display: inline-flex;
233
- align-items: center;
234
- justify-content: center;
235
- width: 24px;
236
- height: 24px;
237
- border-radius: 50%;
238
- background: #dfe1e6;
239
- color: #42526e;
240
- font-size: 11px;
241
- font-weight: 600;
242
- border: 2px solid #fff;
243
- margin-left: -4px;
244
- }
245
-
246
- .kanban-card-avatar:first-child {
247
- margin-left: 0;
248
- }
249
-
250
- .kanban-card-avatar-more {
251
- display: inline-flex;
252
- align-items: center;
253
- justify-content: center;
254
- width: 24px;
255
- height: 24px;
256
- border-radius: 50%;
257
- background: #c1c7d0;
258
- color: #42526e;
259
- font-size: 10px;
260
- font-weight: 600;
261
- border: 2px solid #fff;
262
- margin-left: -4px;
263
- }
264
-
265
- .kanban-card-due {
266
- font-size: 12px;
267
- color: #6b778c;
268
- display: flex;
269
- align-items: center;
270
- gap: 4px;
271
- }
272
-
273
- .kanban-card-due--overdue {
274
- color: #ff5630;
275
- font-weight: 600;
276
- }
277
-
278
- /* Add Buttons */
279
- .kanban-add-card {
280
- padding: 0 4px;
281
- }
282
-
283
- .kanban-add-card-btn {
284
- width: 100%;
285
- padding: 6px 8px;
286
- background: none;
287
- border: none;
288
- border-radius: 6px;
289
- color: #6b778c;
290
- font-size: 13px;
291
- cursor: pointer;
292
- text-align: left;
293
- transition: background 0.15s, color 0.15s;
294
- }
295
-
296
- .kanban-add-card-btn:hover {
297
- background: #dfe1e6;
298
- color: #172b4d;
299
- }
300
-
301
- .kanban-add-column {
302
- flex: 0 0 280px;
303
- }
304
-
305
- .kanban-add-column-btn {
306
- width: 100%;
307
- padding: 10px;
308
- background: rgba(0, 0, 0, 0.04);
309
- border: 2px dashed #d0d4d9;
310
- border-radius: 8px;
311
- color: #6b778c;
312
- font-size: 14px;
313
- cursor: pointer;
314
- transition: background 0.15s, border-color 0.15s, color 0.15s;
315
- }
316
-
317
- .kanban-add-column-btn:hover {
318
- background: rgba(0, 0, 0, 0.08);
319
- border-color: #a5adba;
320
- color: #172b4d;
321
- }
322
-
323
- /* Scrollbar */
324
- .kanban-column-body::-webkit-scrollbar {
325
- width: 6px;
326
- }
327
-
328
- .kanban-column-body::-webkit-scrollbar-track {
329
- background: transparent;
330
- }
331
-
332
- .kanban-column-body::-webkit-scrollbar-thumb {
333
- background: #c1c7d0;
334
- border-radius: 3px;
335
- }
336
-
337
- .kanban-column-body::-webkit-scrollbar-thumb:hover {
338
- background: #a5adba;
339
- }
1
+ /* @composy/kanban-core - Default Styles */
2
+
3
+ .kanban-board {
4
+ width: 100%;
5
+ min-height: var(--ld-px-400);
6
+ overflow-x: auto;
7
+ overflow-y: hidden;
8
+ max-width: 100%;
9
+ }
10
+
11
+ .kanban-columns {
12
+ display: flex;
13
+ gap: var(--ld-px-16);
14
+ padding: var(--ld-px-8);
15
+ min-height: 100%;
16
+ align-items: flex-start;
17
+ }
18
+
19
+ /* Column */
20
+ .kanban-column {
21
+ flex: 0 0 var(--ld-px-280);
22
+ max-width: var(--ld-px-280);
23
+ background: var(--ld-bg-surface);
24
+ border-radius: var(--ld-px-8);
25
+ display: flex;
26
+ flex-direction: column;
27
+ max-height: calc(100vh - var(--ld-px-200));
28
+ transition:
29
+ opacity 0.2s,
30
+ box-shadow 0.2s;
31
+ }
32
+
33
+ .kanban-column--collapsed {
34
+ flex: 0 0 var(--ld-px-48);
35
+ max-width: var(--ld-px-48);
36
+ min-height: var(--ld-px-200);
37
+ }
38
+
39
+ .kanban-column--dragging {
40
+ opacity: 0.5;
41
+ }
42
+
43
+ .kanban-column--drag-over {
44
+ box-shadow: 0 0 0 var(--ld-px-2) var(--ld-primary-500);
45
+ }
46
+
47
+ /* Column Header */
48
+ .kanban-column-header {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: var(--ld-px-6);
52
+ padding: var(--ld-px-10) var(--ld-px-12);
53
+ border-bottom: var(--ld-px-1) solid var(--ld-border);
54
+ user-select: none;
55
+ }
56
+
57
+ .kanban-column-drag-handle {
58
+ cursor: grab;
59
+ color: var(--ld-text-secondary);
60
+ font-size: var(--ld-px-12);
61
+ letter-spacing: calc(-1 * var(--ld-px-3));
62
+ line-height: 1;
63
+ padding: var(--ld-px-2) 0;
64
+ }
65
+
66
+ .kanban-column-drag-handle:active {
67
+ cursor: grabbing;
68
+ }
69
+
70
+ .kanban-column-color {
71
+ width: var(--ld-px-12);
72
+ height: var(--ld-px-12);
73
+ border-radius: var(--ld-px-3);
74
+ flex-shrink: 0;
75
+ }
76
+
77
+ .kanban-column-title {
78
+ font-size: var(--ld-px-14);
79
+ font-weight: 600;
80
+ color: var(--ld-text-primary);
81
+ flex: 1;
82
+ overflow: hidden;
83
+ text-overflow: ellipsis;
84
+ white-space: nowrap;
85
+ }
86
+
87
+ .kanban-column-count {
88
+ font-size: var(--ld-px-12);
89
+ color: var(--ld-text-secondary);
90
+ background: var(--ld-bg-hover);
91
+ border-radius: var(--ld-px-10);
92
+ padding: var(--ld-px-1) var(--ld-px-8);
93
+ flex-shrink: 0;
94
+ }
95
+
96
+ .kanban-column-count--limit {
97
+ background: var(--ld-danger-50);
98
+ color: var(--ld-danger-700);
99
+ }
100
+
101
+ .kanban-column-collapse-btn,
102
+ .kanban-column-actions-btn {
103
+ background: none;
104
+ border: none;
105
+ cursor: pointer;
106
+ color: var(--ld-text-secondary);
107
+ font-size: var(--ld-px-12);
108
+ padding: var(--ld-px-2) var(--ld-px-4);
109
+ border-radius: var(--ld-px-3);
110
+ line-height: 1;
111
+ }
112
+
113
+ .kanban-column-collapse-btn:hover,
114
+ .kanban-column-actions-btn:hover {
115
+ background: var(--ld-bg-hover);
116
+ color: var(--ld-text-primary);
117
+ }
118
+
119
+ /* Column Body */
120
+ .kanban-column-body {
121
+ flex: 1;
122
+ overflow-y: auto;
123
+ padding: var(--ld-px-8);
124
+ min-height: var(--ld-px-40);
125
+ }
126
+
127
+ .kanban-column-body--drag-over {
128
+ background: var(--ld-primary-50);
129
+ border-radius: 0 0 var(--ld-px-8) var(--ld-px-8);
130
+ }
131
+
132
+ /* Placeholder */
133
+ .kanban-placeholder {
134
+ background: var(--ld-primary-50);
135
+ border: var(--ld-px-2) dashed var(--ld-primary-300);
136
+ border-radius: var(--ld-px-6);
137
+ margin-bottom: var(--ld-px-8);
138
+ min-height: var(--ld-px-40);
139
+ transition: height 0.15s ease;
140
+ }
141
+
142
+ /* Card */
143
+ .kanban-card {
144
+ background: var(--ld-bg-container);
145
+ border-radius: var(--ld-px-6);
146
+ padding: var(--ld-px-10) var(--ld-px-12);
147
+ margin-bottom: var(--ld-px-8);
148
+ cursor: pointer;
149
+ box-shadow: var(--ld-shadow-1);
150
+ transition:
151
+ box-shadow 0.2s,
152
+ transform 0.15s,
153
+ opacity 0.2s;
154
+ border: var(--ld-px-1) solid transparent;
155
+ position: relative;
156
+ }
157
+
158
+ .kanban-card:hover {
159
+ box-shadow: var(--ld-shadow-2);
160
+ border-color: var(--ld-border);
161
+ }
162
+
163
+ .kanban-card--dragging {
164
+ opacity: 0.4;
165
+ transform: rotate(2deg);
166
+ }
167
+
168
+ /* Card Priority */
169
+ .kanban-card-priority {
170
+ position: absolute;
171
+ left: 0;
172
+ top: 0;
173
+ bottom: 0;
174
+ width: var(--ld-px-3);
175
+ border-radius: var(--ld-px-6) 0 0 var(--ld-px-6);
176
+ }
177
+
178
+ .kanban-card-priority--low {
179
+ background: var(--ld-success-500);
180
+ }
181
+ .kanban-card-priority--medium {
182
+ background: var(--ld-warning-500);
183
+ }
184
+ .kanban-card-priority--high {
185
+ background: var(--ld-danger-500);
186
+ }
187
+ .kanban-card-priority--urgent {
188
+ background: var(--ld-danger-700);
189
+ }
190
+
191
+ /* Card Labels */
192
+ .kanban-card-labels {
193
+ display: flex;
194
+ flex-wrap: wrap;
195
+ gap: var(--ld-px-4);
196
+ margin-bottom: var(--ld-px-6);
197
+ }
198
+
199
+ .kanban-card-label {
200
+ display: inline-block;
201
+ padding: var(--ld-px-1) var(--ld-px-8);
202
+ border-radius: var(--ld-px-3);
203
+ font-size: var(--ld-px-11);
204
+ color: var(--ld-text-inverse);
205
+ font-weight: 500;
206
+ line-height: 1.6;
207
+ }
208
+
209
+ /* Card Title */
210
+ .kanban-card-title {
211
+ font-size: var(--ld-px-14);
212
+ font-weight: 500;
213
+ color: var(--ld-text-primary);
214
+ line-height: 1.4;
215
+ word-break: break-word;
216
+ }
217
+
218
+ /* Card Description */
219
+ .kanban-card-desc {
220
+ font-size: var(--ld-px-12);
221
+ color: var(--ld-text-secondary);
222
+ margin-top: var(--ld-px-4);
223
+ line-height: 1.4;
224
+ display: -webkit-box;
225
+ -webkit-line-clamp: 2;
226
+ -webkit-box-orient: vertical;
227
+ overflow: hidden;
228
+ }
229
+
230
+ /* Card Footer */
231
+ .kanban-card-footer {
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: space-between;
235
+ margin-top: var(--ld-px-8);
236
+ gap: var(--ld-px-8);
237
+ }
238
+
239
+ .kanban-card-assignees {
240
+ display: flex;
241
+ gap: calc(-1 * var(--ld-px-4));
242
+ }
243
+
244
+ .kanban-card-avatar {
245
+ display: inline-flex;
246
+ align-items: center;
247
+ justify-content: center;
248
+ width: var(--ld-px-24);
249
+ height: var(--ld-px-24);
250
+ border-radius: 50%;
251
+ background: var(--ld-bg-hover);
252
+ color: var(--ld-text-secondary);
253
+ font-size: var(--ld-px-11);
254
+ font-weight: 600;
255
+ border: var(--ld-px-2) solid var(--ld-text-inverse);
256
+ margin-left: calc(-1 * var(--ld-px-4));
257
+ }
258
+
259
+ .kanban-card-avatar:first-child {
260
+ margin-left: 0;
261
+ }
262
+
263
+ .kanban-card-avatar-more {
264
+ display: inline-flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ width: var(--ld-px-24);
268
+ height: var(--ld-px-24);
269
+ border-radius: 50%;
270
+ background: var(--ld-gray-400);
271
+ color: var(--ld-text-secondary);
272
+ font-size: var(--ld-px-10);
273
+ font-weight: 600;
274
+ border: var(--ld-px-2) solid var(--ld-text-inverse);
275
+ margin-left: calc(-1 * var(--ld-px-4));
276
+ }
277
+
278
+ .kanban-card-due {
279
+ font-size: var(--ld-px-12);
280
+ color: var(--ld-text-secondary);
281
+ display: flex;
282
+ align-items: center;
283
+ gap: var(--ld-px-4);
284
+ }
285
+
286
+ .kanban-card-due--overdue {
287
+ color: var(--ld-danger-500);
288
+ font-weight: 600;
289
+ }
290
+
291
+ /* Add Buttons */
292
+ .kanban-add-card {
293
+ padding: 0 var(--ld-px-4);
294
+ }
295
+
296
+ .kanban-add-card-btn {
297
+ width: 100%;
298
+ padding: var(--ld-px-6) var(--ld-px-8);
299
+ background: none;
300
+ border: none;
301
+ border-radius: var(--ld-px-6);
302
+ color: var(--ld-text-secondary);
303
+ font-size: var(--ld-px-13);
304
+ cursor: pointer;
305
+ text-align: left;
306
+ transition:
307
+ background 0.15s,
308
+ color 0.15s;
309
+ }
310
+
311
+ .kanban-add-card-btn:hover {
312
+ background: var(--ld-bg-hover);
313
+ color: var(--ld-text-primary);
314
+ }
315
+
316
+ .kanban-add-column {
317
+ flex: 0 0 var(--ld-px-280);
318
+ }
319
+
320
+ .kanban-add-column-btn {
321
+ width: 100%;
322
+ padding: var(--ld-px-10);
323
+ background: var(--ld-bg-surface-soft);
324
+ border: var(--ld-px-2) dashed var(--ld-gray-300);
325
+ border-radius: var(--ld-px-8);
326
+ color: var(--ld-text-secondary);
327
+ font-size: var(--ld-px-14);
328
+ cursor: pointer;
329
+ transition:
330
+ background 0.15s,
331
+ border-color 0.15s,
332
+ color 0.15s;
333
+ }
334
+
335
+ .kanban-add-column-btn:hover {
336
+ background: var(--ld-bg-hover);
337
+ border-color: var(--ld-gray-500);
338
+ color: var(--ld-text-primary);
339
+ }
340
+
341
+ /* Scrollbar */
342
+ .kanban-column-body::-webkit-scrollbar {
343
+ width: var(--ld-px-6);
344
+ }
345
+
346
+ .kanban-column-body::-webkit-scrollbar-track {
347
+ background: transparent;
348
+ }
349
+
350
+ .kanban-column-body::-webkit-scrollbar-thumb {
351
+ background: var(--ld-gray-400);
352
+ border-radius: var(--ld-px-3);
353
+ }
354
+
355
+ .kanban-column-body::-webkit-scrollbar-thumb:hover {
356
+ background: var(--ld-gray-500);
357
+ }