@mostrom/app-shell 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/.claude/ralph-loop.local.md +9 -0
  2. package/README.md +172 -0
  3. package/bin/init.js +269 -0
  4. package/bun.lock +401 -0
  5. package/components.json +28 -0
  6. package/package.json +74 -0
  7. package/scripts/publish-npm.sh +202 -0
  8. package/src/AppShell.tsx +847 -0
  9. package/src/components/PageHeader.tsx +160 -0
  10. package/src/components/data-table/README.md +447 -0
  11. package/src/components/data-table/data-table-preferences.tsx +184 -0
  12. package/src/components/data-table/data-table-toolbar.tsx +118 -0
  13. package/src/components/data-table/data-table.tsx +37 -0
  14. package/src/components/data-table/index.ts +32 -0
  15. package/src/components/global-header/AllServicesButton.tsx +127 -0
  16. package/src/components/global-header/CategoriesButton.tsx +120 -0
  17. package/src/components/global-header/GlobalHeader.tsx +59 -0
  18. package/src/components/global-header/GlobalHeaderSearch.tsx +57 -0
  19. package/src/components/global-header/HeaderUtilities.tsx +243 -0
  20. package/src/components/global-header/ServicesMenu.tsx +246 -0
  21. package/src/components/layout/AppBreadcrumb.tsx +70 -0
  22. package/src/components/layout/AppFlashbar.tsx +95 -0
  23. package/src/components/layout/AppLayout.tsx +271 -0
  24. package/src/components/layout/AppNavigation.tsx +313 -0
  25. package/src/components/layout/AppSidebar.tsx +229 -0
  26. package/src/components/patterns/index.ts +14 -0
  27. package/src/components/patterns/p-alert-5.tsx +19 -0
  28. package/src/components/patterns/p-autocomplete-5.tsx +89 -0
  29. package/src/components/patterns/p-breadcrumb-1.tsx +28 -0
  30. package/src/components/patterns/p-button-42.tsx +37 -0
  31. package/src/components/patterns/p-button-51.tsx +14 -0
  32. package/src/components/patterns/p-button-6.tsx +5 -0
  33. package/src/components/patterns/p-calendar-1.tsx +18 -0
  34. package/src/components/patterns/p-card-1.tsx +33 -0
  35. package/src/components/patterns/p-card-2.tsx +26 -0
  36. package/src/components/patterns/p-card-5.tsx +31 -0
  37. package/src/components/patterns/p-collapsible-7.tsx +121 -0
  38. package/src/components/patterns/p-command-6.tsx +113 -0
  39. package/src/components/patterns/p-dialog-1.tsx +56 -0
  40. package/src/components/patterns/p-dropdown-menu-1.tsx +38 -0
  41. package/src/components/patterns/p-dropdown-menu-11.tsx +122 -0
  42. package/src/components/patterns/p-dropdown-menu-14.tsx +165 -0
  43. package/src/components/patterns/p-dropdown-menu-9.tsx +108 -0
  44. package/src/components/patterns/p-empty-2.tsx +34 -0
  45. package/src/components/patterns/p-file-upload-1.tsx +72 -0
  46. package/src/components/patterns/p-filters-1.tsx +666 -0
  47. package/src/components/patterns/p-frame-2.tsx +26 -0
  48. package/src/components/patterns/p-tabs-2.tsx +129 -0
  49. package/src/components/reui/alert.tsx +92 -0
  50. package/src/components/reui/autocomplete.tsx +343 -0
  51. package/src/components/reui/badge.tsx +87 -0
  52. package/src/components/reui/data-grid/data-grid-column-filter.tsx +165 -0
  53. package/src/components/reui/data-grid/data-grid-column-header.tsx +339 -0
  54. package/src/components/reui/data-grid/data-grid-column-visibility.tsx +55 -0
  55. package/src/components/reui/data-grid/data-grid-pagination.tsx +224 -0
  56. package/src/components/reui/data-grid/data-grid-table-dnd-rows.tsx +260 -0
  57. package/src/components/reui/data-grid/data-grid-table-dnd.tsx +253 -0
  58. package/src/components/reui/data-grid/data-grid-table.tsx +639 -0
  59. package/src/components/reui/data-grid/data-grid.tsx +209 -0
  60. package/src/components/reui/date-selector.tsx +1330 -0
  61. package/src/components/reui/filters.tsx +1869 -0
  62. package/src/components/reui/frame.tsx +134 -0
  63. package/src/components/reui/index.ts +17 -0
  64. package/src/components/reui/timeline.tsx +219 -0
  65. package/src/components/search/Autocomplete.tsx +183 -0
  66. package/src/components/search/AutocompleteClient.tsx +293 -0
  67. package/src/components/search/GlobalSearch.tsx +187 -0
  68. package/src/components/section-drawer/deal-drawer-content.tsx +891 -0
  69. package/src/components/section-drawer/index.ts +19 -0
  70. package/src/components/section-drawer/section-drawer.css +665 -0
  71. package/src/components/section-drawer/section-drawer.tsx +467 -0
  72. package/src/components/sectioned-list-board/README.md +78 -0
  73. package/src/components/sectioned-list-board/board-card-content.tsx +340 -0
  74. package/src/components/sectioned-list-board/date-range-filter.tsx +249 -0
  75. package/src/components/sectioned-list-board/index.ts +19 -0
  76. package/src/components/sectioned-list-board/sectioned-list-board.css +564 -0
  77. package/src/components/sectioned-list-board/sectioned-list-board.tsx +731 -0
  78. package/src/components/sectioned-list-board/sortable-card.tsx +314 -0
  79. package/src/components/sectioned-list-board/sortable-section.tsx +319 -0
  80. package/src/components/sectioned-list-board/types.ts +216 -0
  81. package/src/components/sectioned-list-table/README.md +80 -0
  82. package/src/components/sectioned-list-table/index.ts +14 -0
  83. package/src/components/sectioned-list-table/sectioned-list-table.css +534 -0
  84. package/src/components/sectioned-list-table/sectioned-list-table.tsx +740 -0
  85. package/src/components/sectioned-list-table/sortable-column-header.tsx +120 -0
  86. package/src/components/sectioned-list-table/sortable-row.tsx +420 -0
  87. package/src/components/sectioned-list-table/sortable-section.tsx +251 -0
  88. package/src/components/sectioned-list-table/table-cell-content.tsx +129 -0
  89. package/src/components/sectioned-list-table/types.ts +120 -0
  90. package/src/components/sectioned-list-table/use-column-preferences.ts +103 -0
  91. package/src/components/ui/actions-dropdown.tsx +109 -0
  92. package/src/components/ui/assignee-selector.tsx +209 -0
  93. package/src/components/ui/avatar.tsx +107 -0
  94. package/src/components/ui/breadcrumb.tsx +109 -0
  95. package/src/components/ui/button-group.tsx +83 -0
  96. package/src/components/ui/button.tsx +64 -0
  97. package/src/components/ui/calendar.tsx +220 -0
  98. package/src/components/ui/card.tsx +92 -0
  99. package/src/components/ui/chart.tsx +376 -0
  100. package/src/components/ui/checkbox.tsx +30 -0
  101. package/src/components/ui/collapsible.tsx +33 -0
  102. package/src/components/ui/command.tsx +182 -0
  103. package/src/components/ui/context-menu.tsx +250 -0
  104. package/src/components/ui/create-button-group.tsx +128 -0
  105. package/src/components/ui/dialog.tsx +156 -0
  106. package/src/components/ui/drawer.tsx +133 -0
  107. package/src/components/ui/dropdown-menu.tsx +255 -0
  108. package/src/components/ui/empty.tsx +104 -0
  109. package/src/components/ui/field.tsx +248 -0
  110. package/src/components/ui/form.tsx +165 -0
  111. package/src/components/ui/index.ts +37 -0
  112. package/src/components/ui/input-group.tsx +168 -0
  113. package/src/components/ui/input.tsx +21 -0
  114. package/src/components/ui/kbd.tsx +28 -0
  115. package/src/components/ui/label.tsx +22 -0
  116. package/src/components/ui/navigation-menu.tsx +168 -0
  117. package/src/components/ui/page-header.tsx +80 -0
  118. package/src/components/ui/popover.tsx +87 -0
  119. package/src/components/ui/scroll-area.tsx +56 -0
  120. package/src/components/ui/select.tsx +190 -0
  121. package/src/components/ui/separator.tsx +26 -0
  122. package/src/components/ui/sheet.tsx +141 -0
  123. package/src/components/ui/sidebar.tsx +726 -0
  124. package/src/components/ui/skeleton.tsx +13 -0
  125. package/src/components/ui/sonner.tsx +38 -0
  126. package/src/components/ui/switch.tsx +33 -0
  127. package/src/components/ui/tabs.tsx +91 -0
  128. package/src/components/ui/textarea.tsx +18 -0
  129. package/src/components/ui/toggle-group.tsx +83 -0
  130. package/src/components/ui/toggle.tsx +45 -0
  131. package/src/components/ui/tooltip.tsx +57 -0
  132. package/src/hooks/use-copy-to-clipboard.ts +37 -0
  133. package/src/hooks/use-file-upload.ts +415 -0
  134. package/src/hooks/use-mobile.ts +19 -0
  135. package/src/index.ts +95 -0
  136. package/src/lib/utils.ts +6 -0
  137. package/src/styles.css +1859 -0
  138. package/src/urls.ts +83 -0
  139. package/src/vite.d.ts +22 -0
  140. package/src/vite.js +241 -0
  141. package/tsconfig.base.json +18 -0
  142. package/tsconfig.json +24 -0
