@cat-factory/app 0.32.0 → 0.32.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.
|
@@ -354,80 +354,90 @@ const ITEM_ICON: Record<string, string> = {
|
|
|
354
354
|
<div v-else-if="runFailed && run" class="p-3">
|
|
355
355
|
<AgentFailureCard :run="run" variant="expanded" />
|
|
356
356
|
</div>
|
|
357
|
-
<div class="
|
|
358
|
-
<!-- frame header: the whole
|
|
359
|
-
`nopan` stops Vue Flow's pane
|
|
360
|
-
(it pans via d3-zoom's
|
|
361
|
-
can't intercept), so the
|
|
362
|
-
on the right opt out via
|
|
357
|
+
<div class="p-4">
|
|
358
|
+
<!-- frame header: the whole header (the title row AND the stats line below it)
|
|
359
|
+
is the drag handle for the expanded frame. `nopan` stops Vue Flow's pane
|
|
360
|
+
from panning on a left-drag that starts here (it pans via d3-zoom's
|
|
361
|
+
mousedown, which our pointerdown stopPropagation can't intercept), so the
|
|
362
|
+
grab drives the frame move. The action buttons on the right opt out via
|
|
363
|
+
`.nodrag` (onFrameHandle ignores them). `pb-3` provides the gap down to the
|
|
364
|
+
drop zone AND makes that gap part of the grab surface, so no header edge
|
|
365
|
+
falls through to the pane (the parent drops `space-y-3` to avoid doubling
|
|
366
|
+
the gap). -->
|
|
363
367
|
<div
|
|
364
|
-
class="nopan
|
|
368
|
+
class="nopan cursor-grab space-y-3 pb-3 active:cursor-grabbing"
|
|
365
369
|
title="Drag service"
|
|
366
370
|
@pointerdown="onFrameHandle"
|
|
367
371
|
>
|
|
368
|
-
<div class="flex items-
|
|
369
|
-
<div
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
372
|
+
<div class="flex items-start justify-between gap-2">
|
|
373
|
+
<div class="flex items-center gap-2">
|
|
374
|
+
<div
|
|
375
|
+
class="flex h-8 w-8 items-center justify-center rounded-lg"
|
|
376
|
+
:style="{ backgroundColor: typeMeta!.accent + '22' }"
|
|
377
|
+
>
|
|
378
|
+
<UIcon
|
|
379
|
+
:name="typeMeta!.icon"
|
|
380
|
+
class="h-5 w-5"
|
|
381
|
+
:style="{ color: typeMeta!.accent }"
|
|
382
|
+
/>
|
|
383
|
+
</div>
|
|
384
|
+
<div>
|
|
385
|
+
<div class="text-sm font-semibold text-white">{{ block.title }}</div>
|
|
386
|
+
<div class="text-[11px] text-slate-400">{{ typeMeta!.label }}</div>
|
|
387
|
+
</div>
|
|
374
388
|
</div>
|
|
375
|
-
<div>
|
|
376
|
-
<
|
|
377
|
-
|
|
389
|
+
<div class="flex items-center gap-1">
|
|
390
|
+
<UBadge :color="statusMeta.chip as any" variant="subtle" size="sm">{{
|
|
391
|
+
statusLabel
|
|
392
|
+
}}</UBadge>
|
|
393
|
+
<UButton
|
|
394
|
+
class="nodrag"
|
|
395
|
+
data-testid="frame-add-task"
|
|
396
|
+
size="xs"
|
|
397
|
+
variant="ghost"
|
|
398
|
+
color="neutral"
|
|
399
|
+
icon="i-lucide-plus"
|
|
400
|
+
title="Add task"
|
|
401
|
+
@click.stop="addTask"
|
|
402
|
+
/>
|
|
403
|
+
<UButton
|
|
404
|
+
v-if="tasks.anyOffered"
|
|
405
|
+
class="nodrag"
|
|
406
|
+
size="xs"
|
|
407
|
+
variant="ghost"
|
|
408
|
+
color="neutral"
|
|
409
|
+
icon="i-lucide-ticket"
|
|
410
|
+
title="Create task from issue"
|
|
411
|
+
@click.stop="createTaskFromIssue"
|
|
412
|
+
/>
|
|
413
|
+
<UButton
|
|
414
|
+
class="nodrag"
|
|
415
|
+
size="xs"
|
|
416
|
+
variant="ghost"
|
|
417
|
+
color="neutral"
|
|
418
|
+
icon="i-lucide-repeat"
|
|
419
|
+
title="Add recurring pipeline"
|
|
420
|
+
@click.stop="addRecurring"
|
|
421
|
+
/>
|
|
422
|
+
<UButton
|
|
423
|
+
class="nodrag"
|
|
424
|
+
size="xs"
|
|
425
|
+
variant="ghost"
|
|
426
|
+
color="neutral"
|
|
427
|
+
icon="i-lucide-chevron-up"
|
|
428
|
+
title="Collapse"
|
|
429
|
+
@click.stop="toggleExpand"
|
|
430
|
+
/>
|
|
378
431
|
</div>
|
|
379
432
|
</div>
|
|
380
|
-
<div class="flex items-center gap-1">
|
|
381
|
-
<UBadge :color="statusMeta.chip as any" variant="subtle" size="sm">{{
|
|
382
|
-
statusLabel
|
|
383
|
-
}}</UBadge>
|
|
384
|
-
<UButton
|
|
385
|
-
class="nodrag"
|
|
386
|
-
data-testid="frame-add-task"
|
|
387
|
-
size="xs"
|
|
388
|
-
variant="ghost"
|
|
389
|
-
color="neutral"
|
|
390
|
-
icon="i-lucide-plus"
|
|
391
|
-
title="Add task"
|
|
392
|
-
@click.stop="addTask"
|
|
393
|
-
/>
|
|
394
|
-
<UButton
|
|
395
|
-
v-if="tasks.anyOffered"
|
|
396
|
-
class="nodrag"
|
|
397
|
-
size="xs"
|
|
398
|
-
variant="ghost"
|
|
399
|
-
color="neutral"
|
|
400
|
-
icon="i-lucide-ticket"
|
|
401
|
-
title="Create task from issue"
|
|
402
|
-
@click.stop="createTaskFromIssue"
|
|
403
|
-
/>
|
|
404
|
-
<UButton
|
|
405
|
-
class="nodrag"
|
|
406
|
-
size="xs"
|
|
407
|
-
variant="ghost"
|
|
408
|
-
color="neutral"
|
|
409
|
-
icon="i-lucide-repeat"
|
|
410
|
-
title="Add recurring pipeline"
|
|
411
|
-
@click.stop="addRecurring"
|
|
412
|
-
/>
|
|
413
|
-
<UButton
|
|
414
|
-
class="nodrag"
|
|
415
|
-
size="xs"
|
|
416
|
-
variant="ghost"
|
|
417
|
-
color="neutral"
|
|
418
|
-
icon="i-lucide-chevron-up"
|
|
419
|
-
title="Collapse"
|
|
420
|
-
@click.stop="toggleExpand"
|
|
421
|
-
/>
|
|
422
|
-
</div>
|
|
423
|
-
</div>
|
|
424
433
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
434
|
+
<div class="flex items-center gap-2 text-[10px] uppercase tracking-wide text-slate-500">
|
|
435
|
+
<span>{{ mergedTasks }}/{{ taskCount }} implemented</span>
|
|
436
|
+
<span v-if="modules.length"
|
|
437
|
+
>· {{ modules.length }} module{{ modules.length === 1 ? '' : 's' }}</span
|
|
438
|
+
>
|
|
439
|
+
<span v-if="prTasks" class="text-emerald-400">· {{ prTasks }} PR ready</span>
|
|
440
|
+
</div>
|
|
431
441
|
</div>
|
|
432
442
|
|
|
433
443
|
<!-- the 2D drop zone: modules and loose tasks live here, draggable -->
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.32.
|
|
3
|
+
"version": "0.32.1",
|
|
4
4
|
"description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|