ShotDetailPanel and AssetDetailPanel now merge department task types
(filtered to shot/asset departments respectively) into the flat task
type list shown in "Add Task", so types like Animation's blocking or
Composite's first_pass are selectable at creation time instead of only
via editing a task's type afterward. No backend change needed since
task creation already derives department from an owned task type.
Moves shot/ShotNotes.vue to shared/EntityNotes.vue (it had no
shot-specific logic) and wires it into AssetDetailPanel.vue too,
replacing the old read-only AssetNotes.vue. Asset panel gains the same
multi-select task filter, sort, client-only/submission-notes toggles,
and bottom composer that Shot's panel already had, plus the same
min-h-0 layout fix needed for the pinned composer.
NoteItem's absolute-format timestamp now shows date-only (y/m/d) with
an info icon whose tooltip reveals the full y/m/d H:M:S - applied to
both note and submission-note entries.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- NoteItem.vue: render each note as a rounded card (own notes tinted)
instead of a flat list row.
- TaskNotes.vue: show a "Replying to X" banner with cancel and
auto-focus the composer when Reply is clicked, so replying is
actually visible instead of silently setting hidden state.
- ShotDetailPanel/ShotBrowser/TaskDetailPanel: carry the target note
id through select-task so replying from the shot-level aggregated
notes view pre-fills the reply in the destination task's panel
instead of just switching tabs.
- Textarea.vue: fix v-model, which was never wired up (modelValue/
update:modelValue fell through as dead attrs on the native
textarea), so typed content never reached the bound ref anywhere
it's used - notes, submissions, and shot/asset/episode/project
description fields.
- AssetDetailPanel/ShotDetailPanel/TaskDetailPanel: drop the header
status badge and switch tab labels to icons (with an unread-style
badge on Notes), fixing the TabsTrigger clipping/vertical alignment
it introduced.
Extracts duplication that built up as shot/asset/task features reached
parity: CheckableCommandItem/ColumnToggleList replace 14+ hand-rolled
checkbox-list blocks, shared toolbar pieces (debounced search, detail-panel
toggle, clear-filters, segmented view/context toggle) replace copy-pasted
markup in the three table toolbars, icon-only buttons standardize on the
icon-sm size, TaskBulkActionsMenu's Assign To submenu matches Set Status,
and a shared DetailPanelOverlay/Header/Loading/Error shell backs all three
detail panels (adding a previously-missing error state to the task panel).
Phase 2 of frontend_tasks.md - close feature gaps between domains:
- Asset user-assignment popover, ported from shot's EditableTaskStatus,
wired through columns.ts and AssetBrowser.vue.
- Asset column-locking toggle: two-pane frozen-column layout ported
into AssetsDataTable.vue (adapted for asset's page-scroll layout,
which has no bounded-height container like shot's).
- Task table row-actions menu (View Details + Reassign only - no
Delete/Edit, since no backend support exists for either).
- Real select-task/create-task behavior on asset and shot detail
panels: clicking a task swaps in the actual TaskDetailPanel in
place; "Add Task" opens a task-type picker that creates real tasks
via the existing createAssetTask/createShotTask services.
- create-note/upload-reference/publish-version implemented via a
task-picker that deep-links into TaskDetailPanel's Notes/
Attachments/Submissions tabs (new initialTab prop), reusing the
already-working task-level components instead of building three new
bespoke forms. Also fixed shot's pre-existing dead "Add Note"/
"Upload Reference" buttons the same way.
- Consolidated ProjectMembersManager.vue and ProjectMemberManagement.vue
into one component, combining remove-confirmation and approved-user
filtering with toast feedback and the shared Select/Dialog UI kit.
- Wired ProjectDetailView's "Manage Members" to navigate to the
project's Settings > Team tab.
Also fixed a bug in this session's own new code: TaskBrowser.vue's
row-click handler is a no-op by design, so the new row-actions menu
needed to emit row-double-click (which actually opens the panel)
instead.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>