@memberjunction/ng-conversations 5.49.0 → 5.50.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.
- package/README.md +64 -3
- package/dist/lib/components/collection/collections-full-view.component.d.ts +10 -0
- package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.js +74 -14
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +31 -5
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +169 -101
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +5 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.js +13 -3
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +16 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +439 -351
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/export/export-modal.component.d.ts +25 -3
- package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
- package/dist/lib/components/export/export-modal.component.js +172 -34
- package/dist/lib/components/export/export-modal.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +4 -1
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +15 -3
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +46 -1
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +295 -201
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +19 -1
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +55 -1
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +14 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.js +38 -5
- package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
- package/dist/lib/components/slots/slot-interfaces.d.ts +23 -1
- package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
- package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
- package/dist/lib/directives/chat-slot.directive.d.ts +10 -2
- package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
- package/dist/lib/directives/chat-slot.directive.js.map +1 -1
- package/dist/lib/models/lazy-artifact-info.d.ts +8 -7
- package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
- package/dist/lib/models/lazy-artifact-info.js +12 -11
- package/dist/lib/models/lazy-artifact-info.js.map +1 -1
- package/dist/lib/services/export.service.d.ts +149 -0
- package/dist/lib/services/export.service.d.ts.map +1 -1
- package/dist/lib/services/export.service.js +270 -36
- package/dist/lib/services/export.service.js.map +1 -1
- package/package.json +29 -29
|
@@ -530,7 +530,10 @@ function CollectionsFullViewComponent_Conditional_31_Conditional_20_Template(rf,
|
|
|
530
530
|
i0.ɵɵproperty("ngClass", ctx_r2.sortOrder === "asc" ? "fa-sort-up" : "fa-sort-down");
|
|
531
531
|
} }
|
|
532
532
|
function CollectionsFullViewComponent_Conditional_31_For_25_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
533
|
-
i0.ɵɵ
|
|
533
|
+
i0.ɵɵelementStart(0, "span", 119);
|
|
534
|
+
i0.ɵɵelement(1, "i", 91);
|
|
535
|
+
i0.ɵɵtext(2, " Shared ");
|
|
536
|
+
i0.ɵɵelementEnd();
|
|
534
537
|
} }
|
|
535
538
|
function CollectionsFullViewComponent_Conditional_31_For_25_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
536
539
|
i0.ɵɵelementStart(0, "span");
|
|
@@ -577,7 +580,7 @@ function CollectionsFullViewComponent_Conditional_31_For_25_Template(rf, ctx) {
|
|
|
577
580
|
i0.ɵɵelementStart(6, "span");
|
|
578
581
|
i0.ɵɵtext(7);
|
|
579
582
|
i0.ɵɵelementEnd();
|
|
580
|
-
i0.ɵɵconditionalCreate(8, CollectionsFullViewComponent_Conditional_31_For_25_Conditional_8_Template,
|
|
583
|
+
i0.ɵɵconditionalCreate(8, CollectionsFullViewComponent_Conditional_31_For_25_Conditional_8_Template, 3, 0, "span", 119);
|
|
581
584
|
i0.ɵɵelementEnd()();
|
|
582
585
|
i0.ɵɵelementStart(9, "td", 120);
|
|
583
586
|
i0.ɵɵconditionalCreate(10, CollectionsFullViewComponent_Conditional_31_For_25_Conditional_10_Template, 2, 0, "span");
|
|
@@ -974,6 +977,8 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
974
977
|
showSortDropdown = false;
|
|
975
978
|
activeArtifactId = null; // Track which artifact is currently being viewed
|
|
976
979
|
itemCountMap = new Map();
|
|
980
|
+
/** Normalized OwnerID → friendly display name (FirstName LastName when available, else Users.Name) */
|
|
981
|
+
ownerNameMap = new Map();
|
|
977
982
|
isSelectMode = false; // Toggle for selection mode
|
|
978
983
|
// Pagination state
|
|
979
984
|
PageSize = 50;
|
|
@@ -1152,7 +1157,8 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
1152
1157
|
this.collections = result.Results || [];
|
|
1153
1158
|
await Promise.all([
|
|
1154
1159
|
this.loadUserPermissions(),
|
|
1155
|
-
this.loadItemCounts(bypassCache)
|
|
1160
|
+
this.loadItemCounts(bypassCache),
|
|
1161
|
+
this.loadOwnerNames()
|
|
1156
1162
|
]);
|
|
1157
1163
|
this.filteredCollections = [...this.collections];
|
|
1158
1164
|
}
|
|
@@ -1204,6 +1210,48 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
1204
1210
|
}
|
|
1205
1211
|
}
|
|
1206
1212
|
}
|
|
1213
|
+
/**
|
|
1214
|
+
* Batch-load friendly display names for the visible collections' owners.
|
|
1215
|
+
* The denormalized Collection.Owner view field is Users.Name, which is often
|
|
1216
|
+
* the raw email — prefer "FirstName LastName" when the user record has them.
|
|
1217
|
+
*/
|
|
1218
|
+
async loadOwnerNames() {
|
|
1219
|
+
// Clear up front so a failed reload falls back to denormalized names
|
|
1220
|
+
// instead of serving a previous run's stale entries
|
|
1221
|
+
this.ownerNameMap.clear();
|
|
1222
|
+
const ownerIds = [...new Set(this.collections
|
|
1223
|
+
.filter(c => c.OwnerID)
|
|
1224
|
+
.map(c => NormalizeUUID(c.OwnerID)))];
|
|
1225
|
+
if (ownerIds.length === 0)
|
|
1226
|
+
return;
|
|
1227
|
+
try {
|
|
1228
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
1229
|
+
const result = await rv.RunView({
|
|
1230
|
+
EntityName: 'MJ: Users',
|
|
1231
|
+
ExtraFilter: `ID IN (${ownerIds.map(id => `'${id}'`).join(',')})`,
|
|
1232
|
+
Fields: ['ID', 'Name', 'FirstName', 'LastName'],
|
|
1233
|
+
ResultType: 'simple'
|
|
1234
|
+
}, this.currentUser);
|
|
1235
|
+
if (result.Success) {
|
|
1236
|
+
for (const user of result.Results || []) {
|
|
1237
|
+
const friendly = [user.FirstName, user.LastName].filter(Boolean).join(' ').trim();
|
|
1238
|
+
this.ownerNameMap.set(NormalizeUUID(user.ID), friendly || user.Name);
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1242
|
+
catch {
|
|
1243
|
+
// Non-fatal — cards fall back to the denormalized Owner name
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
/** Friendly owner label for a collection: resolved display name, else the denormalized Owner field. */
|
|
1247
|
+
getOwnerDisplayName(collection) {
|
|
1248
|
+
if (collection.OwnerID) {
|
|
1249
|
+
const resolved = this.ownerNameMap.get(NormalizeUUID(collection.OwnerID));
|
|
1250
|
+
if (resolved)
|
|
1251
|
+
return resolved;
|
|
1252
|
+
}
|
|
1253
|
+
return collection.Owner || undefined;
|
|
1254
|
+
}
|
|
1207
1255
|
async loadUserPermissions() {
|
|
1208
1256
|
this.userPermissions.clear();
|
|
1209
1257
|
for (const collection of this.collections) {
|
|
@@ -1544,8 +1592,15 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
1544
1592
|
}
|
|
1545
1593
|
// Permission validation and checking methods
|
|
1546
1594
|
async validatePermission(collection, requiredPermission) {
|
|
1547
|
-
// Owner has all permissions (
|
|
1548
|
-
|
|
1595
|
+
// Owner has all permissions. Null OwnerID (legacy collection) still counts as
|
|
1596
|
+
// owned for edit/delete backwards compatibility, but NOT for share — the
|
|
1597
|
+
// server-side create gate requires a real owner or an explicit Share grant.
|
|
1598
|
+
if (!collection) {
|
|
1599
|
+
return true;
|
|
1600
|
+
}
|
|
1601
|
+
if (collection.OwnerID
|
|
1602
|
+
? UUIDsEqual(collection.OwnerID, this.currentUser.ID)
|
|
1603
|
+
: requiredPermission !== 'share') {
|
|
1549
1604
|
return true;
|
|
1550
1605
|
}
|
|
1551
1606
|
const permission = this.userPermissions.get(collection.ID);
|
|
@@ -1580,8 +1635,11 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
1580
1635
|
return permission?.canDelete || false;
|
|
1581
1636
|
}
|
|
1582
1637
|
canShare(collection) {
|
|
1583
|
-
//
|
|
1584
|
-
|
|
1638
|
+
// Unlike edit/delete, sharing does NOT get the null-OwnerID backwards-compat
|
|
1639
|
+
// treatment: the server-side create gate requires a real owner or an explicit
|
|
1640
|
+
// Share grant, so offering Share on a legacy null-owner collection would
|
|
1641
|
+
// always be rejected server-side (permit-then-deny UX).
|
|
1642
|
+
if (collection.OwnerID && UUIDsEqual(collection.OwnerID, this.currentUser.ID))
|
|
1585
1643
|
return true;
|
|
1586
1644
|
// Check permission record
|
|
1587
1645
|
const permission = this.userPermissions.get(collection.ID);
|
|
@@ -1669,7 +1727,7 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
1669
1727
|
description: collection.Description || undefined,
|
|
1670
1728
|
icon: 'fa-folder',
|
|
1671
1729
|
itemCount: this.itemCountMap.get(collection.ID) || 0,
|
|
1672
|
-
owner: collection
|
|
1730
|
+
owner: this.getOwnerDisplayName(collection),
|
|
1673
1731
|
isShared: this.isShared(collection),
|
|
1674
1732
|
selected: this.selectedItems.has(collection.ID),
|
|
1675
1733
|
collection: collection
|
|
@@ -2578,7 +2636,7 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
2578
2636
|
static ɵfac = function CollectionsFullViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CollectionsFullViewComponent)(i0.ɵɵdirectiveInject(i1.DialogService), i0.ɵɵdirectiveInject(i2.ArtifactStateService), i0.ɵɵdirectiveInject(i3.CollectionStateService), i0.ɵɵdirectiveInject(i4.CollectionPermissionService), i0.ɵɵdirectiveInject(i5.ArtifactIconService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
2579
2637
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollectionsFullViewComponent, selectors: [["mj-collections-full-view"]], hostBindings: function CollectionsFullViewComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
2580
2638
|
i0.ɵɵlistener("keydown.escape", function CollectionsFullViewComponent_keydown_escape_HostBindingHandler() { return ctx.onEscapeKey(); }, i0.ɵɵresolveDocument);
|
|
2581
|
-
} }, inputs: { environmentId: "environmentId", currentUser: "currentUser" }, outputs: { collectionNavigated: "collectionNavigated", openConversationRequested: "openConversationRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 37, vars: 36, consts: [[1, "collections-view", 3, "keydown"], [1, "collections-header"], [1, "collections-breadcrumb"], ["title", "Toggle collections panel", 1, "btn-icon", "nav-toggle", 3, "click"], [1, "fas", "fa-bars"], [1, "breadcrumb-item", 3, "dragover", "dragleave", "drop"], [1, "fas", "fa-home"], [1, "breadcrumb-link", 3, "click"], [1, "breadcrumb-path"], [1, "collections-actions"], [1, "btn-icon", 3, "click", "title"], [1, "fas", 3, "ngClass"], [1, "fas", "fa-check-square"], [1, "dropdown-container"], [1, "search-container"], [1, "fas", "fa-search"], ["type", "text", "placeholder", "Search...", 1, "search-input", 3, "ngModelChange", "ngModel"], ["title", "Clear search", 1, "search-clear"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync"], [1, "selection-toolbar"], [1, "collections-body"], [1, "collections-navigator"], [1, "collections-content"], [1, "loading-state"], ["Icon", "fa-solid fa-folder-open", "ActionIcon", "fa-solid fa-plus", 3, "Variant", "Title", "Message", "ActionText"], [1, "staging-shelf"], [3, "saved", "cancelled", "isOpen", "collection", "parentCollection", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "collectionId", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "collection", "currentUser", "currentUserPermissions"], [1, "fas", "fa-chevron-right", "breadcrumb-separator"], [1, "breadcrumb-link", 3, "dragover", "dragleave", "drop", "click"], ["title", "Sort options", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sort"], [1, "dropdown-menu"], [1, "dropdown-item", 3, "click"], [1, "fas", "fa-sort-alpha-down"], [1, "fas", "fa-calendar"], [1, "fas", "fa-tag"], ["title", "Clear search", 1, "search-clear", 3, "click"], [1, "fas", "fa-times"], [1, "toolbar-separator"], [1, "toolbar-actions-group"], [1, "btn-icon", 3, "title"], [1, "btn-icon", "btn-icon-danger", 3, "title"], [1, "fas", "fa-share-nodes"], [1, "fas", "fa-pen-to-square"], [1, "btn-icon", "btn-icon-danger", 3, "click", "title"], [1, "fas", "fa-trash"], [1, "btn-primary", 3, "click"], [1, "fas", "fa-plus"], [1, "fas", "fa-chevron-down"], [1, "dropdown-menu", "dropdown-menu-right"], [1, "fas", "fa-folder-plus"], [1, "dropdown-item", 3, "click", "disabled"], [1, "fas", "fa-file-plus"], [1, "selection-info"], [1, "selection-count"], [1, "selection-actions"], [1, "btn-toolbar", 3, "click"], [1, "fas", "fa-folder-tree"], ["title", "Add to the staging shelf to move later", 1, "btn-toolbar", 3, "click"], [1, "fas", "fa-layer-group"], [1, "btn-toolbar", "btn-danger", 3, "click"], [1, "bulk-move-backdrop", 3, "click"], [1, "dropdown-menu", "bulk-move-menu"], [1, "dropdown-note"], [1, "dropdown-item", 3, "paddingLeft"], [1, "fas", "fa-folder"], [1, "nav-header"], [1, "nav-list"], [1, "nav-row", 3, "click", "dragover", "dragleave", "drop"], [1, "nav-row", 3, "active", "drag-over", "paddingLeft", "title"], [1, "nav-row", 3, "click", "dragover", "dragleave", "drop", "title"], [1, "nav-row-name"], ["text", "Loading collections...", "size", "large"], ["Icon", "fa-solid fa-folder-open", "ActionIcon", "fa-solid fa-plus", 3, "Action", "Variant", "Title", "Message", "ActionText"], [1, "empty-collection-hint"], [1, "unified-grid"], [1, "grid-item", 3, "selected", "active", "dragging", "drag-over", "draggable"], [1, "pagination-bar"], [1, "grid-item", 3, "dragstart", "dragend", "dragover", "dragleave", "drop", "click", "dblclick", "contextmenu", "draggable"], [1, "item-checkbox", 3, "click"], [1, "grid-item-content", 3, "title"], [1, "grid-icon", "folder-icon"], ["title", "Shared", 1, "shared-badge"], [1, "grid-info"], [1, "grid-name"], [1, "grid-description"], [1, "grid-meta"], [1, "grid-owner"], [1, "fas", "fa-users"], [1, "fas", "fa-user"], [1, "grid-icon", "artifact-icon"], [1, "version-badge"], [1, "artifact-type-badge"], [1, "pagination-info"], [1, "pagination-controls"], ["title", "First page", 1, "pagination-btn", 3, "click", "disabled"], [1, "fas", "fa-angles-left"], ["title", "Previous page", 1, "pagination-btn", 3, "click", "disabled"], [1, "fas", "fa-chevron-left"], [1, "pagination-page-info"], ["title", "Next page", 1, "pagination-btn", 3, "click", "disabled"], [1, "fas", "fa-chevron-right"], ["title", "Last page", 1, "pagination-btn", 3, "click", "disabled"], [1, "fas", "fa-angles-right"], [1, "unified-list"], [1, "list-table"], [1, "col-checkbox"], [1, "fas", 3, "click", "ngClass"], [1, "col-name", "sortable", 3, "click"], [1, "col-type", "sortable", 3, "click"], [1, "col-modified", "sortable", 3, "click"], [1, "col-owner"], [1, "list-item", 3, "selected", "active", "dragging", "drag-over", "draggable"], [1, "list-item", 3, "dragstart", "dragend", "dragover", "dragleave", "drop", "click", "dblclick", "contextmenu", "draggable"], [1, "col-name"], [1, "list-name-cell"], ["title", "Shared", 1, "
|
|
2639
|
+
} }, inputs: { environmentId: "environmentId", currentUser: "currentUser" }, outputs: { collectionNavigated: "collectionNavigated", openConversationRequested: "openConversationRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 37, vars: 36, consts: [[1, "collections-view", 3, "keydown"], [1, "collections-header"], [1, "collections-breadcrumb"], ["title", "Toggle collections panel", 1, "btn-icon", "nav-toggle", 3, "click"], [1, "fas", "fa-bars"], [1, "breadcrumb-item", 3, "dragover", "dragleave", "drop"], [1, "fas", "fa-home"], [1, "breadcrumb-link", 3, "click"], [1, "breadcrumb-path"], [1, "collections-actions"], [1, "btn-icon", 3, "click", "title"], [1, "fas", 3, "ngClass"], [1, "fas", "fa-check-square"], [1, "dropdown-container"], [1, "search-container"], [1, "fas", "fa-search"], ["type", "text", "placeholder", "Search...", 1, "search-input", 3, "ngModelChange", "ngModel"], ["title", "Clear search", 1, "search-clear"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync"], [1, "selection-toolbar"], [1, "collections-body"], [1, "collections-navigator"], [1, "collections-content"], [1, "loading-state"], ["Icon", "fa-solid fa-folder-open", "ActionIcon", "fa-solid fa-plus", 3, "Variant", "Title", "Message", "ActionText"], [1, "staging-shelf"], [3, "saved", "cancelled", "isOpen", "collection", "parentCollection", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "collectionId", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "collection", "currentUser", "currentUserPermissions"], [1, "fas", "fa-chevron-right", "breadcrumb-separator"], [1, "breadcrumb-link", 3, "dragover", "dragleave", "drop", "click"], ["title", "Sort options", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sort"], [1, "dropdown-menu"], [1, "dropdown-item", 3, "click"], [1, "fas", "fa-sort-alpha-down"], [1, "fas", "fa-calendar"], [1, "fas", "fa-tag"], ["title", "Clear search", 1, "search-clear", 3, "click"], [1, "fas", "fa-times"], [1, "toolbar-separator"], [1, "toolbar-actions-group"], [1, "btn-icon", 3, "title"], [1, "btn-icon", "btn-icon-danger", 3, "title"], [1, "fas", "fa-share-nodes"], [1, "fas", "fa-pen-to-square"], [1, "btn-icon", "btn-icon-danger", 3, "click", "title"], [1, "fas", "fa-trash"], [1, "btn-primary", 3, "click"], [1, "fas", "fa-plus"], [1, "fas", "fa-chevron-down"], [1, "dropdown-menu", "dropdown-menu-right"], [1, "fas", "fa-folder-plus"], [1, "dropdown-item", 3, "click", "disabled"], [1, "fas", "fa-file-plus"], [1, "selection-info"], [1, "selection-count"], [1, "selection-actions"], [1, "btn-toolbar", 3, "click"], [1, "fas", "fa-folder-tree"], ["title", "Add to the staging shelf to move later", 1, "btn-toolbar", 3, "click"], [1, "fas", "fa-layer-group"], [1, "btn-toolbar", "btn-danger", 3, "click"], [1, "bulk-move-backdrop", 3, "click"], [1, "dropdown-menu", "bulk-move-menu"], [1, "dropdown-note"], [1, "dropdown-item", 3, "paddingLeft"], [1, "fas", "fa-folder"], [1, "nav-header"], [1, "nav-list"], [1, "nav-row", 3, "click", "dragover", "dragleave", "drop"], [1, "nav-row", 3, "active", "drag-over", "paddingLeft", "title"], [1, "nav-row", 3, "click", "dragover", "dragleave", "drop", "title"], [1, "nav-row-name"], ["text", "Loading collections...", "size", "large"], ["Icon", "fa-solid fa-folder-open", "ActionIcon", "fa-solid fa-plus", 3, "Action", "Variant", "Title", "Message", "ActionText"], [1, "empty-collection-hint"], [1, "unified-grid"], [1, "grid-item", 3, "selected", "active", "dragging", "drag-over", "draggable"], [1, "pagination-bar"], [1, "grid-item", 3, "dragstart", "dragend", "dragover", "dragleave", "drop", "click", "dblclick", "contextmenu", "draggable"], [1, "item-checkbox", 3, "click"], [1, "grid-item-content", 3, "title"], [1, "grid-icon", "folder-icon"], ["title", "Shared", 1, "shared-badge"], [1, "grid-info"], [1, "grid-name"], [1, "grid-description"], [1, "grid-meta"], [1, "grid-owner"], [1, "fas", "fa-users"], [1, "fas", "fa-user"], [1, "grid-icon", "artifact-icon"], [1, "version-badge"], [1, "artifact-type-badge"], [1, "pagination-info"], [1, "pagination-controls"], ["title", "First page", 1, "pagination-btn", 3, "click", "disabled"], [1, "fas", "fa-angles-left"], ["title", "Previous page", 1, "pagination-btn", 3, "click", "disabled"], [1, "fas", "fa-chevron-left"], [1, "pagination-page-info"], ["title", "Next page", 1, "pagination-btn", 3, "click", "disabled"], [1, "fas", "fa-chevron-right"], ["title", "Last page", 1, "pagination-btn", 3, "click", "disabled"], [1, "fas", "fa-angles-right"], [1, "unified-list"], [1, "list-table"], [1, "col-checkbox"], [1, "fas", 3, "click", "ngClass"], [1, "col-name", "sortable", 3, "click"], [1, "col-type", "sortable", 3, "click"], [1, "col-modified", "sortable", 3, "click"], [1, "col-owner"], [1, "list-item", 3, "selected", "active", "dragging", "drag-over", "draggable"], [1, "list-item", 3, "dragstart", "dragend", "dragover", "dragleave", "drop", "click", "dblclick", "contextmenu", "draggable"], [1, "col-name"], [1, "list-name-cell"], ["title", "Shared", 1, "shared-indicator"], [1, "col-type"], [1, "col-modified"], [1, "shelf-info"], [1, "shelf-chips"], [1, "shelf-chip", 3, "title"], [1, "shelf-actions"], [1, "btn-toolbar", "btn-primary-toolbar", 3, "click", "disabled", "title"], [1, "fas", "fa-arrow-down"], [1, "shelf-chip-name"], ["title", "Remove", 1, "shelf-chip-x", 3, "click"], [1, "context-menu-backdrop", 3, "click"], [1, "context-menu"], [1, "context-menu-item", 3, "click"], [1, "fas", "fa-folder-open"], [1, "context-menu-divider"], [1, "context-menu-item"], [1, "context-menu-item", "context-menu-danger", 3, "click"], [1, "context-menu-note"], [1, "move-target-list"], [1, "fas", "fa-spinner", "fa-spin"], [1, "context-menu-item", 3, "paddingLeft"], [1, "fas", "fa-eye"], [1, "fas", "fa-comments"], [1, "fas", "fa-chevron-right", "submenu-arrow"], [1, "fas", "fa-times-circle"]], template: function CollectionsFullViewComponent_Template(rf, ctx) { if (rf & 1) {
|
|
2582
2640
|
i0.ɵɵelementStart(0, "div", 0);
|
|
2583
2641
|
i0.ɵɵlistener("keydown", function CollectionsFullViewComponent_Template_div_keydown_0_listener($event) { return ctx.handleKeyboardShortcut($event); });
|
|
2584
2642
|
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "button", 3);
|
|
@@ -2684,7 +2742,7 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
2684
2742
|
i0.ɵɵproperty("isOpen", ctx.isArtifactModalOpen)("collectionId", ctx.currentCollectionId || "")("environmentId", ctx.environmentId)("currentUser", ctx.currentUser);
|
|
2685
2743
|
i0.ɵɵadvance();
|
|
2686
2744
|
i0.ɵɵproperty("isOpen", ctx.isShareModalOpen)("collection", ctx.sharingCollection)("currentUser", ctx.currentUser)("currentUserPermissions", ctx.sharingCollection ? ctx.userPermissions.get(ctx.sharingCollection.ID) || null : null);
|
|
2687
|
-
} }, dependencies: [i6.NgClass, i7.DefaultValueAccessor, i7.NgControlStatus, i7.NgModel, i8.MJEmptyStateComponent, i9.LoadingComponent, i10.CollectionShareModalComponent, i11.CollectionFormModalComponent, i12.ArtifactCreateModalComponent, i6.DatePipe], styles: ["[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n }\n\n \n\n .collections-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n position: relative;\n }\n\n \n\n .collections-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n gap: 16px;\n background: var(--mj-bg-surface);\n }\n\n .collections-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .breadcrumb-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .breadcrumb-link[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n font-size: 14px;\n }\n\n .breadcrumb-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n }\n\n .breadcrumb-link.active[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n cursor: default;\n }\n\n .breadcrumb-path[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator[_ngcontent-%COMP%] {\n color: var(--mj-border-strong);\n font-size: 10px;\n }\n\n .collections-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n \n\n .btn-primary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 150ms ease;\n }\n\n .btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary[_ngcontent-%COMP%] i.fa-chevron-down[_ngcontent-%COMP%] {\n font-size: 10px;\n margin-left: 2px;\n }\n\n .btn-icon[_ngcontent-%COMP%] {\n padding: 6px 10px;\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 150ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-text-disabled);\n }\n\n .btn-icon.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .btn-icon.active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n \n\n .dropdown-container[_ngcontent-%COMP%] {\n position: relative;\n }\n\n .dropdown-menu[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n min-width: 200px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 4px;\n z-index: 1000;\n }\n\n .dropdown-menu-right[_ngcontent-%COMP%] {\n left: auto;\n right: 0;\n }\n\n .dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 4px;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 100ms ease;\n }\n\n .dropdown-item[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n }\n\n .dropdown-item[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .dropdown-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .dropdown-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .dropdown-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .dropdown-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n }\n\n \n\n .search-container[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n min-width: 200px;\n }\n\n .search-container[_ngcontent-%COMP%] i.fa-search[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n color: var(--mj-text-disabled);\n font-size: 13px;\n pointer-events: none;\n }\n\n .search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 32px 6px 32px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n font-size: 13px;\n outline: none;\n transition: all 150ms ease;\n }\n\n .search-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n }\n\n .search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 6px;\n padding: 4px;\n background: transparent;\n border: none;\n color: var(--mj-text-disabled);\n cursor: pointer;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .search-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n \n\n .selection-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n }\n\n .selection-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .selection-count[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n }\n\n .selection-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .btn-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .btn-toolbar[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-text-disabled);\n }\n\n .btn-toolbar.btn-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n }\n\n .btn-toolbar.btn-danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n }\n\n \n\n .collections-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n }\n\n \n\n .loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 0;\n color: var(--mj-text-disabled);\n text-align: center;\n padding: 24px;\n }\n\n .collections-content[_ngcontent-%COMP%] mj-empty-state[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n }\n\n .empty-collection-hint[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-muted);\n }\n\n \n\n .unified-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 16px;\n padding: 4px;\n flex-shrink: 0;\n }\n\n .grid-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 12px;\n background: var(--mj-bg-surface);\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: all 150ms ease;\n position: relative;\n user-select: none;\n }\n\n .grid-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n }\n\n .grid-item.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .grid-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n box-shadow: 0 0 0 1px var(--mj-status-warning);\n }\n\n .grid-item.active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 25%, var(--mj-bg-surface));\n }\n\n \n\n .unified-grid.select-mode[_ngcontent-%COMP%] .grid-item[_ngcontent-%COMP%] {\n cursor: pointer;\n }\n\n .unified-grid.select-mode[_ngcontent-%COMP%] .grid-item[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n }\n\n .item-checkbox[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 10;\n }\n\n .item-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: color 150ms ease;\n }\n\n .grid-item.selected[_ngcontent-%COMP%] .item-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n .item-checkbox[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .grid-item-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n\n .grid-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n position: relative;\n }\n\n .grid-icon.folder-icon[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n }\n\n .grid-icon.folder-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--mj-text-inverse);\n }\n\n .grid-icon.artifact-icon[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n }\n\n .grid-icon.artifact-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-text-muted);\n }\n\n .shared-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -4px;\n right: -4px;\n width: 20px;\n height: 20px;\n background: var(--mj-status-success);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-bg-surface);\n }\n\n .shared-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-inverse);\n }\n\n .grid-info[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n }\n\n .grid-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n line-height: 1.3;\n margin-bottom: 4px;\n \n\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n word-break: break-word;\n }\n\n .grid-description[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.3;\n margin-bottom: 4px;\n \n\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n word-break: break-word;\n }\n\n .grid-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n }\n\n .grid-owner[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n }\n\n .grid-owner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n margin-right: 3px;\n }\n\n .version-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n font-family: monospace;\n margin-right: 4px;\n }\n\n .artifact-type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n text-transform: uppercase;\n }\n\n \n\n .unified-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n flex-shrink: 0;\n }\n\n .list-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n }\n\n .list-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .list-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 10px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n transition: color 150ms ease;\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: inline-block;\n margin-right: 6px;\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.5;\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n opacity: 1;\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background 150ms ease;\n cursor: pointer;\n user-select: none;\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-warning);\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 25%, var(--mj-bg-surface));\n }\n\n .list-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .col-checkbox[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n }\n\n .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n cursor: pointer;\n transition: color 150ms ease;\n }\n\n .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:hover, \n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .col-name[_ngcontent-%COMP%] {\n min-width: 300px;\n }\n\n .list-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .list-name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-muted);\n width: 20px;\n text-align: center;\n }\n\n .list-name-cell[_ngcontent-%COMP%] .fa-folder[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .shared-indicator[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-status-success);\n margin-left: auto;\n }\n\n .col-type[_ngcontent-%COMP%] {\n width: 150px;\n }\n\n .col-modified[_ngcontent-%COMP%] {\n width: 180px;\n }\n\n .col-owner[_ngcontent-%COMP%] {\n width: 150px;\n }\n\n \n\n .pagination-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n\n .pagination-info[_ngcontent-%COMP%] {\n white-space: nowrap;\n }\n\n .pagination-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .pagination-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 12px;\n }\n\n .pagination-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n }\n\n .pagination-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.35;\n cursor: default;\n }\n\n .pagination-page-info[_ngcontent-%COMP%] {\n padding: 0 8px;\n white-space: nowrap;\n font-weight: 500;\n }\n\n \n\n .toolbar-separator[_ngcontent-%COMP%] {\n width: 1px;\n height: 24px;\n background: var(--mj-border-strong);\n margin: 0 4px;\n }\n\n .toolbar-actions-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .btn-icon-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n }\n\n .btn-icon-danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: var(--mj-status-error);\n }\n\n \n\n .context-menu-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1999;\n }\n\n .context-menu[_ngcontent-%COMP%] {\n position: fixed;\n min-width: 180px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);\n padding: 4px;\n z-index: 2000;\n }\n\n .context-menu-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 4px;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 100ms ease;\n }\n\n .context-menu-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .context-menu-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .context-menu-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n\n .context-menu-danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n\n .context-menu-danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n }\n\n .context-menu-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n }\n .submenu-arrow[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 10px;\n opacity: 0.6;\n }\n .move-target-list[_ngcontent-%COMP%] {\n max-height: 240px;\n overflow-y: auto;\n }\n .context-menu-note[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n \n\n .collections-body[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 0;\n overflow: hidden;\n }\n .collections-navigator[_ngcontent-%COMP%] {\n width: 240px;\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n }\n .nav-header[_ngcontent-%COMP%] {\n padding: 12px 14px 8px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n }\n .nav-list[_ngcontent-%COMP%] { display: flex; flex-direction: column; padding: 0 6px 12px; gap: 1px; }\n .nav-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 10px;\n border: 1px solid transparent;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n transition: background 0.12s ease;\n }\n .nav-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .nav-row.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n }\n .nav-row.drag-over[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n border-color: var(--mj-brand-primary);\n }\n .nav-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 13px; width: 16px; flex-shrink: 0; }\n .nav-row-name[_ngcontent-%COMP%] { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .nav-toggle.active[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n \n\n .grid-item.dragging[_ngcontent-%COMP%], .list-item.dragging[_ngcontent-%COMP%] { opacity: 0.4; }\n .grid-item.drag-over[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary) !important;\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface)) !important;\n }\n .list-item.drag-over[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n box-shadow: inset 0 0 0 1px var(--mj-brand-primary);\n }\n .breadcrumb-item.drag-over[_ngcontent-%COMP%], .breadcrumb-link.drag-over[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n outline: 1px solid var(--mj-brand-primary);\n }\n\n \n\n .item-checkbox[_ngcontent-%COMP%] { opacity: 0; transition: opacity 150ms ease; }\n .grid-item[_ngcontent-%COMP%]:hover .item-checkbox[_ngcontent-%COMP%], \n .grid-item.selected[_ngcontent-%COMP%] .item-checkbox[_ngcontent-%COMP%], \n .unified-grid.select-mode[_ngcontent-%COMP%] .item-checkbox[_ngcontent-%COMP%] { opacity: 1; }\n .list-item[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { opacity: 0; transition: opacity 150ms ease; }\n .list-item[_ngcontent-%COMP%]:hover .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n .list-item.selected[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n .unified-list.select-mode[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { opacity: 1; }\n .list-item.selected[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n \n\n .bulk-move-backdrop[_ngcontent-%COMP%] {\n position: fixed; inset: 0; z-index: 1000;\n }\n .bulk-move-menu[_ngcontent-%COMP%] {\n max-height: 320px;\n overflow-y: auto;\n z-index: 1001;\n }\n .dropdown-note[_ngcontent-%COMP%] { padding: 10px 14px; font-size: 12px; color: var(--mj-text-muted); }\n\n \n\n .staging-shelf[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 10px 16px;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n box-shadow: 0 -2px 8px color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n }\n .shelf-info[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px;\n font-weight: 600; font-size: 13px; color: var(--mj-text-primary);\n flex-shrink: 0;\n }\n .shelf-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .shelf-chips[_ngcontent-%COMP%] {\n flex: 1; min-width: 0;\n display: flex; gap: 6px; overflow-x: auto; padding: 2px 0;\n }\n .shelf-chip[_ngcontent-%COMP%] {\n display: inline-flex; align-items: center; gap: 6px;\n padding: 4px 6px 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n font-size: 12px; color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n .shelf-chip-name[_ngcontent-%COMP%] { max-width: 120px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .shelf-chip-x[_ngcontent-%COMP%] {\n width: 18px; height: 18px; border: 0; background: transparent;\n color: var(--mj-text-muted); cursor: pointer; border-radius: 50%;\n display: flex; align-items: center; justify-content: center; font-size: 10px;\n }\n .shelf-chip-x[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .shelf-actions[_ngcontent-%COMP%] { display: flex; gap: 8px; flex-shrink: 0; }\n .btn-toolbar.btn-primary-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n }\n .btn-toolbar.btn-primary-toolbar[_ngcontent-%COMP%]:hover:not(:disabled) { background: var(--mj-brand-primary-hover); }\n .btn-toolbar[_ngcontent-%COMP%]:disabled { opacity: 0.5; cursor: not-allowed; }"] });
|
|
2745
|
+
} }, dependencies: [i6.NgClass, i7.DefaultValueAccessor, i7.NgControlStatus, i7.NgModel, i8.MJEmptyStateComponent, i9.LoadingComponent, i10.CollectionShareModalComponent, i11.CollectionFormModalComponent, i12.ArtifactCreateModalComponent, i6.DatePipe], styles: ["[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n }\n\n \n\n .collections-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n position: relative;\n }\n\n \n\n .collections-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n gap: 16px;\n background: var(--mj-bg-surface);\n }\n\n .collections-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .breadcrumb-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .breadcrumb-link[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n font-size: 14px;\n }\n\n .breadcrumb-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n }\n\n .breadcrumb-link.active[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n cursor: default;\n }\n\n .breadcrumb-path[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator[_ngcontent-%COMP%] {\n color: var(--mj-border-strong);\n font-size: 10px;\n }\n\n .collections-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n \n\n .btn-primary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 150ms ease;\n }\n\n .btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary[_ngcontent-%COMP%] i.fa-chevron-down[_ngcontent-%COMP%] {\n font-size: 10px;\n margin-left: 2px;\n }\n\n .btn-icon[_ngcontent-%COMP%] {\n padding: 6px 10px;\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 150ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-text-disabled);\n }\n\n .btn-icon.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .btn-icon.active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n \n\n .dropdown-container[_ngcontent-%COMP%] {\n position: relative;\n }\n\n .dropdown-menu[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n min-width: 200px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 4px;\n z-index: 1000;\n }\n\n .dropdown-menu-right[_ngcontent-%COMP%] {\n left: auto;\n right: 0;\n }\n\n .dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 4px;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 100ms ease;\n }\n\n .dropdown-item[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n }\n\n .dropdown-item[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .dropdown-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .dropdown-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .dropdown-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .dropdown-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n }\n\n \n\n .search-container[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n min-width: 200px;\n }\n\n .search-container[_ngcontent-%COMP%] i.fa-search[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n color: var(--mj-text-disabled);\n font-size: 13px;\n pointer-events: none;\n }\n\n .search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 32px 6px 32px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n font-size: 13px;\n outline: none;\n transition: all 150ms ease;\n }\n\n .search-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n }\n\n .search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 6px;\n padding: 4px;\n background: transparent;\n border: none;\n color: var(--mj-text-disabled);\n cursor: pointer;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .search-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n \n\n .selection-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n }\n\n .selection-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .selection-count[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n }\n\n .selection-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .btn-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .btn-toolbar[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-text-disabled);\n }\n\n .btn-toolbar.btn-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n }\n\n .btn-toolbar.btn-danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n }\n\n \n\n .collections-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n }\n\n \n\n .loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 0;\n color: var(--mj-text-disabled);\n text-align: center;\n padding: 24px;\n }\n\n .collections-content[_ngcontent-%COMP%] mj-empty-state[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n }\n\n .empty-collection-hint[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-muted);\n }\n\n \n\n .unified-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 16px;\n padding: 4px;\n flex-shrink: 0;\n }\n\n .grid-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 12px;\n background: var(--mj-bg-surface);\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: all 150ms ease;\n position: relative;\n user-select: none;\n }\n\n .grid-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n }\n\n .grid-item.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .grid-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n box-shadow: 0 0 0 1px var(--mj-status-warning);\n }\n\n .grid-item.active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 25%, var(--mj-bg-surface));\n }\n\n \n\n .unified-grid.select-mode[_ngcontent-%COMP%] .grid-item[_ngcontent-%COMP%] {\n cursor: pointer;\n }\n\n .unified-grid.select-mode[_ngcontent-%COMP%] .grid-item[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n }\n\n .item-checkbox[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 10;\n }\n\n .item-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: color 150ms ease;\n }\n\n .grid-item.selected[_ngcontent-%COMP%] .item-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n .item-checkbox[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .grid-item-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n\n .grid-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n position: relative;\n }\n\n .grid-icon.folder-icon[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n }\n\n \n\n .grid-icon.folder-icon[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--mj-text-inverse);\n }\n\n .grid-icon.artifact-icon[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n }\n\n .grid-icon.artifact-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-text-muted);\n }\n\n .shared-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -6px;\n right: -6px;\n width: 22px;\n height: 22px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n }\n\n .shared-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-brand-primary);\n }\n\n .grid-info[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n }\n\n .grid-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n line-height: 1.3;\n margin-bottom: 4px;\n \n\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n word-break: break-word;\n }\n\n .grid-description[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.3;\n margin-bottom: 4px;\n \n\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n word-break: break-word;\n }\n\n .grid-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n }\n\n .grid-owner[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .grid-owner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n margin-right: 3px;\n }\n\n .version-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n font-family: monospace;\n margin-right: 4px;\n }\n\n .artifact-type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n text-transform: uppercase;\n }\n\n \n\n .unified-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n flex-shrink: 0;\n }\n\n .list-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n }\n\n .list-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .list-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 10px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n transition: color 150ms ease;\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: inline-block;\n margin-right: 6px;\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.5;\n }\n\n .list-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n opacity: 1;\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background 150ms ease;\n cursor: pointer;\n user-select: none;\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-warning);\n }\n\n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 25%, var(--mj-bg-surface));\n }\n\n .list-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .col-checkbox[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n }\n\n .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n cursor: pointer;\n transition: color 150ms ease;\n }\n\n .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:hover, \n .list-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .col-name[_ngcontent-%COMP%] {\n min-width: 300px;\n }\n\n .list-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .list-name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-muted);\n width: 20px;\n text-align: center;\n }\n\n .list-name-cell[_ngcontent-%COMP%] .fa-folder[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .shared-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 10px;\n font-weight: 600;\n flex-shrink: 0;\n }\n\n \n\n .list-name-cell[_ngcontent-%COMP%] .shared-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: inherit;\n width: auto;\n }\n\n .col-type[_ngcontent-%COMP%] {\n width: 150px;\n }\n\n .col-modified[_ngcontent-%COMP%] {\n width: 180px;\n }\n\n .col-owner[_ngcontent-%COMP%] {\n width: 150px;\n }\n\n \n\n .pagination-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n\n .pagination-info[_ngcontent-%COMP%] {\n white-space: nowrap;\n }\n\n .pagination-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .pagination-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 12px;\n }\n\n .pagination-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n }\n\n .pagination-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.35;\n cursor: default;\n }\n\n .pagination-page-info[_ngcontent-%COMP%] {\n padding: 0 8px;\n white-space: nowrap;\n font-weight: 500;\n }\n\n \n\n .toolbar-separator[_ngcontent-%COMP%] {\n width: 1px;\n height: 24px;\n background: var(--mj-border-strong);\n margin: 0 4px;\n }\n\n .toolbar-actions-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .btn-icon-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n }\n\n .btn-icon-danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: var(--mj-status-error);\n }\n\n \n\n .context-menu-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1999;\n }\n\n .context-menu[_ngcontent-%COMP%] {\n position: fixed;\n min-width: 180px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);\n padding: 4px;\n z-index: 2000;\n }\n\n .context-menu-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 4px;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 100ms ease;\n }\n\n .context-menu-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .context-menu-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .context-menu-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n\n .context-menu-danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n\n .context-menu-danger[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n }\n\n .context-menu-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n }\n .submenu-arrow[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 10px;\n opacity: 0.6;\n }\n .move-target-list[_ngcontent-%COMP%] {\n max-height: 240px;\n overflow-y: auto;\n }\n .context-menu-note[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n \n\n .collections-body[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 0;\n overflow: hidden;\n }\n .collections-navigator[_ngcontent-%COMP%] {\n width: 240px;\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n }\n .nav-header[_ngcontent-%COMP%] {\n padding: 12px 14px 8px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n }\n .nav-list[_ngcontent-%COMP%] { display: flex; flex-direction: column; padding: 0 6px 12px; gap: 1px; }\n .nav-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 10px;\n border: 1px solid transparent;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n transition: background 0.12s ease;\n }\n .nav-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .nav-row.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n }\n .nav-row.drag-over[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n border-color: var(--mj-brand-primary);\n }\n .nav-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 13px; width: 16px; flex-shrink: 0; }\n .nav-row-name[_ngcontent-%COMP%] { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .nav-toggle.active[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n \n\n .grid-item.dragging[_ngcontent-%COMP%], .list-item.dragging[_ngcontent-%COMP%] { opacity: 0.4; }\n .grid-item.drag-over[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary) !important;\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface)) !important;\n }\n .list-item.drag-over[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n box-shadow: inset 0 0 0 1px var(--mj-brand-primary);\n }\n .breadcrumb-item.drag-over[_ngcontent-%COMP%], .breadcrumb-link.drag-over[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n outline: 1px solid var(--mj-brand-primary);\n }\n\n \n\n .item-checkbox[_ngcontent-%COMP%] { opacity: 0; transition: opacity 150ms ease; }\n .grid-item[_ngcontent-%COMP%]:hover .item-checkbox[_ngcontent-%COMP%], \n .grid-item.selected[_ngcontent-%COMP%] .item-checkbox[_ngcontent-%COMP%], \n .unified-grid.select-mode[_ngcontent-%COMP%] .item-checkbox[_ngcontent-%COMP%] { opacity: 1; }\n .list-item[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { opacity: 0; transition: opacity 150ms ease; }\n .list-item[_ngcontent-%COMP%]:hover .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n .list-item.selected[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n .unified-list.select-mode[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { opacity: 1; }\n .list-item.selected[_ngcontent-%COMP%] .col-checkbox[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n \n\n .bulk-move-backdrop[_ngcontent-%COMP%] {\n position: fixed; inset: 0; z-index: 1000;\n }\n .bulk-move-menu[_ngcontent-%COMP%] {\n max-height: 320px;\n overflow-y: auto;\n z-index: 1001;\n }\n .dropdown-note[_ngcontent-%COMP%] { padding: 10px 14px; font-size: 12px; color: var(--mj-text-muted); }\n\n \n\n .staging-shelf[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 10px 16px;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n box-shadow: 0 -2px 8px color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n }\n .shelf-info[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px;\n font-weight: 600; font-size: 13px; color: var(--mj-text-primary);\n flex-shrink: 0;\n }\n .shelf-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n .shelf-chips[_ngcontent-%COMP%] {\n flex: 1; min-width: 0;\n display: flex; gap: 6px; overflow-x: auto; padding: 2px 0;\n }\n .shelf-chip[_ngcontent-%COMP%] {\n display: inline-flex; align-items: center; gap: 6px;\n padding: 4px 6px 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n font-size: 12px; color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n .shelf-chip-name[_ngcontent-%COMP%] { max-width: 120px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .shelf-chip-x[_ngcontent-%COMP%] {\n width: 18px; height: 18px; border: 0; background: transparent;\n color: var(--mj-text-muted); cursor: pointer; border-radius: 50%;\n display: flex; align-items: center; justify-content: center; font-size: 10px;\n }\n .shelf-chip-x[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .shelf-actions[_ngcontent-%COMP%] { display: flex; gap: 8px; flex-shrink: 0; }\n .btn-toolbar.btn-primary-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n }\n .btn-toolbar.btn-primary-toolbar[_ngcontent-%COMP%]:hover:not(:disabled) { background: var(--mj-brand-primary-hover); }\n .btn-toolbar[_ngcontent-%COMP%]:disabled { opacity: 0.5; cursor: not-allowed; }"] });
|
|
2688
2746
|
}
|
|
2689
2747
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionsFullViewComponent, [{
|
|
2690
2748
|
type: Component,
|
|
@@ -3165,8 +3223,10 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
3165
3223
|
[ngClass]="item.type === 'folder' ? 'fa-folder' : item.icon"></i>
|
|
3166
3224
|
<span>{{ item.name }}</span>
|
|
3167
3225
|
@if (item.isShared) {
|
|
3168
|
-
<
|
|
3169
|
-
|
|
3226
|
+
<span class="shared-indicator" title="Shared">
|
|
3227
|
+
<i class="fas fa-users"></i>
|
|
3228
|
+
Shared
|
|
3229
|
+
</span>
|
|
3170
3230
|
}
|
|
3171
3231
|
</div>
|
|
3172
3232
|
</td>
|
|
@@ -3380,7 +3440,7 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
3380
3440
|
(saved)="onPermissionsChanged()"
|
|
3381
3441
|
(cancelled)="onShareModalCancelled()">
|
|
3382
3442
|
</mj-collection-share-modal>
|
|
3383
|
-
`, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n }\n\n /* Main container */\n .collections-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n position: relative;\n }\n\n /* Header */\n .collections-header {\n display: flex;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n gap: 16px;\n background: var(--mj-bg-surface);\n }\n\n .collections-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .breadcrumb-item i {\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .breadcrumb-link {\n color: var(--mj-text-primary);\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n font-size: 14px;\n }\n\n .breadcrumb-link:hover {\n color: var(--mj-brand-primary);\n }\n\n .breadcrumb-link.active {\n color: var(--mj-text-muted);\n cursor: default;\n }\n\n .breadcrumb-path {\n display: flex;\n align-items: center;\n gap: 6px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator {\n color: var(--mj-border-strong);\n font-size: 10px;\n }\n\n .collections-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n /* Button styles */\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 150ms ease;\n }\n\n .btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary i.fa-chevron-down {\n font-size: 10px;\n margin-left: 2px;\n }\n\n .btn-icon {\n padding: 6px 10px;\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 150ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-text-disabled);\n }\n\n .btn-icon.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .btn-icon.active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n /* Dropdown menus */\n .dropdown-container {\n position: relative;\n }\n\n .dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n min-width: 200px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 4px;\n z-index: 1000;\n }\n\n .dropdown-menu-right {\n left: auto;\n right: 0;\n }\n\n .dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 4px;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 100ms ease;\n }\n\n .dropdown-item:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n }\n\n .dropdown-item:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .dropdown-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .dropdown-item i {\n font-size: 14px;\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .dropdown-item.active i {\n color: var(--mj-brand-primary);\n }\n\n .dropdown-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n }\n\n /* Search */\n .search-container {\n position: relative;\n display: flex;\n align-items: center;\n min-width: 200px;\n }\n\n .search-container i.fa-search {\n position: absolute;\n left: 10px;\n color: var(--mj-text-disabled);\n font-size: 13px;\n pointer-events: none;\n }\n\n .search-input {\n width: 100%;\n padding: 6px 32px 6px 32px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n font-size: 13px;\n outline: none;\n transition: all 150ms ease;\n }\n\n .search-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n }\n\n .search-clear {\n position: absolute;\n right: 6px;\n padding: 4px;\n background: transparent;\n border: none;\n color: var(--mj-text-disabled);\n cursor: pointer;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .search-clear:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n /* Selection toolbar */\n .selection-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n }\n\n .selection-info {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .selection-count {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n }\n\n .selection-actions {\n display: flex;\n gap: 8px;\n }\n\n .btn-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .btn-toolbar:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-text-disabled);\n }\n\n .btn-toolbar.btn-danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n }\n\n .btn-toolbar.btn-danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n }\n\n /* Content area */\n .collections-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n }\n\n /* Loading and empty states */\n .loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 0;\n color: var(--mj-text-disabled);\n text-align: center;\n padding: 24px;\n }\n\n .collections-content mj-empty-state {\n flex: 1;\n min-height: 0;\n }\n\n .empty-collection-hint {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-muted);\n }\n\n /* Grid view */\n .unified-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 16px;\n padding: 4px;\n flex-shrink: 0;\n }\n\n .grid-item {\n display: flex;\n flex-direction: column;\n padding: 12px;\n background: var(--mj-bg-surface);\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: all 150ms ease;\n position: relative;\n user-select: none;\n }\n\n .grid-item:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n }\n\n .grid-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .grid-item.active {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n box-shadow: 0 0 0 1px var(--mj-status-warning);\n }\n\n .grid-item.active:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 25%, var(--mj-bg-surface));\n }\n\n /* Select mode styling for grid */\n .unified-grid.select-mode .grid-item {\n cursor: pointer;\n }\n\n .unified-grid.select-mode .grid-item:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n }\n\n .item-checkbox {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 10;\n }\n\n .item-checkbox i {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: color 150ms ease;\n }\n\n .grid-item.selected .item-checkbox i,\n .item-checkbox:hover i {\n color: var(--mj-brand-primary);\n }\n\n .grid-item-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n\n .grid-icon {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n position: relative;\n }\n\n .grid-icon.folder-icon {\n background: var(--mj-brand-primary);\n }\n\n .grid-icon.folder-icon i {\n font-size: 36px;\n color: var(--mj-text-inverse);\n }\n\n .grid-icon.artifact-icon {\n background: var(--mj-bg-surface-sunken);\n }\n\n .grid-icon.artifact-icon i {\n font-size: 32px;\n color: var(--mj-text-muted);\n }\n\n .shared-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n width: 20px;\n height: 20px;\n background: var(--mj-status-success);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px solid var(--mj-bg-surface);\n }\n\n .shared-badge i {\n font-size: 10px;\n color: var(--mj-text-inverse);\n }\n\n .grid-info {\n width: 100%;\n text-align: center;\n }\n\n .grid-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n line-height: 1.3;\n margin-bottom: 4px;\n /* Allow wrapping to 2 lines max */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n word-break: break-word;\n }\n\n .grid-description {\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.3;\n margin-bottom: 4px;\n /* Allow wrapping to 2 lines max */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n word-break: break-word;\n }\n\n .grid-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n }\n\n .grid-owner {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n }\n\n .grid-owner i {\n font-size: 10px;\n margin-right: 3px;\n }\n\n .version-badge {\n display: inline-block;\n padding: 2px 6px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n font-family: monospace;\n margin-right: 4px;\n }\n\n .artifact-type-badge {\n display: inline-block;\n padding: 2px 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n text-transform: uppercase;\n }\n\n /* List view */\n .unified-list {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n flex-shrink: 0;\n }\n\n .list-table {\n width: 100%;\n border-collapse: collapse;\n }\n\n .list-table thead {\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .list-table th {\n padding: 10px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .list-table th.sortable {\n cursor: pointer;\n user-select: none;\n transition: color 150ms ease;\n }\n\n .list-table th.sortable:hover {\n color: var(--mj-brand-primary);\n }\n\n .list-table th.sortable span {\n display: inline-block;\n margin-right: 6px;\n }\n\n .list-table th.sortable i {\n font-size: 10px;\n opacity: 0.5;\n }\n\n .list-table th.sortable:hover i {\n opacity: 1;\n }\n\n .list-table tbody tr {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background 150ms ease;\n cursor: pointer;\n user-select: none;\n }\n\n .list-table tbody tr:last-child {\n border-bottom: none;\n }\n\n .list-table tbody tr:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .list-table tbody tr.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .list-table tbody tr.active {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-warning);\n }\n\n .list-table tbody tr.active:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 25%, var(--mj-bg-surface));\n }\n\n .list-table td {\n padding: 12px 16px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .col-checkbox {\n width: 40px;\n text-align: center;\n }\n\n .col-checkbox i {\n font-size: 16px;\n color: var(--mj-text-disabled);\n cursor: pointer;\n transition: color 150ms ease;\n }\n\n .col-checkbox i:hover,\n .list-table tbody tr.selected .col-checkbox i {\n color: var(--mj-brand-primary);\n }\n\n .col-name {\n min-width: 300px;\n }\n\n .list-name-cell {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .list-name-cell i {\n font-size: 16px;\n color: var(--mj-text-muted);\n width: 20px;\n text-align: center;\n }\n\n .list-name-cell .fa-folder {\n color: var(--mj-brand-primary);\n }\n\n .shared-indicator {\n font-size: 12px;\n color: var(--mj-status-success);\n margin-left: auto;\n }\n\n .col-type {\n width: 150px;\n }\n\n .col-modified {\n width: 180px;\n }\n\n .col-owner {\n width: 150px;\n }\n\n /* Pagination */\n .pagination-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n\n .pagination-info {\n white-space: nowrap;\n }\n\n .pagination-controls {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .pagination-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 12px;\n }\n\n .pagination-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n }\n\n .pagination-btn:disabled {\n opacity: 0.35;\n cursor: default;\n }\n\n .pagination-page-info {\n padding: 0 8px;\n white-space: nowrap;\n font-weight: 500;\n }\n\n /* Toolbar separator and action group */\n .toolbar-separator {\n width: 1px;\n height: 24px;\n background: var(--mj-border-strong);\n margin: 0 4px;\n }\n\n .toolbar-actions-group {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .btn-icon-danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n }\n\n .btn-icon-danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: var(--mj-status-error);\n }\n\n /* Context menu */\n .context-menu-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1999;\n }\n\n .context-menu {\n position: fixed;\n min-width: 180px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);\n padding: 4px;\n z-index: 2000;\n }\n\n .context-menu-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 4px;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 100ms ease;\n }\n\n .context-menu-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .context-menu-item i {\n font-size: 14px;\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .context-menu-danger {\n color: var(--mj-status-error);\n }\n\n .context-menu-danger i {\n color: var(--mj-status-error);\n }\n\n .context-menu-danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n }\n\n .context-menu-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n }\n .submenu-arrow {\n margin-left: auto;\n font-size: 10px;\n opacity: 0.6;\n }\n .move-target-list {\n max-height: 240px;\n overflow-y: auto;\n }\n .context-menu-note {\n padding: 8px 14px;\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n /* ===== Body: navigator pane + content (#6) ===== */\n .collections-body {\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 0;\n overflow: hidden;\n }\n .collections-navigator {\n width: 240px;\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n }\n .nav-header {\n padding: 12px 14px 8px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n }\n .nav-list { display: flex; flex-direction: column; padding: 0 6px 12px; gap: 1px; }\n .nav-row {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 10px;\n border: 1px solid transparent;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n transition: background 0.12s ease;\n }\n .nav-row:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .nav-row.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n }\n .nav-row.drag-over {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n border-color: var(--mj-brand-primary);\n }\n .nav-row i { font-size: 13px; width: 16px; flex-shrink: 0; }\n .nav-row-name { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .nav-toggle.active { color: var(--mj-brand-primary); }\n\n /* ===== Drag-and-drop visuals (#1/#2) ===== */\n .grid-item.dragging, .list-item.dragging { opacity: 0.4; }\n .grid-item.drag-over {\n border-color: var(--mj-brand-primary) !important;\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface)) !important;\n }\n .list-item.drag-over td {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n box-shadow: inset 0 0 0 1px var(--mj-brand-primary);\n }\n .breadcrumb-item.drag-over, .breadcrumb-link.drag-over {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n outline: 1px solid var(--mj-brand-primary);\n }\n\n /* Hover-reveal checkboxes (frictionless selection #4) */\n .item-checkbox { opacity: 0; transition: opacity 150ms ease; }\n .grid-item:hover .item-checkbox,\n .grid-item.selected .item-checkbox,\n .unified-grid.select-mode .item-checkbox { opacity: 1; }\n .list-item .col-checkbox i { opacity: 0; transition: opacity 150ms ease; }\n .list-item:hover .col-checkbox i,\n .list-item.selected .col-checkbox i,\n .unified-list.select-mode .col-checkbox i { opacity: 1; }\n .list-item.selected .col-checkbox i { color: var(--mj-brand-primary); }\n\n /* ===== Bulk \"Move to\u2026\" popover (#3) ===== */\n .bulk-move-backdrop {\n position: fixed; inset: 0; z-index: 1000;\n }\n .bulk-move-menu {\n max-height: 320px;\n overflow-y: auto;\n z-index: 1001;\n }\n .dropdown-note { padding: 10px 14px; font-size: 12px; color: var(--mj-text-muted); }\n\n /* ===== Staging shelf (#5) ===== */\n .staging-shelf {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 10px 16px;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n box-shadow: 0 -2px 8px color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n }\n .shelf-info {\n display: flex; align-items: center; gap: 8px;\n font-weight: 600; font-size: 13px; color: var(--mj-text-primary);\n flex-shrink: 0;\n }\n .shelf-info i { color: var(--mj-brand-primary); }\n .shelf-chips {\n flex: 1; min-width: 0;\n display: flex; gap: 6px; overflow-x: auto; padding: 2px 0;\n }\n .shelf-chip {\n display: inline-flex; align-items: center; gap: 6px;\n padding: 4px 6px 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n font-size: 12px; color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n .shelf-chip-name { max-width: 120px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .shelf-chip-x {\n width: 18px; height: 18px; border: 0; background: transparent;\n color: var(--mj-text-muted); cursor: pointer; border-radius: 50%;\n display: flex; align-items: center; justify-content: center; font-size: 10px;\n }\n .shelf-chip-x:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .shelf-actions { display: flex; gap: 8px; flex-shrink: 0; }\n .btn-toolbar.btn-primary-toolbar {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n }\n .btn-toolbar.btn-primary-toolbar:hover:not(:disabled) { background: var(--mj-brand-primary-hover); }\n .btn-toolbar:disabled { opacity: 0.5; cursor: not-allowed; }\n "] }]
|
|
3443
|
+
`, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n }\n\n /* Main container */\n .collections-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n position: relative;\n }\n\n /* Header */\n .collections-header {\n display: flex;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n gap: 16px;\n background: var(--mj-bg-surface);\n }\n\n .collections-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 1;\n min-width: 0;\n }\n\n .breadcrumb-item {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .breadcrumb-item i {\n color: var(--mj-text-muted);\n font-size: 14px;\n }\n\n .breadcrumb-link {\n color: var(--mj-text-primary);\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n white-space: nowrap;\n transition: color 150ms ease;\n font-size: 14px;\n }\n\n .breadcrumb-link:hover {\n color: var(--mj-brand-primary);\n }\n\n .breadcrumb-link.active {\n color: var(--mj-text-muted);\n cursor: default;\n }\n\n .breadcrumb-path {\n display: flex;\n align-items: center;\n gap: 6px;\n overflow-x: auto;\n }\n\n .breadcrumb-separator {\n color: var(--mj-border-strong);\n font-size: 10px;\n }\n\n .collections-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n /* Button styles */\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-inverse);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 150ms ease;\n }\n\n .btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary i.fa-chevron-down {\n font-size: 10px;\n margin-left: 2px;\n }\n\n .btn-icon {\n padding: 6px 10px;\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 150ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-text-disabled);\n }\n\n .btn-icon.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .btn-icon.active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n /* Dropdown menus */\n .dropdown-container {\n position: relative;\n }\n\n .dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n min-width: 200px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 4px;\n z-index: 1000;\n }\n\n .dropdown-menu-right {\n left: auto;\n right: 0;\n }\n\n .dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 4px;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 100ms ease;\n }\n\n .dropdown-item:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n }\n\n .dropdown-item:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .dropdown-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .dropdown-item i {\n font-size: 14px;\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .dropdown-item.active i {\n color: var(--mj-brand-primary);\n }\n\n .dropdown-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n }\n\n /* Search */\n .search-container {\n position: relative;\n display: flex;\n align-items: center;\n min-width: 200px;\n }\n\n .search-container i.fa-search {\n position: absolute;\n left: 10px;\n color: var(--mj-text-disabled);\n font-size: 13px;\n pointer-events: none;\n }\n\n .search-input {\n width: 100%;\n padding: 6px 32px 6px 32px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n font-size: 13px;\n outline: none;\n transition: all 150ms ease;\n }\n\n .search-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n }\n\n .search-clear {\n position: absolute;\n right: 6px;\n padding: 4px;\n background: transparent;\n border: none;\n color: var(--mj-text-disabled);\n cursor: pointer;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .search-clear:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n /* Selection toolbar */\n .selection-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 20px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n }\n\n .selection-info {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .selection-count {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n }\n\n .selection-actions {\n display: flex;\n gap: 8px;\n }\n\n .btn-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .btn-toolbar:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-text-disabled);\n }\n\n .btn-toolbar.btn-danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n }\n\n .btn-toolbar.btn-danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n }\n\n /* Content area */\n .collections-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n }\n\n /* Loading and empty states */\n .loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 0;\n color: var(--mj-text-disabled);\n text-align: center;\n padding: 24px;\n }\n\n .collections-content mj-empty-state {\n flex: 1;\n min-height: 0;\n }\n\n .empty-collection-hint {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-muted);\n }\n\n /* Grid view */\n .unified-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 16px;\n padding: 4px;\n flex-shrink: 0;\n }\n\n .grid-item {\n display: flex;\n flex-direction: column;\n padding: 12px;\n background: var(--mj-bg-surface);\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: all 150ms ease;\n position: relative;\n user-select: none;\n }\n\n .grid-item:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n }\n\n .grid-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n }\n\n .grid-item.active {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-warning);\n box-shadow: 0 0 0 1px var(--mj-status-warning);\n }\n\n .grid-item.active:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 25%, var(--mj-bg-surface));\n }\n\n /* Select mode styling for grid */\n .unified-grid.select-mode .grid-item {\n cursor: pointer;\n }\n\n .unified-grid.select-mode .grid-item:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n }\n\n .item-checkbox {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 10;\n }\n\n .item-checkbox i {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: color 150ms ease;\n }\n\n .grid-item.selected .item-checkbox i,\n .item-checkbox:hover i {\n color: var(--mj-brand-primary);\n }\n\n .grid-item-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n\n .grid-icon {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n position: relative;\n }\n\n .grid-icon.folder-icon {\n background: var(--mj-brand-primary);\n }\n\n /* Direct child only \u2014 the nested .shared-badge icon must keep its own sizing */\n .grid-icon.folder-icon > i {\n font-size: 36px;\n color: var(--mj-text-inverse);\n }\n\n .grid-icon.artifact-icon {\n background: var(--mj-bg-surface-sunken);\n }\n\n .grid-icon.artifact-icon i {\n font-size: 32px;\n color: var(--mj-text-muted);\n }\n\n .shared-badge {\n position: absolute;\n top: -6px;\n right: -6px;\n width: 22px;\n height: 22px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n }\n\n .shared-badge i {\n font-size: 10px;\n color: var(--mj-brand-primary);\n }\n\n .grid-info {\n width: 100%;\n text-align: center;\n }\n\n .grid-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n line-height: 1.3;\n margin-bottom: 4px;\n /* Allow wrapping to 2 lines max */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n word-break: break-word;\n }\n\n .grid-description {\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.3;\n margin-bottom: 4px;\n /* Allow wrapping to 2 lines max */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n word-break: break-word;\n }\n\n .grid-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n }\n\n .grid-owner {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n max-width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .grid-owner i {\n font-size: 10px;\n margin-right: 3px;\n }\n\n .version-badge {\n display: inline-block;\n padding: 2px 6px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n font-family: monospace;\n margin-right: 4px;\n }\n\n .artifact-type-badge {\n display: inline-block;\n padding: 2px 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n text-transform: uppercase;\n }\n\n /* List view */\n .unified-list {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n flex-shrink: 0;\n }\n\n .list-table {\n width: 100%;\n border-collapse: collapse;\n }\n\n .list-table thead {\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .list-table th {\n padding: 10px 16px;\n text-align: left;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .list-table th.sortable {\n cursor: pointer;\n user-select: none;\n transition: color 150ms ease;\n }\n\n .list-table th.sortable:hover {\n color: var(--mj-brand-primary);\n }\n\n .list-table th.sortable span {\n display: inline-block;\n margin-right: 6px;\n }\n\n .list-table th.sortable i {\n font-size: 10px;\n opacity: 0.5;\n }\n\n .list-table th.sortable:hover i {\n opacity: 1;\n }\n\n .list-table tbody tr {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background 150ms ease;\n cursor: pointer;\n user-select: none;\n }\n\n .list-table tbody tr:last-child {\n border-bottom: none;\n }\n\n .list-table tbody tr:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .list-table tbody tr.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .list-table tbody tr.active {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-warning);\n }\n\n .list-table tbody tr.active:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 25%, var(--mj-bg-surface));\n }\n\n .list-table td {\n padding: 12px 16px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .col-checkbox {\n width: 40px;\n text-align: center;\n }\n\n .col-checkbox i {\n font-size: 16px;\n color: var(--mj-text-disabled);\n cursor: pointer;\n transition: color 150ms ease;\n }\n\n .col-checkbox i:hover,\n .list-table tbody tr.selected .col-checkbox i {\n color: var(--mj-brand-primary);\n }\n\n .col-name {\n min-width: 300px;\n }\n\n .list-name-cell {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .list-name-cell i {\n font-size: 16px;\n color: var(--mj-text-muted);\n width: 20px;\n text-align: center;\n }\n\n .list-name-cell .fa-folder {\n color: var(--mj-brand-primary);\n }\n\n .shared-indicator {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 10px;\n font-weight: 600;\n flex-shrink: 0;\n }\n\n /* Beat the generic .list-name-cell i sizing for the chip's icon */\n .list-name-cell .shared-indicator i {\n font-size: 10px;\n color: inherit;\n width: auto;\n }\n\n .col-type {\n width: 150px;\n }\n\n .col-modified {\n width: 180px;\n }\n\n .col-owner {\n width: 150px;\n }\n\n /* Pagination */\n .pagination-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n\n .pagination-info {\n white-space: nowrap;\n }\n\n .pagination-controls {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .pagination-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 12px;\n }\n\n .pagination-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n }\n\n .pagination-btn:disabled {\n opacity: 0.35;\n cursor: default;\n }\n\n .pagination-page-info {\n padding: 0 8px;\n white-space: nowrap;\n font-weight: 500;\n }\n\n /* Toolbar separator and action group */\n .toolbar-separator {\n width: 1px;\n height: 24px;\n background: var(--mj-border-strong);\n margin: 0 4px;\n }\n\n .toolbar-actions-group {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .btn-icon-danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n }\n\n .btn-icon-danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border-color: var(--mj-status-error);\n }\n\n /* Context menu */\n .context-menu-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1999;\n }\n\n .context-menu {\n position: fixed;\n min-width: 180px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);\n padding: 4px;\n z-index: 2000;\n }\n\n .context-menu-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 8px 12px;\n background: transparent;\n border: none;\n border-radius: 4px;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 100ms ease;\n }\n\n .context-menu-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .context-menu-item i {\n font-size: 14px;\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .context-menu-danger {\n color: var(--mj-status-error);\n }\n\n .context-menu-danger i {\n color: var(--mj-status-error);\n }\n\n .context-menu-danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n }\n\n .context-menu-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n }\n .submenu-arrow {\n margin-left: auto;\n font-size: 10px;\n opacity: 0.6;\n }\n .move-target-list {\n max-height: 240px;\n overflow-y: auto;\n }\n .context-menu-note {\n padding: 8px 14px;\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n /* ===== Body: navigator pane + content (#6) ===== */\n .collections-body {\n flex: 1;\n display: flex;\n flex-direction: row;\n min-height: 0;\n overflow: hidden;\n }\n .collections-navigator {\n width: 240px;\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n }\n .nav-header {\n padding: 12px 14px 8px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--mj-text-muted);\n }\n .nav-list { display: flex; flex-direction: column; padding: 0 6px 12px; gap: 1px; }\n .nav-row {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 10px;\n border: 1px solid transparent;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n transition: background 0.12s ease;\n }\n .nav-row:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .nav-row.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n }\n .nav-row.drag-over {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n border-color: var(--mj-brand-primary);\n }\n .nav-row i { font-size: 13px; width: 16px; flex-shrink: 0; }\n .nav-row-name { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .nav-toggle.active { color: var(--mj-brand-primary); }\n\n /* ===== Drag-and-drop visuals (#1/#2) ===== */\n .grid-item.dragging, .list-item.dragging { opacity: 0.4; }\n .grid-item.drag-over {\n border-color: var(--mj-brand-primary) !important;\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface)) !important;\n }\n .list-item.drag-over td {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n box-shadow: inset 0 0 0 1px var(--mj-brand-primary);\n }\n .breadcrumb-item.drag-over, .breadcrumb-link.drag-over {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n outline: 1px solid var(--mj-brand-primary);\n }\n\n /* Hover-reveal checkboxes (frictionless selection #4) */\n .item-checkbox { opacity: 0; transition: opacity 150ms ease; }\n .grid-item:hover .item-checkbox,\n .grid-item.selected .item-checkbox,\n .unified-grid.select-mode .item-checkbox { opacity: 1; }\n .list-item .col-checkbox i { opacity: 0; transition: opacity 150ms ease; }\n .list-item:hover .col-checkbox i,\n .list-item.selected .col-checkbox i,\n .unified-list.select-mode .col-checkbox i { opacity: 1; }\n .list-item.selected .col-checkbox i { color: var(--mj-brand-primary); }\n\n /* ===== Bulk \"Move to\u2026\" popover (#3) ===== */\n .bulk-move-backdrop {\n position: fixed; inset: 0; z-index: 1000;\n }\n .bulk-move-menu {\n max-height: 320px;\n overflow-y: auto;\n z-index: 1001;\n }\n .dropdown-note { padding: 10px 14px; font-size: 12px; color: var(--mj-text-muted); }\n\n /* ===== Staging shelf (#5) ===== */\n .staging-shelf {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 10px 16px;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n box-shadow: 0 -2px 8px color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n }\n .shelf-info {\n display: flex; align-items: center; gap: 8px;\n font-weight: 600; font-size: 13px; color: var(--mj-text-primary);\n flex-shrink: 0;\n }\n .shelf-info i { color: var(--mj-brand-primary); }\n .shelf-chips {\n flex: 1; min-width: 0;\n display: flex; gap: 6px; overflow-x: auto; padding: 2px 0;\n }\n .shelf-chip {\n display: inline-flex; align-items: center; gap: 6px;\n padding: 4px 6px 4px 10px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n font-size: 12px; color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n .shelf-chip-name { max-width: 120px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .shelf-chip-x {\n width: 18px; height: 18px; border: 0; background: transparent;\n color: var(--mj-text-muted); cursor: pointer; border-radius: 50%;\n display: flex; align-items: center; justify-content: center; font-size: 10px;\n }\n .shelf-chip-x:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n .shelf-actions { display: flex; gap: 8px; flex-shrink: 0; }\n .btn-toolbar.btn-primary-toolbar {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n }\n .btn-toolbar.btn-primary-toolbar:hover:not(:disabled) { background: var(--mj-brand-primary-hover); }\n .btn-toolbar:disabled { opacity: 0.5; cursor: not-allowed; }\n "] }]
|
|
3384
3444
|
}], () => [{ type: i1.DialogService }, { type: i2.ArtifactStateService }, { type: i3.CollectionStateService }, { type: i4.CollectionPermissionService }, { type: i5.ArtifactIconService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
|
|
3385
3445
|
type: Input
|
|
3386
3446
|
}], currentUser: [{
|
|
@@ -3393,5 +3453,5 @@ export class CollectionsFullViewComponent extends BaseAngularComponent {
|
|
|
3393
3453
|
type: HostListener,
|
|
3394
3454
|
args: ['document:keydown.escape']
|
|
3395
3455
|
}] }); })();
|
|
3396
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollectionsFullViewComponent, { className: "CollectionsFullViewComponent", filePath: "src/lib/components/collection/collections-full-view.component.ts", lineNumber:
|
|
3456
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollectionsFullViewComponent, { className: "CollectionsFullViewComponent", filePath: "src/lib/components/collection/collections-full-view.component.ts", lineNumber: 1734 }); })();
|
|
3397
3457
|
//# sourceMappingURL=collections-full-view.component.js.map
|