@@ -0,0 +1,19 @@
1
+ export { SectionDrawer } from "./section-drawer";
2
+ export type {
3
+ SectionDrawerProps,
4
+ SectionDrawerUser,
5
+ SectionDrawerActivity,
6
+ } from "./section-drawer";
7
+
8
+ export { DealDrawerContent } from "./deal-drawer-content";
9
+ export type {
10
+ DealDrawerContentProps,
11
+ DealClient,
12
+ DealOwner,
13
+ DealProject,
14
+ DealSubtask,
15
+ DealAttachment,
16
+ } from "./deal-drawer-content";
17
+
18
+ // Re-export Assignee type for convenience
19
+ export type { Assignee } from "@/components/ui/assignee-selector";
@@ -0,0 +1,665 @@
1
+ /* Section Drawer - Asana-style task detail panel */
2
+
3
+ .section-drawer {
4
+ display: flex;
5
+ flex-direction: column;
6
+ height: 100%;
7
+ overflow: hidden;
8
+ background: #fcfcfd;
9
+ /* Override Sheet z-index to appear above global header (z-index: 9999) */
10
+ z-index: 10000 !important;
11
+ }
12
+
13
+ /* Header */
14
+ .section-drawer-header {
15
+ padding: 8px 14px 7px;
16
+ flex-shrink: 0;
17
+ }
18
+
19
+ .section-drawer-header-actions {
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: space-between;
23
+ gap: 8px;
24
+ }
25
+
26
+ .section-drawer-complete-btn {
27
+ gap: 6px;
28
+ }
29
+
30
+ .section-drawer-header-icons {
31
+ display: flex;
32
+ align-items: center;
33
+ gap: 3px;
34
+ }
35
+
36
+ /* Main Content - Scrollable */
37
+ .section-drawer-content {
38
+ flex: 1;
39
+ overflow-y: auto;
40
+ padding: 0 24px;
41
+ max-width: 760px;
42
+ }
43
+
44
+ /* Title */
45
+ .section-drawer-title-section {
46
+ padding: 16px 0 22px;
47
+ }
48
+
49
+ .section-drawer-title-wrapper {
50
+ display: flex;
51
+ align-items: flex-start;
52
+ gap: 8px;
53
+ }
54
+
55
+ .section-drawer-title {
56
+ font-size: 2rem;
57
+ font-weight: 600;
58
+ line-height: 1.2;
59
+ margin: 0;
60
+ cursor: default;
61
+ letter-spacing: -0.02em;
62
+ flex: 1;
63
+ }
64
+
65
+ .section-drawer-title-edit-btn {
66
+ opacity: 0;
67
+ transition: opacity 0.15s ease;
68
+ margin-top: 8px;
69
+ }
70
+
71
+ .section-drawer-title-wrapper:hover .section-drawer-title-edit-btn {
72
+ opacity: 0.6;
73
+ }
74
+
75
+ .section-drawer-title-edit-btn:hover {
76
+ opacity: 1 !important;
77
+ }
78
+
79
+ .section-drawer-title-input {
80
+ font-size: 2rem;
81
+ font-weight: 600;
82
+ line-height: 1.2;
83
+ width: 100%;
84
+ border: none;
85
+ outline: none;
86
+ background: transparent;
87
+ padding: 0;
88
+ margin: 0;
89
+ letter-spacing: -0.02em;
90
+ }
91
+
92
+ /* Metadata */
93
+ .section-drawer-metadata {
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: 0;
97
+ padding-bottom: 16px;
98
+ }
99
+
100
+ .section-drawer-metadata-row {
101
+ display: grid;
102
+ grid-template-columns: 120px 1fr;
103
+ align-items: center;
104
+ min-height: 40px;
105
+ padding: 4px 0;
106
+ }
107
+
108
+
109
+ .section-drawer-metadata-label {
110
+ font-size: 0.875rem;
111
+ font-weight: 600;
112
+ color: hsl(var(--muted-foreground));
113
+ display: flex;
114
+ align-items: center;
115
+ gap: 6px;
116
+ white-space: nowrap;
117
+ }
118
+
119
+ .section-drawer-metadata-value {
120
+ font-size: 0.875rem;
121
+ font-weight: 400;
122
+ }
123
+
124
+ /* Clickable metadata rows */
125
+ .section-drawer-metadata-row.clickable {
126
+ cursor: pointer;
127
+ border-radius: 4px;
128
+ margin: 0 -5px;
129
+ padding: 2px 5px;
130
+ transition: background-color 0.15s ease;
131
+ }
132
+
133
+ .section-drawer-metadata-row.clickable:hover {
134
+ background-color: hsl(var(--muted) / 0.5);
135
+ }
136
+
137
+ /* Assignee */
138
+ .section-drawer-assignee {
139
+ display: flex;
140
+ align-items: center;
141
+ gap: 8px;
142
+ }
143
+
144
+ .section-drawer-no-assignee {
145
+ display: flex;
146
+ align-items: center;
147
+ gap: 8px;
148
+ cursor: pointer;
149
+ }
150
+
151
+ .section-drawer-no-assignee:hover {
152
+ color: hsl(var(--foreground));
153
+ }
154
+
155
+ .section-drawer-empty-avatar {
156
+ width: 26px;
157
+ height: 26px;
158
+ border-radius: 50%;
159
+ border: 1.5px dashed hsl(var(--border));
160
+ display: flex;
161
+ align-items: center;
162
+ justify-content: center;
163
+ color: hsl(var(--muted-foreground));
164
+ transition: border-color 0.15s ease;
165
+ }
166
+
167
+ .section-drawer-no-assignee:hover .section-drawer-empty-avatar {
168
+ border-color: hsl(var(--foreground));
169
+ }
170
+
171
+ /* Due Date */
172
+ .section-drawer-due-date {
173
+ display: inline-flex;
174
+ align-items: center;
175
+ gap: 6px;
176
+ padding: 1px 7px 1px 5px;
177
+ border-radius: 4px;
178
+ background: transparent;
179
+ font-size: 0.875rem;
180
+ cursor: pointer;
181
+ transition: background-color 0.15s ease;
182
+ }
183
+
184
+ .section-drawer-due-date:hover {
185
+ background: hsl(var(--muted) / 0.8);
186
+ }
187
+
188
+ .section-drawer-due-date.overdue {
189
+ background: hsl(var(--destructive) / 0.1);
190
+ color: hsl(var(--destructive));
191
+ }
192
+
193
+ .section-drawer-due-date.overdue:hover {
194
+ background: hsl(var(--destructive) / 0.15);
195
+ }
196
+
197
+ .section-drawer-clear-btn {
198
+ margin-left: 2px;
199
+ opacity: 0.6;
200
+ }
201
+
202
+ .section-drawer-clear-btn:hover {
203
+ opacity: 1;
204
+ }
205
+
206
+ /* Projects Section */
207
+ .section-drawer-projects-section {
208
+ padding: 12px 0 14px;
209
+ border-bottom: 1px solid hsl(var(--border));
210
+ }
211
+
212
+ .section-drawer-projects-header {
213
+ display: flex;
214
+ align-items: center;
215
+ justify-content: space-between;
216
+ margin-bottom: 10px;
217
+ }
218
+
219
+ .section-drawer-projects-label {
220
+ font-size: 0.875rem;
221
+ font-weight: 600;
222
+ color: hsl(var(--muted-foreground));
223
+ display: flex;
224
+ align-items: center;
225
+ }
226
+
227
+ .section-drawer-projects-actions {
228
+ display: inline-flex;
229
+ align-items: center;
230
+ gap: 6px;
231
+ }
232
+
233
+ .section-drawer-feedback-link {
234
+ font-size: 0.75rem;
235
+ color: hsl(var(--muted-foreground));
236
+ text-decoration: underline;
237
+ text-underline-offset: 2px;
238
+ }
239
+
240
+ .section-drawer-project-row {
241
+ display: flex;
242
+ align-items: center;
243
+ justify-content: space-between;
244
+ padding: 4px 0;
245
+ margin: 0;
246
+ border-radius: 4px;
247
+ transition: background-color 0.15s ease;
248
+ }
249
+
250
+ .section-drawer-project-row:hover {
251
+ background-color: hsl(var(--muted) / 0.5);
252
+ }
253
+
254
+ .section-drawer-projects-row {
255
+ align-items: flex-start;
256
+ padding-top: 8px;
257
+ }
258
+
259
+ .section-drawer-project-list {
260
+ padding: 4px 0 8px 120px;
261
+ display: flex;
262
+ flex-direction: column;
263
+ gap: 4px;
264
+ }
265
+
266
+ .section-drawer-project-item {
267
+ display: flex;
268
+ align-items: center;
269
+ gap: 6px;
270
+ font-size: 0.875rem;
271
+ font-weight: 500;
272
+ padding: 2px 0;
273
+ border-radius: 4px;
274
+ cursor: pointer;
275
+ margin: 0;
276
+ transition: background-color 0.15s ease;
277
+ }
278
+
279
+ .section-drawer-project-item:hover {
280
+ background-color: hsl(var(--muted) / 0.5);
281
+ }
282
+
283
+ .section-drawer-project-color {
284
+ width: 12px;
285
+ height: 12px;
286
+ border-radius: 2px;
287
+ flex-shrink: 0;
288
+ }
289
+
290
+ .section-drawer-project-name {
291
+ font-weight: 500;
292
+ }
293
+
294
+ /* Priority row inside Projects section */
295
+ .section-drawer-priority-row {
296
+ display: grid;
297
+ grid-template-columns: 120px 1fr;
298
+ align-items: center;
299
+ padding: 10px 0 8px;
300
+ margin-top: 4px;
301
+ border-top: 1px solid hsl(var(--border));
302
+ }
303
+
304
+ .section-drawer-priority-label {
305
+ font-size: 0.875rem;
306
+ font-weight: 600;
307
+ color: hsl(var(--muted-foreground));
308
+ display: flex;
309
+ align-items: center;
310
+ gap: 6px;
311
+ }
312
+
313
+ /* Priority */
314
+ .section-drawer-priority-icon {
315
+ font-size: 0.875rem; /* 14px, was 12px */
316
+ opacity: 0.7;
317
+ }
318
+
319
+ .section-drawer-priority-value {
320
+ cursor: pointer;
321
+ justify-self: start;
322
+ }
323
+
324
+ .section-drawer-priority-value:hover .reui-badge {
325
+ opacity: 0.8;
326
+ }
327
+
328
+ /* Sections */
329
+ .section-drawer-section {
330
+ padding: 18px 0;
331
+ }
332
+
333
+ .section-drawer-section-header {
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: space-between;
337
+ }
338
+
339
+ .section-drawer-section-title {
340
+ font-size: 0.875rem;
341
+ font-weight: 600;
342
+ margin: 0;
343
+ display: flex;
344
+ align-items: center;
345
+ }
346
+
347
+ /* Add space after description section before subtasks */
348
+ .section-drawer-section:first-of-type {
349
+ padding-top: 24px;
350
+ }
351
+
352
+ .section-drawer-section-title.collapsible {
353
+ cursor: pointer;
354
+ user-select: none;
355
+ }
356
+
357
+ .section-drawer-section-title.collapsible:hover {
358
+ color: hsl(var(--foreground) / 0.8);
359
+ }
360
+
361
+ .section-drawer-section-chevron {
362
+ margin-right: 6px;
363
+ transition: transform 0.2s ease;
364
+ }
365
+
366
+ .section-drawer-section-chevron.collapsed {
367
+ transform: rotate(-90deg);
368
+ }
369
+
370
+ .section-drawer-section-content {
371
+ overflow: hidden;
372
+ transition: max-height 0.2s ease;
373
+ }
374
+
375
+ .section-drawer-section-content.collapsed {
376
+ max-height: 0;
377
+ }
378
+
379
+ /* Description */
380
+ .section-drawer-description-placeholder {
381
+ font-size: 0.875rem;
382
+ color: hsl(var(--muted-foreground));
383
+ cursor: pointer;
384
+ padding: 8px;
385
+ margin: 10px -8px 0;
386
+ min-height: 180px;
387
+ border-radius: 4px;
388
+ transition: background-color 0.15s ease;
389
+ }
390
+
391
+ .section-drawer-description-placeholder:hover {
392
+ background-color: hsl(var(--muted) / 0.5);
393
+ }
394
+
395
+ .section-drawer-description-textarea {
396
+ font-size: 0.875rem;
397
+ margin-top: 10px;
398
+ min-height: 180px;
399
+ resize: vertical;
400
+ }
401
+
402
+ /* Subtasks */
403
+ .section-drawer-subtask-list {
404
+ margin-top: 8px;
405
+ display: flex;
406
+ flex-direction: column;
407
+ gap: 4px;
408
+ }
409
+
410
+ .section-drawer-subtask-item {
411
+ display: flex;
412
+ align-items: center;
413
+ gap: 8px;
414
+ padding: 6px;
415
+ margin: 0 -6px;
416
+ border-radius: 4px;
417
+ cursor: pointer;
418
+ font-size: 0.875rem;
419
+ transition: background-color 0.15s ease;
420
+ }
421
+
422
+ .section-drawer-subtask-item:hover {
423
+ background-color: hsl(var(--muted) / 0.5);
424
+ }
425
+
426
+ .section-drawer-subtask-item.completed {
427
+ text-decoration: line-through;
428
+ color: hsl(var(--muted-foreground));
429
+ }
430
+
431
+ .section-drawer-subtask-title {
432
+ flex: 1;
433
+ min-width: 0;
434
+ }
435
+
436
+ .section-drawer-subtask-title-input {
437
+ flex: 1;
438
+ min-width: 0;
439
+ font-size: 0.875rem;
440
+ border: 1px solid hsl(var(--border));
441
+ border-radius: 4px;
442
+ padding: 2px 6px;
443
+ background: hsl(var(--background));
444
+ color: inherit;
445
+ }
446
+
447
+ .section-drawer-subtask-title-input:focus {
448
+ outline: none;
449
+ border-color: hsl(var(--ring));
450
+ }
451
+
452
+ .section-drawer-subtask-checkbox {
453
+ width: 18px;
454
+ height: 18px;
455
+ border-radius: 50%;
456
+ border: 2px solid hsl(var(--border));
457
+ display: flex;
458
+ align-items: center;
459
+ justify-content: center;
460
+ flex-shrink: 0;
461
+ cursor: pointer;
462
+ transition: all 0.15s ease;
463
+ }
464
+
465
+ .section-drawer-subtask-checkbox:hover {
466
+ border-color: hsl(var(--primary));
467
+ }
468
+
469
+ .section-drawer-subtask-checkbox.checked {
470
+ background-color: hsl(var(--primary));
471
+ border-color: hsl(var(--primary));
472
+ color: hsl(var(--primary-foreground));
473
+ }
474
+
475
+ .section-drawer-add-subtask {
476
+ display: flex;
477
+ align-items: center;
478
+ gap: 8px;
479
+ padding: 6px;
480
+ margin: 3px -6px 0;
481
+ border-radius: 4px;
482
+ cursor: pointer;
483
+ font-size: 0.875rem;
484
+ color: hsl(var(--muted-foreground));
485
+ transition: all 0.15s ease;
486
+ }
487
+
488
+ .section-drawer-add-subtask:hover {
489
+ background-color: hsl(var(--muted) / 0.5);
490
+ color: hsl(var(--foreground));
491
+ }
492
+
493
+ .section-drawer-add-subtask-input {
494
+ flex: 1;
495
+ border: none;
496
+ outline: none;
497
+ background: transparent;
498
+ font-size: 1rem;
499
+ padding: 0;
500
+ }
501
+
502
+ /* Attachments */
503
+ .section-drawer-attachment-list {
504
+ margin-top: 8px;
505
+ display: flex;
506
+ flex-wrap: wrap;
507
+ gap: 8px;
508
+ }
509
+
510
+ .section-drawer-attachment-item {
511
+ display: flex;
512
+ align-items: center;
513
+ gap: 8px;
514
+ padding: 6px 10px;
515
+ border-radius: 6px;
516
+ background: hsl(var(--muted));
517
+ font-size: 0.8125rem;
518
+ cursor: pointer;
519
+ transition: background-color 0.15s ease;
520
+ }
521
+
522
+ .section-drawer-attachment-item:hover {
523
+ background: hsl(var(--muted) / 0.8);
524
+ }
525
+
526
+ .section-drawer-add-attachment {
527
+ display: flex;
528
+ align-items: center;
529
+ gap: 8px;
530
+ padding: 6px 10px;
531
+ border-radius: 6px;
532
+ border: 2px dashed hsl(var(--border));
533
+ font-size: 0.8125rem;
534
+ color: hsl(var(--muted-foreground));
535
+ cursor: pointer;
536
+ transition: all 0.15s ease;
537
+ }
538
+
539
+ .section-drawer-add-attachment:hover {
540
+ border-color: hsl(var(--primary));
541
+ color: hsl(var(--foreground));
542
+ background: hsl(var(--muted) / 0.3);
543
+ }
544
+
545
+ /* Activity Section */
546
+ .section-drawer-activity {
547
+ flex-shrink: 0;
548
+ background: #fcfcfd;
549
+ border-top: 1px solid hsl(var(--border));
550
+ }
551
+
552
+ .section-drawer-tabs {
553
+ padding: 0;
554
+ }
555
+
556
+ .section-drawer-tabs-header {
557
+ display: flex;
558
+ align-items: center;
559
+ justify-content: space-between;
560
+ padding: 7px 24px 0;
561
+ }
562
+
563
+ .section-drawer-sort-btn {
564
+ font-size: 0.75rem;
565
+ }
566
+
567
+ .section-drawer-tabs-content {
568
+ padding: 0 24px;
569
+ max-height: 154px;
570
+ overflow-y: auto;
571
+ }
572
+
573
+ /* Activity List */
574
+ .section-drawer-activity-list {
575
+ display: flex;
576
+ flex-direction: column;
577
+ gap: 10px;
578
+ padding: 9px 0;
579
+ }
580
+
581
+ .section-drawer-activity-item {
582
+ display: flex;
583
+ align-items: flex-start;
584
+ gap: 10px;
585
+ }
586
+
587
+ .section-drawer-activity-content {
588
+ font-size: 0.8125rem;
589
+ line-height: 1.5;
590
+ }
591
+
592
+ /* Comment Input */
593
+ .section-drawer-comment-input {
594
+ display: flex;
595
+ align-items: flex-start;
596
+ gap: 10px;
597
+ padding: 10px 24px;
598
+ border-top: 1px solid hsl(var(--border));
599
+ }
600
+
601
+ .section-drawer-comment-textarea {
602
+ min-height: 64px;
603
+ resize: none;
604
+ font-size: 0.875rem;
605
+ }
606
+
607
+ /* Footer */
608
+ .section-drawer-footer {
609
+ display: flex;
610
+ align-items: center;
611
+ justify-content: space-between;
612
+ padding: 10px 24px;
613
+ border-top: 1px solid hsl(var(--border));
614
+ }
615
+
616
+ .section-drawer-projects-header > div {
617
+ display: inline-flex;
618
+ align-items: center;
619
+ gap: 6px;
620
+ }
621
+
622
+ .section-drawer-projects-header > div::before {
623
+ content: "Send feedback";
624
+ font-size: 0.75rem;
625
+ font-weight: 500;
626
+ color: hsl(var(--muted-foreground));
627
+ text-decoration: underline;
628
+ text-underline-offset: 2px;
629
+ }
630
+
631
+ .section-drawer-collaborators {
632
+ display: flex;
633
+ align-items: center;
634
+ gap: 8px;
635
+ }
636
+
637
+ .section-drawer-collaborators-label {
638
+ font-size: 0.75rem;
639
+ color: hsl(var(--muted-foreground));
640
+ }
641
+
642
+ .section-drawer-leave-btn {
643
+ font-size: 0.8125rem;
644
+ }
645
+
646
+ .section-drawer-value-input {
647
+ width: 120px;
648
+ font-size: 0.875rem;
649
+ font-weight: 500;
650
+ border: 1px solid hsl(var(--border));
651
+ border-radius: 4px;
652
+ padding: 3px 6px;
653
+ outline: none;
654
+ background: hsl(var(--background));
655
+ }
656
+
657
+ .section-drawer-value-input:focus {
658
+ border-color: hsl(var(--ring));
659
+ }
660
+
661
+ /* Fix z-index for Radix portaled content (popovers, selects, dropdowns) to appear above the drawer */
662
+ /* The drawer has z-index: 10000, so portaled content must be higher */
663
+ [data-radix-popper-content-wrapper] {
664
+ z-index: 10001 !important;
665
+ }