@memberjunction/ng-dashboards 5.4.0 → 5.5.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/dist/AI/components/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +5 -4
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +3 -3
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +8 -7
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +4 -4
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +3 -2
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +2 -2
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +4 -3
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +3 -3
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +3 -2
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +2 -2
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +3 -2
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +3 -2
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +2 -2
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +6 -0
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +19 -6
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -0
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +13 -4
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +13 -9
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +11 -11
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +13 -9
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +11 -11
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +4 -3
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +4 -3
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +6 -6
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +4 -1
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +9 -8
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-application.js +2 -2
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +3 -3
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts +1 -0
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +17 -14
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +1 -0
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +15 -12
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +3 -2
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +8 -7
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +22 -22
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +2 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +14 -10
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +2 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +1 -0
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +22 -18
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +1 -0
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +14 -10
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +6 -6
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +2 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/package.json +38 -38
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lists-browse-resource.component.js","sourceRoot":"","sources":["../../../src/Lists/components/lists-browse-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewEncapsulation, ChangeDetectorRef, OnDestroy, ElementRef, HostListener } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJListCategoryEntity } from '@memberjunction/core-entities';\nimport { MJListEntity, MJListDetailEntity } from '@memberjunction/core-entities';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { Subject } from 'rxjs';\nimport { TabService } from '@memberjunction/ng-base-application';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ListSharingService, ListSharingSummary, ListShareDialogConfig, ListShareDialogResult } from '@memberjunction/ng-list-management';\ninterface BrowseListItem {\n list: MJListEntity;\n itemCount: number;\n entityName: string;\n ownerName: string;\n isOwner: boolean;\n sharingInfo?: ListSharingSummary;\n}\n\ninterface CategoryNode {\n category: MJListCategoryEntity | null;\n lists: BrowseListItem[];\n children: CategoryNode[];\n isExpanded: boolean;\n}\n\ntype ViewMode = 'table' | 'card' | 'hierarchy';\n\n@RegisterClass(BaseResourceComponent, 'ListsBrowseResource')\n@Component({\n standalone: false,\n selector: 'mj-lists-browse-resource',\n template: `\n <div class=\"lists-browse-container\">\n <!-- Header -->\n <div class=\"browse-header\">\n <div class=\"header-row\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-list-check\"></i>\n <h2>Lists</h2>\n </div>\n <button class=\"btn-create\" (click)=\"createNewList()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New List</span>\n </button>\n </div>\n \n <div class=\"header-actions\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search lists...\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\" />\n @if (searchTerm) {\n <button class=\"clear-search\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n \n <div class=\"filter-group\">\n <select\n [(ngModel)]=\"selectedOwner\"\n (ngModelChange)=\"onOwnerFilterChange($event)\"\n class=\"filter-select\"\n title=\"Filter by owner\">\n @for (opt of ownerOptions; track opt) {\n <option [value]=\"opt.value\">{{opt.name}}</option>\n }\n </select>\n </div>\n \n <div class=\"filter-group\">\n <select\n [(ngModel)]=\"selectedEntity\"\n (ngModelChange)=\"onEntityFilterChange($event)\"\n class=\"filter-select\"\n title=\"Filter by entity\">\n @for (opt of entityOptions; track opt) {\n <option [value]=\"opt.value\">{{opt.name}}</option>\n }\n </select>\n </div>\n \n <div class=\"view-toggle-group\">\n <button\n class=\"view-toggle\"\n [class.active]=\"viewMode === 'table'\"\n (click)=\"setViewMode('table')\"\n title=\"Table view\">\n <i class=\"fa-solid fa-table-list\"></i>\n </button>\n <button\n class=\"view-toggle\"\n [class.active]=\"viewMode === 'card'\"\n (click)=\"setViewMode('card')\"\n title=\"Card view\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button\n class=\"view-toggle\"\n [class.active]=\"viewMode === 'hierarchy'\"\n (click)=\"setViewMode('hierarchy')\"\n title=\"Category view\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n </button>\n </div>\n </div>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading lists...\" size=\"medium\"></mj-loading>\n </div>\n }\n \n <!-- Empty State - No Lists -->\n @if (!isLoading && allLists.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-state-icon-wrapper\">\n <div class=\"icon-bg\"></div>\n <i class=\"fa-solid fa-list-check\"></i>\n </div>\n <h3>No Lists Yet</h3>\n <p>Lists help you organize and track groups of records across your data.</p>\n <div class=\"empty-state-features\">\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Group records from any entity</span>\n </div>\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Organize with categories</span>\n </div>\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Quick access from any view</span>\n </div>\n </div>\n <button class=\"btn-create-large\" (click)=\"createNewList()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Your First List\n </button>\n </div>\n }\n \n <!-- Empty State - No Results -->\n @if (!isLoading && allLists.length > 0 && filteredLists.length === 0) {\n <div class=\"empty-state search-empty\">\n <div class=\"empty-state-icon-wrapper search\">\n <i class=\"fa-solid fa-filter-circle-xmark\"></i>\n </div>\n <h3>No Results Found</h3>\n <p>No lists match your current filters.</p>\n <p class=\"empty-hint\">Try adjusting your search or filters.</p>\n <button class=\"btn-clear\" (click)=\"clearFilters()\">Clear All Filters</button>\n </div>\n }\n \n <!-- Results Content -->\n @if (!isLoading && filteredLists.length > 0) {\n <div class=\"browse-content\">\n <div class=\"results-header\">\n <span class=\"result-count\">{{filteredLists.length}} list{{filteredLists.length !== 1 ? 's' : ''}}</span>\n <div class=\"sort-options\">\n <label>Sort:</label>\n <select\n [(ngModel)]=\"selectedSort\"\n (ngModelChange)=\"onSortChange($event)\"\n class=\"filter-select sort-select\">\n @for (opt of sortOptions; track opt) {\n <option [value]=\"opt.value\">{{opt.name}}</option>\n }\n </select>\n </div>\n </div>\n <!-- Table View -->\n @if (viewMode === 'table') {\n <div class=\"lists-table\">\n <table role=\"grid\" aria-label=\"Lists table\">\n <thead>\n <tr>\n <th class=\"col-name\" scope=\"col\">Name</th>\n <th class=\"col-entity\" scope=\"col\">Entity</th>\n <th class=\"col-items\" scope=\"col\">Items</th>\n <th class=\"col-sharing\" scope=\"col\">Shared</th>\n <th class=\"col-owner\" scope=\"col\">Owner</th>\n <th class=\"col-updated\" scope=\"col\">Updated</th>\n <th class=\"col-actions\" scope=\"col\"><span class=\"sr-only\">Actions</span></th>\n </tr>\n </thead>\n <tbody>\n @for (item of filteredLists; track item) {\n <tr\n (click)=\"openList(item)\"\n (keydown.enter)=\"openList(item)\"\n class=\"list-row\"\n tabindex=\"0\"\n role=\"row\">\n <td class=\"col-name\" role=\"gridcell\">\n <div class=\"name-cell\">\n <div class=\"list-icon\" [style.background-color]=\"getEntityColor(item.entityName)\" aria-hidden=\"true\">\n <i [class]=\"getEntityIcon(item.entityName)\"></i>\n </div>\n <div class=\"name-content\">\n <span class=\"list-name\">{{item.list.Name}}</span>\n @if (item.list.Description) {\n <span class=\"list-desc\">{{item.list.Description}}</span>\n }\n </div>\n </div>\n </td>\n <td class=\"col-entity\" role=\"gridcell\">\n <span class=\"entity-badge\">{{item.entityName}}</span>\n </td>\n <td class=\"col-items\" role=\"gridcell\">{{item.itemCount}}</td>\n <td class=\"col-sharing\" role=\"gridcell\">\n @if (item.sharingInfo; as sharing) {\n @if (sharing.totalShares > 0) {\n <span class=\"sharing-indicator\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span class=\"share-count\">{{sharing.totalShares}}</span>\n </span>\n }\n @if (sharing.totalShares === 0) {\n <span class=\"sharing-private\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n }\n @if (!item.sharingInfo) {\n <span class=\"sharing-private\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n </td>\n <td class=\"col-owner\" role=\"gridcell\">\n <span class=\"owner-name\" [class.is-me]=\"item.isOwner\">\n {{item.isOwner ? 'You' : item.ownerName}}\n </span>\n </td>\n <td class=\"col-updated\" role=\"gridcell\">{{formatDate(item.list.__mj_UpdatedAt)}}</td>\n <td class=\"col-actions\" role=\"gridcell\">\n @if (item.isOwner) {\n <button\n class=\"action-btn\"\n (click)=\"openListMenu($event, item)\"\n title=\"More options\">\n <i class=\"fa-solid fa-ellipsis-v\" aria-hidden=\"true\"></i>\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Card View -->\n @if (viewMode === 'card') {\n <div class=\"lists-grid\" role=\"list\" aria-label=\"Lists\">\n @for (item of filteredLists; track item) {\n <div\n class=\"list-card\"\n (click)=\"openList(item)\"\n (keydown.enter)=\"openList(item)\"\n tabindex=\"0\"\n role=\"listitem\">\n <div class=\"card-header\">\n <div class=\"card-icon\" [style.background-color]=\"getEntityColor(item.entityName)\" aria-hidden=\"true\">\n <i [class]=\"getEntityIcon(item.entityName)\"></i>\n </div>\n @if (item.isOwner) {\n <div class=\"card-menu\">\n <button class=\"menu-btn\" (click)=\"openListMenu($event, item)\">\n <i class=\"fa-solid fa-ellipsis-v\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n <div class=\"card-body\">\n <h3 class=\"card-title\">{{item.list.Name}}</h3>\n @if (item.list.Description) {\n <p class=\"card-description\">{{item.list.Description}}</p>\n }\n <div class=\"card-meta\">\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-database\"></i>\n {{item.entityName}}\n </span>\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-hashtag\"></i>\n {{item.itemCount}} item{{item.itemCount !== 1 ? 's' : ''}}\n </span>\n </div>\n </div>\n <div class=\"card-footer\">\n <span class=\"owner-tag\" [class.is-me]=\"item.isOwner\">\n <i class=\"fa-solid fa-user\"></i>\n {{item.isOwner ? 'You' : item.ownerName}}\n </span>\n <div class=\"card-footer-right\">\n @if (item.sharingInfo; as sharing) {\n @if (sharing.totalShares > 0) {\n <span class=\"sharing-badge\" [title]=\"'Shared with ' + sharing.totalShares + ' user(s)/role(s)'\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n </span>\n }\n }\n <span class=\"date-info\">{{formatDate(item.list.__mj_UpdatedAt)}}</span>\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- Hierarchy View -->\n @if (viewMode === 'hierarchy') {\n <div class=\"category-tree\">\n @for (node of categoryTree; track node) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTemplate; context: { node: node, depth: 0 }\"></ng-container>\n }\n </div>\n }\n </div>\n }\n \n <!-- Category Node Template -->\n <ng-template #categoryNodeTemplate let-node=\"node\" let-depth=\"depth\">\n <div class=\"category-section\" [style.margin-left.px]=\"depth * 20\">\n <!-- Category Header -->\n @if (node.category) {\n <div\n class=\"category-header\"\n (click)=\"toggleCategory(node)\">\n <i [class]=\"node.isExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n <i class=\"fa-solid fa-folder\" [class.fa-folder-open]=\"node.isExpanded\"></i>\n <span class=\"category-name\">{{node.category.Name}}</span>\n <span class=\"category-count\">{{getListCountInCategory(node)}}</span>\n </div>\n }\n \n <!-- Uncategorized Header -->\n @if (!node.category && node.lists.length > 0) {\n <div\n class=\"category-header uncategorized\"\n (click)=\"toggleCategory(node)\">\n <i [class]=\"node.isExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n <i class=\"fa-solid fa-inbox\"></i>\n <span class=\"category-name\">Uncategorized</span>\n <span class=\"category-count\">{{node.lists.length}}</span>\n </div>\n }\n \n <!-- Lists in this category -->\n @if (node.isExpanded) {\n <div class=\"category-lists\" role=\"list\">\n @for (item of node.lists; track item) {\n <div\n class=\"list-row hierarchy-row\"\n (click)=\"openList(item)\"\n (keydown.enter)=\"openList(item)\"\n tabindex=\"0\"\n role=\"listitem\">\n <div class=\"list-icon\" [style.background-color]=\"getEntityColor(item.entityName)\" aria-hidden=\"true\">\n <i [class]=\"getEntityIcon(item.entityName)\"></i>\n </div>\n <div class=\"list-info\">\n <span class=\"list-name\">{{item.list.Name}}</span>\n <span class=\"list-meta\">\n {{item.entityName}} · {{item.itemCount}} items\n @if (!item.isOwner) {\n <span> · {{item.ownerName}}</span>\n }\n </span>\n </div>\n @if (item.isOwner) {\n <div class=\"list-actions\">\n <button class=\"action-btn\" (click)=\"openListMenu($event, item)\">\n <i class=\"fa-solid fa-ellipsis-v\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n \n <!-- Child categories -->\n @if (node.isExpanded) {\n @for (child of node.children; track child) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTemplate; context: { node: child, depth: depth + 1 }\"></ng-container>\n }\n }\n </div>\n </ng-template>\n \n <!-- Context Menu -->\n @if (showContextMenu) {\n <div class=\"context-menu-overlay\" (click)=\"closeContextMenu()\"></div>\n }\n @if (showContextMenu) {\n <div class=\"context-menu\" [style.top.px]=\"contextMenuY\" [style.left.px]=\"contextMenuX\">\n <button class=\"menu-item\" (click)=\"editList()\">\n <i class=\"fa-solid fa-pen\"></i>\n Edit\n </button>\n <button class=\"menu-item\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Share\n </button>\n <button class=\"menu-item\" (click)=\"duplicateList()\">\n <i class=\"fa-solid fa-copy\"></i>\n Duplicate\n </button>\n <div class=\"menu-divider\"></div>\n <button class=\"menu-item danger\" (click)=\"confirmDeleteList()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n </div>\n }\n \n <!-- Create/Edit Dialog -->\n @if (showCreateDialog) {\n <div class=\"modal-overlay\" (click)=\"closeCreateDialog()\"></div>\n }\n @if (showCreateDialog) {\n <div class=\"modal-dialog\">\n <div class=\"modal-header\">\n <h3>{{editingList ? 'Edit List' : 'Create New List'}}</h3>\n <button class=\"modal-close\" (click)=\"closeCreateDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"form-group\">\n <label>Name *</label>\n <input\n type=\"text\"\n [(ngModel)]=\"newListName\"\n placeholder=\"Enter list name\"\n class=\"form-input\" />\n </div>\n <div class=\"form-group\">\n <label>Description</label>\n <textarea\n [(ngModel)]=\"newListDescription\"\n placeholder=\"Optional description\"\n class=\"form-input\"\n rows=\"3\"></textarea>\n </div>\n @if (!editingList) {\n <div class=\"form-group\">\n <label>Entity *</label>\n <div class=\"custom-select-wrapper\">\n <input\n #entityInput\n type=\"text\"\n [(ngModel)]=\"entitySearchTerm\"\n (ngModelChange)=\"filterEntities($event)\"\n (focus)=\"openEntityDropdown(entityInput)\"\n placeholder=\"Search and select an entity\"\n class=\"form-input\" />\n </div>\n </div>\n }\n @if (editingList) {\n <div class=\"form-group\">\n <label>Entity</label>\n <input type=\"text\" [value]=\"entitySearchTerm\" class=\"form-input\" disabled />\n </div>\n }\n <div class=\"form-group\">\n <label>Category</label>\n <select [(ngModel)]=\"selectedCategoryId\" class=\"form-input\">\n <option [ngValue]=\"null\">No category</option>\n @for (cat of flatCategories; track cat) {\n <option [ngValue]=\"cat.ID\">{{cat.displayName}}</option>\n }\n </select>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn-primary\"\n (click)=\"saveList()\"\n [disabled]=\"!newListName || (!editingList && !selectedEntityId) || isSaving\">\n @if (isSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{isSaving ? 'Saving...' : (editingList ? 'Save' : 'Create')}}\n </button>\n <button class=\"btn-secondary\" (click)=\"closeCreateDialog()\" [disabled]=\"isSaving\">Cancel</button>\n </div>\n </div>\n }\n \n <!-- Delete Confirmation Dialog -->\n @if (showDeleteConfirm) {\n <div class=\"modal-overlay\" (click)=\"cancelDelete()\"></div>\n }\n @if (showDeleteConfirm) {\n <div class=\"modal-dialog confirm-dialog\">\n <div class=\"modal-header\">\n <h3>Delete List</h3>\n <button class=\"modal-close\" (click)=\"cancelDelete()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <p>Are you sure you want to delete \"<strong>{{deleteListName}}</strong>\"?</p>\n <p class=\"warning-text\">This will also remove all items in the list.</p>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn-danger\" (click)=\"deleteList()\" [disabled]=\"isDeleting\">\n @if (isDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{isDeleting ? 'Deleting...' : 'Delete'}}\n </button>\n <button class=\"btn-secondary\" (click)=\"cancelDelete()\" [disabled]=\"isDeleting\">Cancel</button>\n </div>\n </div>\n }\n \n <!-- Share Dialog -->\n @if (shareDialogConfig) {\n <mj-list-share-dialog\n [config]=\"shareDialogConfig\"\n [visible]=\"showShareDialog\"\n (complete)=\"onShareComplete($event)\"\n (cancel)=\"onShareCancel()\">\n </mj-list-share-dialog>\n }\n \n <!-- Entity Dropdown Portal -->\n @if (showEntityDropdown && !editingList) {\n <div\n class=\"entity-dropdown-portal\"\n [style.top.px]=\"entityDropdownPosition.top\"\n [style.left.px]=\"entityDropdownPosition.left\"\n [style.width.px]=\"entityDropdownPosition.width\"\n [class.dropdown-above]=\"entityDropdownPosition.openAbove\">\n <div class=\"entity-dropdown-backdrop\" (click)=\"closeEntityDropdown()\"></div>\n <div class=\"entity-dropdown-content\" [class.open-above]=\"entityDropdownPosition.openAbove\">\n @for (entity of filteredEntitiesList; track entity) {\n <div\n class=\"dropdown-item\"\n (click)=\"selectEntity(entity)\">\n {{entity.Name}}\n </div>\n }\n @if (filteredEntitiesList.length === 0) {\n <div class=\"dropdown-empty\">\n No entities found\n </div>\n }\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .lists-browse-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f5f7fa;\n overflow: hidden;\n }\n\n /* Header */\n .browse-header {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 24px;\n background: white;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n }\n\n .header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .header-title i {\n font-size: 24px;\n color: #2196F3;\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #333;\n }\n\n .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n .search-box {\n position: relative;\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 200px;\n max-width: 300px;\n }\n\n .search-box i.fa-search {\n position: absolute;\n left: 12px;\n color: #999;\n }\n\n .search-box input {\n padding: 8px 36px;\n border: 1px solid #ddd;\n border-radius: 20px;\n font-size: 14px;\n width: 100%;\n transition: border-color 0.2s, box-shadow 0.2s;\n }\n\n .search-box input:focus {\n outline: none;\n border-color: #2196F3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n\n .clear-search {\n position: absolute;\n right: 8px;\n background: none;\n border: none;\n color: #999;\n cursor: pointer;\n }\n\n .filter-group {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .filter-group label {\n font-size: 13px;\n color: #666;\n }\n\n .filter-select {\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n cursor: pointer;\n min-width: 120px;\n }\n\n .filter-select:focus {\n outline: none;\n border-color: #2196F3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n\n .sort-select {\n min-width: 140px;\n }\n\n .view-toggle-group {\n display: flex;\n border: 1px solid #ddd;\n border-radius: 6px;\n overflow: hidden;\n }\n\n .view-toggle {\n padding: 8px 12px;\n background: white;\n border: none;\n border-right: 1px solid #ddd;\n color: #666;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .view-toggle:last-child {\n border-right: none;\n }\n\n .view-toggle:hover {\n background: #f5f5f5;\n }\n\n .view-toggle.active {\n background: #2196F3;\n color: white;\n }\n\n .btn-create {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #2196F3;\n color: white;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-create:hover {\n background: #1976D2;\n }\n\n /* Loading */\n .loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n }\n\n /* Empty State */\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 48px 40px;\n text-align: center;\n max-width: 480px;\n margin: 0 auto;\n }\n\n .empty-state-icon-wrapper {\n position: relative;\n margin-bottom: 24px;\n }\n\n .empty-state-icon-wrapper .icon-bg {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 120px;\n height: 120px;\n border-radius: 50%;\n background: linear-gradient(135deg, rgba(33, 150, 243, 0.1) 0%, rgba(33, 150, 243, 0.05) 100%);\n }\n\n .empty-state-icon-wrapper > i {\n position: relative;\n font-size: 56px;\n color: #2196F3;\n z-index: 1;\n }\n\n .empty-state-icon-wrapper.search > i {\n font-size: 48px;\n color: #9e9e9e;\n }\n\n .empty-state h3 {\n margin: 0 0 12px;\n font-size: 22px;\n font-weight: 600;\n color: #333;\n }\n\n .empty-state p {\n margin: 0 0 8px;\n color: #666;\n font-size: 15px;\n line-height: 1.5;\n }\n\n .empty-state p:last-of-type {\n margin-bottom: 24px;\n }\n\n .empty-hint {\n color: #999 !important;\n font-size: 13px !important;\n }\n\n .empty-state-features {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 28px;\n text-align: left;\n }\n\n .feature-item {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 14px;\n color: #555;\n }\n\n .feature-item i {\n font-size: 14px !important;\n color: #4CAF50 !important;\n }\n\n .btn-create-large {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 28px;\n background: linear-gradient(135deg, #2196F3 0%, #1976D2 100%);\n color: white;\n border: none;\n border-radius: 8px;\n font-size: 15px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.3);\n }\n\n .btn-create-large:hover {\n background: linear-gradient(135deg, #1976D2 0%, #1565C0 100%);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(33, 150, 243, 0.4);\n }\n\n .btn-clear {\n padding: 10px 20px;\n background: #f0f0f0;\n border: none;\n border-radius: 6px;\n color: #666;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-clear:hover {\n background: #e0e0e0;\n }\n\n /* Content */\n .browse-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px 24px;\n }\n\n .results-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n }\n\n .result-count {\n font-size: 14px;\n color: #666;\n }\n\n .sort-options {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .sort-options label {\n font-size: 13px;\n color: #666;\n }\n\n /* Table View */\n .lists-table {\n background: white;\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(0,0,0,0.08);\n }\n\n .lists-table table {\n width: 100%;\n border-collapse: collapse;\n }\n\n .lists-table th {\n text-align: left;\n padding: 12px 16px;\n font-size: 12px;\n font-weight: 600;\n color: #666;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .lists-table td {\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n font-size: 14px;\n color: #333;\n }\n\n .list-row {\n cursor: pointer;\n transition: background 0.15s;\n outline: none;\n }\n\n .list-row:hover {\n background: #f5f5f5;\n }\n\n .list-row:focus {\n background: #e8f4fd;\n }\n\n .list-row:focus-visible {\n background: #e3f2fd;\n box-shadow: inset 3px 0 0 #2196F3;\n }\n\n .list-row:last-child td {\n border-bottom: none;\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n .col-name { width: 30%; }\n .col-entity { width: 15%; }\n .col-items { width: 8%; text-align: center; }\n .col-sharing { width: 8%; text-align: center; }\n .col-owner { width: 14%; }\n .col-updated { width: 15%; }\n .col-actions { width: 10%; text-align: right; }\n\n /* Sharing indicators */\n .sharing-indicator {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: #2196F3;\n font-size: 13px;\n }\n\n .sharing-indicator i {\n font-size: 14px;\n }\n\n .share-count {\n font-weight: 500;\n }\n\n .sharing-private {\n color: #999;\n font-size: 13px;\n }\n\n .sharing-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n background: #e3f2fd;\n border-radius: 50%;\n color: #2196F3;\n font-size: 11px;\n }\n\n .card-footer-right {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .name-cell {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .list-icon {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 14px;\n flex-shrink: 0;\n }\n\n .name-content {\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .list-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .list-desc {\n font-size: 12px;\n color: #999;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .entity-badge {\n display: inline-block;\n padding: 2px 8px;\n background: #e8f4fd;\n border-radius: 4px;\n font-size: 12px;\n color: #1976D2;\n }\n\n .owner-name {\n color: #666;\n }\n\n .owner-name.is-me {\n color: #2196F3;\n font-weight: 500;\n }\n\n .action-btn {\n background: none;\n border: none;\n padding: 6px 10px;\n color: #999;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s;\n }\n\n .action-btn:hover {\n background: #e0e0e0;\n color: #666;\n }\n\n /* Card View */\n .lists-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 16px;\n }\n\n .list-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.08);\n overflow: hidden;\n cursor: pointer;\n transition: transform 0.2s, box-shadow 0.2s, outline 0.1s;\n outline: 2px solid transparent;\n }\n\n .list-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.12);\n }\n\n .list-card:focus {\n outline: 2px solid #2196F3;\n outline-offset: 2px;\n }\n\n .list-card:focus:not(:focus-visible) {\n outline: none;\n }\n\n .list-card:focus-visible {\n outline: 2px solid #2196F3;\n outline-offset: 2px;\n }\n\n .card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 16px 16px 0;\n }\n\n .card-icon {\n width: 40px;\n height: 40px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 18px;\n }\n\n .menu-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n color: #999;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .menu-btn:hover {\n background: #f5f5f5;\n color: #666;\n }\n\n .card-body {\n padding: 12px 16px;\n }\n\n .card-title {\n margin: 0 0 4px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n }\n\n .card-description {\n margin: 0 0 12px;\n font-size: 13px;\n color: #666;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .card-meta {\n display: flex;\n gap: 16px;\n }\n\n .meta-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #999;\n }\n\n .card-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n border-top: 1px solid #f0f0f0;\n background: #fafafa;\n }\n\n .owner-tag {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #666;\n }\n\n .owner-tag.is-me {\n color: #2196F3;\n }\n\n .date-info {\n font-size: 12px;\n color: #999;\n }\n\n /* Hierarchy View */\n .category-tree {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .category-section {\n background: white;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .category-header:hover {\n background: #f5f5f5;\n }\n\n .category-header i:first-child {\n width: 16px;\n text-align: center;\n color: #999;\n }\n\n .category-header .fa-folder,\n .category-header .fa-folder-open {\n color: #ffc107;\n }\n\n .category-header.uncategorized .fa-inbox {\n color: #999;\n }\n\n .category-name {\n flex: 1;\n font-weight: 500;\n color: #333;\n }\n\n .category-count {\n font-size: 12px;\n color: #999;\n background: #f0f0f0;\n padding: 2px 8px;\n border-radius: 10px;\n }\n\n .category-lists {\n border-top: 1px solid #f0f0f0;\n }\n\n .hierarchy-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px 12px 40px;\n cursor: pointer;\n transition: background 0.2s;\n outline: none;\n }\n\n .hierarchy-row:hover {\n background: #f5f5f5;\n }\n\n .hierarchy-row:focus {\n background: #e3f2fd;\n }\n\n .hierarchy-row:focus-visible {\n background: #e3f2fd;\n box-shadow: inset 3px 0 0 #2196F3;\n }\n\n .list-info {\n flex: 1;\n min-width: 0;\n }\n\n .list-meta {\n font-size: 12px;\n color: #999;\n }\n\n .list-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s;\n }\n\n .hierarchy-row:hover .list-actions {\n opacity: 1;\n }\n\n /* Context Menu */\n .context-menu-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 999;\n }\n\n .context-menu {\n position: fixed;\n background: white;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0,0,0,0.15);\n min-width: 160px;\n padding: 4px 0;\n z-index: 1000;\n }\n\n .menu-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n background: none;\n border: none;\n text-align: left;\n font-size: 14px;\n color: #333;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .menu-item:hover {\n background: #f5f5f5;\n }\n\n .menu-item.danger {\n color: #d32f2f;\n }\n\n .menu-item.danger:hover {\n background: #ffebee;\n }\n\n .menu-divider {\n height: 1px;\n background: #e0e0e0;\n margin: 4px 0;\n }\n\n /* Modal Styles */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1000;\n }\n\n .modal-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: white;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);\n width: 500px;\n max-width: 90vw;\n max-height: 90vh;\n overflow: hidden;\n z-index: 1001;\n }\n\n .confirm-dialog {\n width: 400px;\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n }\n\n .modal-close {\n background: none;\n border: none;\n padding: 4px 8px;\n color: #999;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .modal-close:hover {\n background: #f0f0f0;\n color: #666;\n }\n\n .modal-body {\n padding: 20px;\n max-height: 60vh;\n overflow-y: auto;\n }\n\n .modal-body p {\n margin: 0 0 8px;\n color: #333;\n }\n\n .warning-text {\n color: #d32f2f !important;\n font-size: 13px;\n }\n\n .modal-footer {\n display: flex;\n gap: 12px;\n padding: 16px 20px;\n border-top: 1px solid #e0e0e0;\n background: #fafafa;\n }\n\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #2196F3;\n color: white;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: #1976D2;\n }\n\n .btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .btn-secondary {\n padding: 10px 20px;\n background: white;\n color: #666;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: #f5f5f5;\n }\n\n .btn-danger {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #d32f2f;\n color: white;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-danger:hover:not(:disabled) {\n background: #c62828;\n }\n\n /* Form Styles */\n .form-group {\n margin-bottom: 16px;\n }\n\n .form-group:last-child {\n margin-bottom: 0;\n }\n\n .form-group label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #666;\n }\n\n .form-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n }\n\n .form-input:focus {\n outline: none;\n border-color: #2196F3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n\n .form-input:disabled {\n background: #f5f5f5;\n color: #999;\n }\n\n textarea.form-input {\n resize: vertical;\n min-height: 80px;\n }\n\n select.form-input {\n cursor: pointer;\n }\n\n .custom-select-wrapper {\n position: relative;\n }\n\n /* Portal Dropdown */\n .entity-dropdown-portal {\n position: fixed;\n z-index: 10002;\n }\n\n .entity-dropdown-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: -1;\n }\n\n .entity-dropdown-content {\n max-height: 200px;\n overflow-y: auto;\n background: white;\n border: 1px solid #ddd;\n border-radius: 6px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n }\n\n .entity-dropdown-content.open-above {\n position: absolute;\n bottom: 0;\n }\n\n .dropdown-item {\n padding: 10px 12px;\n cursor: pointer;\n transition: background 0.15s;\n font-size: 14px;\n color: #333;\n }\n\n .dropdown-item:hover {\n background: #e3f2fd;\n }\n\n .dropdown-item:first-child {\n border-radius: 6px 6px 0 0;\n }\n\n .dropdown-item:last-child {\n border-radius: 0 0 6px 6px;\n }\n\n .dropdown-empty {\n padding: 10px 12px;\n color: #999;\n font-style: italic;\n }\n\n /* Responsive */\n @media (max-width: 768px) {\n .header-row {\n flex-direction: column;\n gap: 12px;\n align-items: stretch;\n }\n\n .btn-create {\n width: 100%;\n justify-content: center;\n }\n\n .header-actions {\n flex-direction: column;\n align-items: stretch;\n }\n\n .search-box {\n max-width: none;\n }\n\n .filter-group {\n width: 100%;\n }\n\n .filter-select {\n flex: 1;\n width: 100%;\n }\n\n .view-toggle-group {\n justify-content: center;\n }\n\n .lists-table {\n overflow-x: auto;\n }\n\n .col-entity, .col-items, .col-updated {\n display: none;\n }\n\n .lists-grid {\n grid-template-columns: 1fr;\n }\n\n .modal-dialog {\n width: 95vw;\n }\n }\n `],\n encapsulation: ViewEncapsulation.None\n})\nexport class ListsBrowseResource extends BaseResourceComponent implements OnDestroy {\n private destroy$ = new Subject<void>();\n\n isLoading = true;\n searchTerm = '';\n viewMode: ViewMode = 'card';\n selectedEntity = 'all';\n selectedOwner = 'mine';\n selectedSort = 'name';\n\n allLists: BrowseListItem[] = [];\n filteredLists: BrowseListItem[] = [];\n categories: MJListCategoryEntity[] = [];\n categoryTree: CategoryNode[] = [];\n flatCategories: Array<{ ID: string; displayName: string }> = [];\n availableEntities: Array<{ ID: string; Name: string }> = [];\n filteredEntitiesList: Array<{ ID: string; Name: string }> = [];\n\n entityOptions: Array<{ name: string; value: string }> = [{ name: 'All Entities', value: 'all' }];\n ownerOptions: Array<{ name: string; value: string }> = [\n { name: 'My Lists', value: 'mine' },\n { name: 'All Lists', value: 'all' },\n { name: 'Others', value: 'others' }\n ];\n sortOptions: Array<{ name: string; value: string }> = [\n { name: 'Name', value: 'name' },\n { name: 'Recently Updated', value: 'updated' },\n { name: 'Most Items', value: 'items' },\n { name: 'Entity', value: 'entity' }\n ];\n\n // Context menu state\n showContextMenu = false;\n contextMenuX = 0;\n contextMenuY = 0;\n selectedContextItem: BrowseListItem | null = null;\n\n // Create/Edit dialog state\n showCreateDialog = false;\n editingList: MJListEntity | null = null;\n newListName = '';\n newListDescription = '';\n selectedEntityId = '';\n selectedCategoryId: string | null = null;\n entitySearchTerm = '';\n showEntityDropdown = false;\n entityDropdownPosition = { top: 0, left: 0, width: 0, openAbove: false };\n\n // Delete confirmation state\n showDeleteConfirm = false;\n deleteListName = '';\n listToDelete: MJListEntity | null = null;\n\n // Operation states\n isSaving = false;\n isDeleting = false;\n\n // Sharing dialog state\n showShareDialog = false;\n shareDialogConfig: ListShareDialogConfig | null = null;\n\n private entityColorMap: Map<string, string> = new Map();\n private entityIconMap: Map<string, string> = new Map();\n private categoryMap: Map<string, MJListCategoryEntity> = new Map();\n private currentUserId = '';\n\n constructor(\n private cdr: ChangeDetectorRef,\n private tabService: TabService,\n private notificationService: MJNotificationService,\n private elementRef: ElementRef,\n private listSharingService: ListSharingService\n ) {\n super();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (this.showEntityDropdown) {\n const target = event.target as HTMLElement;\n if (!target.closest('.custom-select-wrapper')) {\n this.showEntityDropdown = false;\n }\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscapeKey() {\n if (this.showContextMenu) {\n this.closeContextMenu();\n }\n if (this.showCreateDialog) {\n this.closeCreateDialog();\n }\n if (this.showDeleteConfirm) {\n this.cancelDelete();\n }\n if (this.showEntityDropdown) {\n this.closeEntityDropdown();\n }\n }\n\n async ngOnInit() {\n await this.loadData();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async loadData() {\n this.isLoading = true;\n\n try {\n const md = new Metadata();\n const rv = new RunView();\n this.currentUserId = md.CurrentUser?.ID || '';\n\n // Load all lists, categories, details, and users in parallel\n const [listsResult, categoriesResult, detailsResult, usersResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Lists',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: List Details',\n Fields: ['ListID'],\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Users',\n Fields: ['ID', 'Name'],\n ResultType: 'simple'\n }\n ]);\n\n if (!listsResult.Success) {\n console.error('Failed to load lists');\n return;\n }\n\n const lists = listsResult.Results as MJListEntity[];\n this.categories = (categoriesResult.Results || []) as MJListCategoryEntity[];\n const details = (detailsResult.Results || []) as Array<{ ListID: string }>;\n const users = (usersResult.Results || []) as Array<{ ID: string; Name: string }>;\n\n // Build category map\n this.categoryMap.clear();\n for (const cat of this.categories) {\n this.categoryMap.set(cat.ID, cat);\n }\n\n // Build flat categories for dropdown\n this.flatCategories = this.buildFlatCategories(this.categories);\n\n // Build user map\n const userMap = new Map<string, string>();\n for (const user of users) {\n userMap.set(user.ID, user.Name);\n }\n\n // Count items per list\n const itemCounts = new Map<string, number>();\n for (const detail of details) {\n const count = itemCounts.get(detail.ListID) || 0;\n itemCounts.set(detail.ListID, count + 1);\n }\n\n // Build entity info\n const entities = md.Entities;\n const entitySet = new Set<string>();\n\n for (const entity of entities) {\n this.entityColorMap.set(entity.Name, this.generateEntityColor(entity.Name));\n this.entityIconMap.set(entity.Name, entity.Icon || 'fa-solid fa-table');\n }\n\n // Build available entities for dropdown\n this.availableEntities = entities\n .filter(e => e.IncludeInAPI)\n .map(e => ({ ID: e.ID, Name: e.Name }))\n .sort((a, b) => a.Name.localeCompare(b.Name));\n this.filteredEntitiesList = [...this.availableEntities];\n\n // Build list items\n this.allLists = lists.map(list => {\n const entityName = list.Entity || 'Unknown';\n entitySet.add(entityName);\n return {\n list,\n itemCount: itemCounts.get(list.ID) || 0,\n entityName,\n ownerName: userMap.get(list.UserID) || 'Unknown',\n isOwner: list.UserID === this.currentUserId\n };\n });\n\n // Build entity filter options\n this.entityOptions = [\n { name: 'All Entities', value: 'all' },\n ...Array.from(entitySet).sort().map(e => ({ name: e, value: e }))\n ];\n\n this.applyFilters();\n this.buildCategoryTree();\n\n // Load sharing info in the background\n this.loadSharingInfo();\n } catch (error) {\n console.error('Error loading lists:', error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private buildFlatCategories(categories: MJListCategoryEntity[]): Array<{ ID: string; displayName: string }> {\n const result: Array<{ ID: string; displayName: string }> = [];\n const topLevel = categories.filter(c => !c.ParentID);\n\n const processCategory = (cat: MJListCategoryEntity, level: number) => {\n const indent = '\\u00A0\\u00A0'.repeat(level);\n result.push({ ID: cat.ID, displayName: `${indent}${cat.Name}` });\n\n const children = categories.filter(c => c.ParentID === cat.ID);\n for (const child of children) {\n processCategory(child, level + 1);\n }\n };\n\n for (const cat of topLevel) {\n processCategory(cat, 0);\n }\n\n return result;\n }\n\n private buildCategoryTree() {\n const rootNodes: CategoryNode[] = [];\n const categoryNodes = new Map<string, CategoryNode>();\n\n // Create nodes for all categories\n for (const cat of this.categories) {\n categoryNodes.set(cat.ID, {\n category: cat,\n lists: [],\n children: [],\n isExpanded: true\n });\n }\n\n // Build tree structure\n for (const cat of this.categories) {\n const node = categoryNodes.get(cat.ID)!;\n if (cat.ParentID && categoryNodes.has(cat.ParentID)) {\n categoryNodes.get(cat.ParentID)!.children.push(node);\n } else {\n rootNodes.push(node);\n }\n }\n\n // Assign lists to categories\n const uncategorizedLists: BrowseListItem[] = [];\n for (const item of this.filteredLists) {\n if (item.list.CategoryID && categoryNodes.has(item.list.CategoryID)) {\n categoryNodes.get(item.list.CategoryID)!.lists.push(item);\n } else {\n uncategorizedLists.push(item);\n }\n }\n\n // Add uncategorized node if there are uncategorized lists\n if (uncategorizedLists.length > 0) {\n rootNodes.unshift({\n category: null,\n lists: uncategorizedLists,\n children: [],\n isExpanded: true\n });\n }\n\n this.categoryTree = rootNodes;\n }\n\n setViewMode(mode: ViewMode) {\n this.viewMode = mode;\n }\n\n onSearchChange(_term: string) {\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n onEntityFilterChange(_value: string) {\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n onOwnerFilterChange(_value: string) {\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n onSortChange(_value: string) {\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n clearSearch() {\n this.searchTerm = '';\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n clearFilters() {\n this.searchTerm = '';\n this.selectedEntity = 'all';\n this.selectedOwner = 'mine';\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n private applyFilters() {\n let result = [...this.allLists];\n\n // Owner filter\n if (this.selectedOwner === 'mine') {\n result = result.filter(item => item.isOwner);\n } else if (this.selectedOwner === 'others') {\n result = result.filter(item => !item.isOwner);\n }\n\n // Search filter\n if (this.searchTerm) {\n const term = this.searchTerm.toLowerCase();\n result = result.filter(item =>\n item.list.Name.toLowerCase().includes(term) ||\n (item.list.Description && item.list.Description.toLowerCase().includes(term)) ||\n item.entityName.toLowerCase().includes(term) ||\n item.ownerName.toLowerCase().includes(term)\n );\n }\n\n // Entity filter\n if (this.selectedEntity !== 'all') {\n result = result.filter(item => item.entityName === this.selectedEntity);\n }\n\n // Sort\n switch (this.selectedSort) {\n case 'name':\n result.sort((a, b) => a.list.Name.localeCompare(b.list.Name));\n break;\n case 'updated':\n result.sort((a, b) => {\n const dateA = new Date(a.list.__mj_UpdatedAt).getTime();\n const dateB = new Date(b.list.__mj_UpdatedAt).getTime();\n return dateB - dateA;\n });\n break;\n case 'items':\n result.sort((a, b) => b.itemCount - a.itemCount);\n break;\n case 'entity':\n result.sort((a, b) => a.entityName.localeCompare(b.entityName));\n break;\n }\n\n this.filteredLists = result;\n }\n\n toggleCategory(node: CategoryNode) {\n node.isExpanded = !node.isExpanded;\n }\n\n getListCountInCategory(node: CategoryNode): number {\n let count = node.lists.length;\n for (const child of node.children) {\n count += this.getListCountInCategory(child);\n }\n return count;\n }\n\n getEntityColor(entityName: string): string {\n return this.entityColorMap.get(entityName) || '#607D8B';\n }\n\n getEntityIcon(entityName: string): string {\n return this.entityIconMap.get(entityName) || 'fa-solid fa-table';\n }\n\n private generateEntityColor(entityName: string): string {\n let hash = 0;\n for (let i = 0; i < entityName.length; i++) {\n hash = entityName.charCodeAt(i) + ((hash << 5) - hash);\n }\n const colors = [\n '#2196F3', '#4CAF50', '#FF9800', '#9C27B0', '#F44336',\n '#00BCD4', '#795548', '#607D8B', '#E91E63', '#3F51B5'\n ];\n return colors[Math.abs(hash) % colors.length];\n }\n\n formatDate(date: Date): string {\n if (!date) return '';\n const now = new Date();\n const d = new Date(date);\n const diffMs = now.getTime() - d.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n return d.toLocaleDateString();\n }\n\n openList(item: BrowseListItem) {\n const appId = this.Data?.Configuration?.applicationId || '';\n this.tabService.OpenList(item.list.ID, item.list.Name, appId);\n }\n\n openListMenu(event: Event, item: BrowseListItem) {\n event.stopPropagation();\n const mouseEvent = event as MouseEvent;\n this.selectedContextItem = item;\n this.contextMenuX = mouseEvent.clientX;\n this.contextMenuY = mouseEvent.clientY;\n this.showContextMenu = true;\n }\n\n closeContextMenu() {\n this.showContextMenu = false;\n this.selectedContextItem = null;\n }\n\n createNewList() {\n this.editingList = null;\n this.newListName = '';\n this.newListDescription = '';\n this.selectedEntityId = '';\n this.entitySearchTerm = '';\n this.selectedCategoryId = null;\n this.showEntityDropdown = false;\n this.showCreateDialog = true;\n }\n\n editList() {\n if (!this.selectedContextItem) return;\n\n const list = this.selectedContextItem.list;\n this.editingList = list;\n this.newListName = list.Name;\n this.newListDescription = list.Description || '';\n this.selectedEntityId = list.EntityID;\n this.entitySearchTerm = list.Entity || '';\n this.selectedCategoryId = list.CategoryID || null;\n this.showCreateDialog = true;\n this.closeContextMenu();\n }\n\n selectEntity(entity: { ID: string; Name: string }) {\n this.selectedEntityId = entity.ID;\n this.entitySearchTerm = entity.Name;\n this.showEntityDropdown = false;\n }\n\n filterEntities(term: string) {\n const lowerTerm = term.toLowerCase();\n this.filteredEntitiesList = this.availableEntities.filter(e =>\n e.Name.toLowerCase().includes(lowerTerm)\n );\n }\n\n openEntityDropdown(inputElement: HTMLInputElement) {\n const rect = inputElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const dropdownHeight = 200;\n const spaceBelow = viewportHeight - rect.bottom;\n const openAbove = spaceBelow < dropdownHeight && rect.top > dropdownHeight;\n\n this.entityDropdownPosition = {\n top: openAbove ? rect.top - dropdownHeight : rect.bottom,\n left: rect.left,\n width: rect.width,\n openAbove\n };\n this.showEntityDropdown = true;\n this.filteredEntitiesList = [...this.availableEntities];\n }\n\n closeEntityDropdown() {\n this.showEntityDropdown = false;\n }\n\n async duplicateList() {\n if (!this.selectedContextItem) return;\n\n const listToDuplicate = this.selectedContextItem.list;\n this.closeContextMenu();\n\n this.isLoading = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const rv = new RunView();\n\n const newList = await md.GetEntityObject<MJListEntity>('MJ: Lists');\n newList.Name = `${listToDuplicate.Name} (Copy)`;\n newList.Description = listToDuplicate.Description;\n newList.EntityID = listToDuplicate.EntityID;\n newList.CategoryID = listToDuplicate.CategoryID;\n newList.UserID = md.CurrentUser!.ID;\n\n const listSaved = await newList.Save();\n if (!listSaved) {\n this.notificationService.CreateSimpleNotification('Failed to duplicate list', 'error', 4000);\n return;\n }\n\n const itemsResult = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${listToDuplicate.ID}'`,\n ResultType: 'entity_object'\n });\n\n if (itemsResult.Success && itemsResult.Results.length > 0) {\n let copiedCount = 0;\n for (const item of itemsResult.Results) {\n const newItem = await md.GetEntityObject<MJListDetailEntity>('MJ: List Details');\n newItem.ListID = newList.ID;\n newItem.RecordID = item.RecordID;\n newItem.Sequence = item.Sequence;\n const itemSaved = await newItem.Save();\n if (itemSaved) copiedCount++;\n }\n this.notificationService.CreateSimpleNotification(\n `List duplicated with ${copiedCount} item${copiedCount !== 1 ? 's' : ''}`,\n 'success',\n 3000\n );\n } else {\n this.notificationService.CreateSimpleNotification('List duplicated successfully', 'success', 3000);\n }\n\n await this.loadData();\n } catch (error) {\n console.error('Error duplicating list:', error);\n this.notificationService.CreateSimpleNotification('Error duplicating list. Please try again.', 'error', 4000);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n confirmDeleteList() {\n if (!this.selectedContextItem) return;\n this.listToDelete = this.selectedContextItem.list;\n this.deleteListName = this.selectedContextItem.list.Name;\n this.showDeleteConfirm = true;\n this.closeContextMenu();\n }\n\n cancelDelete() {\n this.showDeleteConfirm = false;\n this.listToDelete = null;\n this.deleteListName = '';\n }\n\n async deleteList() {\n if (!this.listToDelete) return;\n\n const listToDelete = this.listToDelete;\n const listName = listToDelete.Name;\n\n this.isDeleting = true;\n this.cdr.detectChanges();\n\n try {\n const deleted = await listToDelete.Delete();\n if (deleted) {\n this.notificationService.CreateSimpleNotification(`\"${listName}\" deleted`, 'success', 3000);\n } else {\n const errorMessage = listToDelete.LatestResult?.Message || 'Unknown error occurred';\n console.error('Failed to delete list:', listToDelete.LatestResult);\n this.notificationService.CreateSimpleNotification(`Failed to delete list: ${errorMessage}`, 'error', 6000);\n }\n this.cancelDelete();\n await this.loadData();\n } catch (error) {\n console.error('Error deleting list:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.notificationService.CreateSimpleNotification(`Error deleting list: ${errorMessage}`, 'error', 6000);\n } finally {\n this.isDeleting = false;\n this.cdr.detectChanges();\n }\n }\n\n closeCreateDialog() {\n this.showCreateDialog = false;\n this.editingList = null;\n this.showEntityDropdown = false;\n }\n\n async saveList() {\n this.isSaving = true;\n this.cdr.detectChanges();\n\n const isEditing = !!this.editingList;\n const listName = this.newListName;\n\n try {\n const md = new Metadata();\n let list: MJListEntity;\n\n if (this.editingList) {\n list = this.editingList;\n } else {\n list = await md.GetEntityObject<MJListEntity>('MJ: Lists');\n list.UserID = md.CurrentUser!.ID;\n list.EntityID = this.selectedEntityId;\n }\n\n list.Name = this.newListName;\n list.Description = this.newListDescription || null;\n list.CategoryID = this.selectedCategoryId || null;\n\n const saved = await list.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n isEditing ? `\"${listName}\" updated` : `\"${listName}\" created`,\n 'success',\n 3000\n );\n this.closeCreateDialog();\n await this.loadData();\n } else {\n const errorMessage = list.LatestResult?.Message || 'Unknown error occurred';\n const action = isEditing ? 'update' : 'create';\n console.error(`Failed to ${action} list:`, list.LatestResult);\n this.notificationService.CreateSimpleNotification(\n `Failed to ${action} list: ${errorMessage}`,\n 'error',\n 6000\n );\n }\n } catch (error) {\n console.error('Error saving list:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.notificationService.CreateSimpleNotification(`Error saving list: ${errorMessage}`, 'error', 6000);\n } finally {\n this.isSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n // Sharing methods\n openShareDialog() {\n if (!this.selectedContextItem) return;\n\n const item = this.selectedContextItem;\n this.shareDialogConfig = {\n listId: item.list.ID,\n listName: item.list.Name,\n currentUserId: this.currentUserId,\n isOwner: item.isOwner\n };\n this.showShareDialog = true;\n this.closeContextMenu();\n }\n\n onShareComplete(_result: ListShareDialogResult) {\n this.showShareDialog = false;\n this.shareDialogConfig = null;\n // Reload sharing info for all lists\n this.loadSharingInfo();\n this.cdr.detectChanges();\n }\n\n onShareCancel() {\n this.showShareDialog = false;\n this.shareDialogConfig = null;\n }\n\n private async loadSharingInfo() {\n // Load sharing summaries for all lists that the user owns\n const ownedLists = this.allLists.filter(item => item.isOwner);\n\n for (const item of ownedLists) {\n try {\n const summary = await this.listSharingService.getListSharingSummary(item.list.ID);\n item.sharingInfo = summary;\n } catch (error) {\n console.error(`Error loading sharing info for list ${item.list.ID}:`, error);\n }\n }\n\n this.cdr.detectChanges();\n }\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Lists';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-list-check';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lists-browse-resource.component.js","sourceRoot":"","sources":["../../../src/Lists/components/lists-browse-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ViewEncapsulation, ChangeDetectorRef, OnDestroy, ElementRef, HostListener } from '@angular/core';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJListCategoryEntity } from '@memberjunction/core-entities';\nimport { MJListEntity, MJListDetailEntity } from '@memberjunction/core-entities';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { Subject } from 'rxjs';\nimport { TabService } from '@memberjunction/ng-base-application';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ListSharingService, ListSharingSummary, ListShareDialogConfig, ListShareDialogResult } from '@memberjunction/ng-list-management';\ninterface BrowseListItem {\n list: MJListEntity;\n itemCount: number;\n entityName: string;\n ownerName: string;\n isOwner: boolean;\n sharingInfo?: ListSharingSummary;\n}\n\ninterface CategoryNode {\n category: MJListCategoryEntity | null;\n lists: BrowseListItem[];\n children: CategoryNode[];\n isExpanded: boolean;\n}\n\ntype ViewMode = 'table' | 'card' | 'hierarchy';\n\n@RegisterClass(BaseResourceComponent, 'ListsBrowseResource')\n@Component({\n standalone: false,\n selector: 'mj-lists-browse-resource',\n template: `\n <div class=\"lists-browse-container\">\n <!-- Header -->\n <div class=\"browse-header\">\n <div class=\"header-row\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-list-check\"></i>\n <h2>Lists</h2>\n </div>\n <button class=\"btn-create\" (click)=\"createNewList()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New List</span>\n </button>\n </div>\n \n <div class=\"header-actions\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search lists...\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\" />\n @if (searchTerm) {\n <button class=\"clear-search\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n \n <div class=\"filter-group\">\n <select\n [(ngModel)]=\"selectedOwner\"\n (ngModelChange)=\"onOwnerFilterChange($event)\"\n class=\"filter-select\"\n title=\"Filter by owner\">\n @for (opt of ownerOptions; track opt) {\n <option [value]=\"opt.value\">{{opt.name}}</option>\n }\n </select>\n </div>\n \n <div class=\"filter-group\">\n <select\n [(ngModel)]=\"selectedEntity\"\n (ngModelChange)=\"onEntityFilterChange($event)\"\n class=\"filter-select\"\n title=\"Filter by entity\">\n @for (opt of entityOptions; track opt) {\n <option [value]=\"opt.value\">{{opt.name}}</option>\n }\n </select>\n </div>\n \n <div class=\"view-toggle-group\">\n <button\n class=\"view-toggle\"\n [class.active]=\"viewMode === 'table'\"\n (click)=\"setViewMode('table')\"\n title=\"Table view\">\n <i class=\"fa-solid fa-table-list\"></i>\n </button>\n <button\n class=\"view-toggle\"\n [class.active]=\"viewMode === 'card'\"\n (click)=\"setViewMode('card')\"\n title=\"Card view\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button\n class=\"view-toggle\"\n [class.active]=\"viewMode === 'hierarchy'\"\n (click)=\"setViewMode('hierarchy')\"\n title=\"Category view\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n </button>\n </div>\n </div>\n </div>\n \n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading lists...\" size=\"medium\"></mj-loading>\n </div>\n }\n \n <!-- Empty State - No Lists -->\n @if (!isLoading && allLists.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-state-icon-wrapper\">\n <div class=\"icon-bg\"></div>\n <i class=\"fa-solid fa-list-check\"></i>\n </div>\n <h3>No Lists Yet</h3>\n <p>Lists help you organize and track groups of records across your data.</p>\n <div class=\"empty-state-features\">\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Group records from any entity</span>\n </div>\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Organize with categories</span>\n </div>\n <div class=\"feature-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Quick access from any view</span>\n </div>\n </div>\n <button class=\"btn-create-large\" (click)=\"createNewList()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Your First List\n </button>\n </div>\n }\n \n <!-- Empty State - No Results -->\n @if (!isLoading && allLists.length > 0 && filteredLists.length === 0) {\n <div class=\"empty-state search-empty\">\n <div class=\"empty-state-icon-wrapper search\">\n <i class=\"fa-solid fa-filter-circle-xmark\"></i>\n </div>\n <h3>No Results Found</h3>\n <p>No lists match your current filters.</p>\n <p class=\"empty-hint\">Try adjusting your search or filters.</p>\n <button class=\"btn-clear\" (click)=\"clearFilters()\">Clear All Filters</button>\n </div>\n }\n \n <!-- Results Content -->\n @if (!isLoading && filteredLists.length > 0) {\n <div class=\"browse-content\">\n <div class=\"results-header\">\n <span class=\"result-count\">{{filteredLists.length}} list{{filteredLists.length !== 1 ? 's' : ''}}</span>\n <div class=\"sort-options\">\n <label>Sort:</label>\n <select\n [(ngModel)]=\"selectedSort\"\n (ngModelChange)=\"onSortChange($event)\"\n class=\"filter-select sort-select\">\n @for (opt of sortOptions; track opt) {\n <option [value]=\"opt.value\">{{opt.name}}</option>\n }\n </select>\n </div>\n </div>\n <!-- Table View -->\n @if (viewMode === 'table') {\n <div class=\"lists-table\">\n <table role=\"grid\" aria-label=\"Lists table\">\n <thead>\n <tr>\n <th class=\"col-name\" scope=\"col\">Name</th>\n <th class=\"col-entity\" scope=\"col\">Entity</th>\n <th class=\"col-items\" scope=\"col\">Items</th>\n <th class=\"col-sharing\" scope=\"col\">Shared</th>\n <th class=\"col-owner\" scope=\"col\">Owner</th>\n <th class=\"col-updated\" scope=\"col\">Updated</th>\n <th class=\"col-actions\" scope=\"col\"><span class=\"sr-only\">Actions</span></th>\n </tr>\n </thead>\n <tbody>\n @for (item of filteredLists; track item) {\n <tr\n (click)=\"openList(item)\"\n (keydown.enter)=\"openList(item)\"\n class=\"list-row\"\n tabindex=\"0\"\n role=\"row\">\n <td class=\"col-name\" role=\"gridcell\">\n <div class=\"name-cell\">\n <div class=\"list-icon\" [style.background-color]=\"getEntityColor(item.entityName)\" aria-hidden=\"true\">\n <i [class]=\"getEntityIcon(item.entityName)\"></i>\n </div>\n <div class=\"name-content\">\n <span class=\"list-name\">{{item.list.Name}}</span>\n @if (item.list.Description) {\n <span class=\"list-desc\">{{item.list.Description}}</span>\n }\n </div>\n </div>\n </td>\n <td class=\"col-entity\" role=\"gridcell\">\n <span class=\"entity-badge\">{{item.entityName}}</span>\n </td>\n <td class=\"col-items\" role=\"gridcell\">{{item.itemCount}}</td>\n <td class=\"col-sharing\" role=\"gridcell\">\n @if (item.sharingInfo; as sharing) {\n @if (sharing.totalShares > 0) {\n <span class=\"sharing-indicator\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span class=\"share-count\">{{sharing.totalShares}}</span>\n </span>\n }\n @if (sharing.totalShares === 0) {\n <span class=\"sharing-private\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n }\n @if (!item.sharingInfo) {\n <span class=\"sharing-private\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n </td>\n <td class=\"col-owner\" role=\"gridcell\">\n <span class=\"owner-name\" [class.is-me]=\"item.isOwner\">\n {{item.isOwner ? 'You' : item.ownerName}}\n </span>\n </td>\n <td class=\"col-updated\" role=\"gridcell\">{{formatDate(item.list.__mj_UpdatedAt)}}</td>\n <td class=\"col-actions\" role=\"gridcell\">\n @if (item.isOwner) {\n <button\n class=\"action-btn\"\n (click)=\"openListMenu($event, item)\"\n title=\"More options\">\n <i class=\"fa-solid fa-ellipsis-v\" aria-hidden=\"true\"></i>\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Card View -->\n @if (viewMode === 'card') {\n <div class=\"lists-grid\" role=\"list\" aria-label=\"Lists\">\n @for (item of filteredLists; track item) {\n <div\n class=\"list-card\"\n (click)=\"openList(item)\"\n (keydown.enter)=\"openList(item)\"\n tabindex=\"0\"\n role=\"listitem\">\n <div class=\"card-header\">\n <div class=\"card-icon\" [style.background-color]=\"getEntityColor(item.entityName)\" aria-hidden=\"true\">\n <i [class]=\"getEntityIcon(item.entityName)\"></i>\n </div>\n @if (item.isOwner) {\n <div class=\"card-menu\">\n <button class=\"menu-btn\" (click)=\"openListMenu($event, item)\">\n <i class=\"fa-solid fa-ellipsis-v\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n <div class=\"card-body\">\n <h3 class=\"card-title\">{{item.list.Name}}</h3>\n @if (item.list.Description) {\n <p class=\"card-description\">{{item.list.Description}}</p>\n }\n <div class=\"card-meta\">\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-database\"></i>\n {{item.entityName}}\n </span>\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-hashtag\"></i>\n {{item.itemCount}} item{{item.itemCount !== 1 ? 's' : ''}}\n </span>\n </div>\n </div>\n <div class=\"card-footer\">\n <span class=\"owner-tag\" [class.is-me]=\"item.isOwner\">\n <i class=\"fa-solid fa-user\"></i>\n {{item.isOwner ? 'You' : item.ownerName}}\n </span>\n <div class=\"card-footer-right\">\n @if (item.sharingInfo; as sharing) {\n @if (sharing.totalShares > 0) {\n <span class=\"sharing-badge\" [title]=\"'Shared with ' + sharing.totalShares + ' user(s)/role(s)'\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n </span>\n }\n }\n <span class=\"date-info\">{{formatDate(item.list.__mj_UpdatedAt)}}</span>\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- Hierarchy View -->\n @if (viewMode === 'hierarchy') {\n <div class=\"category-tree\">\n @for (node of categoryTree; track node) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTemplate; context: { node: node, depth: 0 }\"></ng-container>\n }\n </div>\n }\n </div>\n }\n \n <!-- Category Node Template -->\n <ng-template #categoryNodeTemplate let-node=\"node\" let-depth=\"depth\">\n <div class=\"category-section\" [style.margin-left.px]=\"depth * 20\">\n <!-- Category Header -->\n @if (node.category) {\n <div\n class=\"category-header\"\n (click)=\"toggleCategory(node)\">\n <i [class]=\"node.isExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n <i class=\"fa-solid fa-folder\" [class.fa-folder-open]=\"node.isExpanded\"></i>\n <span class=\"category-name\">{{node.category.Name}}</span>\n <span class=\"category-count\">{{getListCountInCategory(node)}}</span>\n </div>\n }\n \n <!-- Uncategorized Header -->\n @if (!node.category && node.lists.length > 0) {\n <div\n class=\"category-header uncategorized\"\n (click)=\"toggleCategory(node)\">\n <i [class]=\"node.isExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n <i class=\"fa-solid fa-inbox\"></i>\n <span class=\"category-name\">Uncategorized</span>\n <span class=\"category-count\">{{node.lists.length}}</span>\n </div>\n }\n \n <!-- Lists in this category -->\n @if (node.isExpanded) {\n <div class=\"category-lists\" role=\"list\">\n @for (item of node.lists; track item) {\n <div\n class=\"list-row hierarchy-row\"\n (click)=\"openList(item)\"\n (keydown.enter)=\"openList(item)\"\n tabindex=\"0\"\n role=\"listitem\">\n <div class=\"list-icon\" [style.background-color]=\"getEntityColor(item.entityName)\" aria-hidden=\"true\">\n <i [class]=\"getEntityIcon(item.entityName)\"></i>\n </div>\n <div class=\"list-info\">\n <span class=\"list-name\">{{item.list.Name}}</span>\n <span class=\"list-meta\">\n {{item.entityName}} · {{item.itemCount}} items\n @if (!item.isOwner) {\n <span> · {{item.ownerName}}</span>\n }\n </span>\n </div>\n @if (item.isOwner) {\n <div class=\"list-actions\">\n <button class=\"action-btn\" (click)=\"openListMenu($event, item)\">\n <i class=\"fa-solid fa-ellipsis-v\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n \n <!-- Child categories -->\n @if (node.isExpanded) {\n @for (child of node.children; track child) {\n <ng-container *ngTemplateOutlet=\"categoryNodeTemplate; context: { node: child, depth: depth + 1 }\"></ng-container>\n }\n }\n </div>\n </ng-template>\n \n <!-- Context Menu -->\n @if (showContextMenu) {\n <div class=\"context-menu-overlay\" (click)=\"closeContextMenu()\"></div>\n }\n @if (showContextMenu) {\n <div class=\"context-menu\" [style.top.px]=\"contextMenuY\" [style.left.px]=\"contextMenuX\">\n <button class=\"menu-item\" (click)=\"editList()\">\n <i class=\"fa-solid fa-pen\"></i>\n Edit\n </button>\n <button class=\"menu-item\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Share\n </button>\n <button class=\"menu-item\" (click)=\"duplicateList()\">\n <i class=\"fa-solid fa-copy\"></i>\n Duplicate\n </button>\n <div class=\"menu-divider\"></div>\n <button class=\"menu-item danger\" (click)=\"confirmDeleteList()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n </div>\n }\n \n <!-- Create/Edit Dialog -->\n @if (showCreateDialog) {\n <div class=\"modal-overlay\" (click)=\"closeCreateDialog()\"></div>\n }\n @if (showCreateDialog) {\n <div class=\"modal-dialog\">\n <div class=\"modal-header\">\n <h3>{{editingList ? 'Edit List' : 'Create New List'}}</h3>\n <button class=\"modal-close\" (click)=\"closeCreateDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"form-group\">\n <label>Name *</label>\n <input\n type=\"text\"\n [(ngModel)]=\"newListName\"\n placeholder=\"Enter list name\"\n class=\"form-input\" />\n </div>\n <div class=\"form-group\">\n <label>Description</label>\n <textarea\n [(ngModel)]=\"newListDescription\"\n placeholder=\"Optional description\"\n class=\"form-input\"\n rows=\"3\"></textarea>\n </div>\n @if (!editingList) {\n <div class=\"form-group\">\n <label>Entity *</label>\n <div class=\"custom-select-wrapper\">\n <input\n #entityInput\n type=\"text\"\n [(ngModel)]=\"entitySearchTerm\"\n (ngModelChange)=\"filterEntities($event)\"\n (focus)=\"openEntityDropdown(entityInput)\"\n placeholder=\"Search and select an entity\"\n class=\"form-input\" />\n </div>\n </div>\n }\n @if (editingList) {\n <div class=\"form-group\">\n <label>Entity</label>\n <input type=\"text\" [value]=\"entitySearchTerm\" class=\"form-input\" disabled />\n </div>\n }\n <div class=\"form-group\">\n <label>Category</label>\n <select [(ngModel)]=\"selectedCategoryId\" class=\"form-input\">\n <option [ngValue]=\"null\">No category</option>\n @for (cat of flatCategories; track cat) {\n <option [ngValue]=\"cat.ID\">{{cat.displayName}}</option>\n }\n </select>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn-primary\"\n (click)=\"saveList()\"\n [disabled]=\"!newListName || (!editingList && !selectedEntityId) || isSaving\">\n @if (isSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{isSaving ? 'Saving...' : (editingList ? 'Save' : 'Create')}}\n </button>\n <button class=\"btn-secondary\" (click)=\"closeCreateDialog()\" [disabled]=\"isSaving\">Cancel</button>\n </div>\n </div>\n }\n \n <!-- Delete Confirmation Dialog -->\n @if (showDeleteConfirm) {\n <div class=\"modal-overlay\" (click)=\"cancelDelete()\"></div>\n }\n @if (showDeleteConfirm) {\n <div class=\"modal-dialog confirm-dialog\">\n <div class=\"modal-header\">\n <h3>Delete List</h3>\n <button class=\"modal-close\" (click)=\"cancelDelete()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"modal-body\">\n <p>Are you sure you want to delete \"<strong>{{deleteListName}}</strong>\"?</p>\n <p class=\"warning-text\">This will also remove all items in the list.</p>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn-danger\" (click)=\"deleteList()\" [disabled]=\"isDeleting\">\n @if (isDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{isDeleting ? 'Deleting...' : 'Delete'}}\n </button>\n <button class=\"btn-secondary\" (click)=\"cancelDelete()\" [disabled]=\"isDeleting\">Cancel</button>\n </div>\n </div>\n }\n \n <!-- Share Dialog -->\n @if (shareDialogConfig) {\n <mj-list-share-dialog\n [config]=\"shareDialogConfig\"\n [visible]=\"showShareDialog\"\n (complete)=\"onShareComplete($event)\"\n (cancel)=\"onShareCancel()\">\n </mj-list-share-dialog>\n }\n \n <!-- Entity Dropdown Portal -->\n @if (showEntityDropdown && !editingList) {\n <div\n class=\"entity-dropdown-portal\"\n [style.top.px]=\"entityDropdownPosition.top\"\n [style.left.px]=\"entityDropdownPosition.left\"\n [style.width.px]=\"entityDropdownPosition.width\"\n [class.dropdown-above]=\"entityDropdownPosition.openAbove\">\n <div class=\"entity-dropdown-backdrop\" (click)=\"closeEntityDropdown()\"></div>\n <div class=\"entity-dropdown-content\" [class.open-above]=\"entityDropdownPosition.openAbove\">\n @for (entity of filteredEntitiesList; track entity) {\n <div\n class=\"dropdown-item\"\n (click)=\"selectEntity(entity)\">\n {{entity.Name}}\n </div>\n }\n @if (filteredEntitiesList.length === 0) {\n <div class=\"dropdown-empty\">\n No entities found\n </div>\n }\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .lists-browse-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f5f7fa;\n overflow: hidden;\n }\n\n /* Header */\n .browse-header {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 24px;\n background: white;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n }\n\n .header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .header-title i {\n font-size: 24px;\n color: #2196F3;\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #333;\n }\n\n .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n .search-box {\n position: relative;\n display: flex;\n align-items: center;\n flex: 1;\n min-width: 200px;\n max-width: 300px;\n }\n\n .search-box i.fa-search {\n position: absolute;\n left: 12px;\n color: #999;\n }\n\n .search-box input {\n padding: 8px 36px;\n border: 1px solid #ddd;\n border-radius: 20px;\n font-size: 14px;\n width: 100%;\n transition: border-color 0.2s, box-shadow 0.2s;\n }\n\n .search-box input:focus {\n outline: none;\n border-color: #2196F3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n\n .clear-search {\n position: absolute;\n right: 8px;\n background: none;\n border: none;\n color: #999;\n cursor: pointer;\n }\n\n .filter-group {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .filter-group label {\n font-size: 13px;\n color: #666;\n }\n\n .filter-select {\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n cursor: pointer;\n min-width: 120px;\n }\n\n .filter-select:focus {\n outline: none;\n border-color: #2196F3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n\n .sort-select {\n min-width: 140px;\n }\n\n .view-toggle-group {\n display: flex;\n border: 1px solid #ddd;\n border-radius: 6px;\n overflow: hidden;\n }\n\n .view-toggle {\n padding: 8px 12px;\n background: white;\n border: none;\n border-right: 1px solid #ddd;\n color: #666;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .view-toggle:last-child {\n border-right: none;\n }\n\n .view-toggle:hover {\n background: #f5f5f5;\n }\n\n .view-toggle.active {\n background: #2196F3;\n color: white;\n }\n\n .btn-create {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: #2196F3;\n color: white;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-create:hover {\n background: #1976D2;\n }\n\n /* Loading */\n .loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n }\n\n /* Empty State */\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 48px 40px;\n text-align: center;\n max-width: 480px;\n margin: 0 auto;\n }\n\n .empty-state-icon-wrapper {\n position: relative;\n margin-bottom: 24px;\n }\n\n .empty-state-icon-wrapper .icon-bg {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 120px;\n height: 120px;\n border-radius: 50%;\n background: linear-gradient(135deg, rgba(33, 150, 243, 0.1) 0%, rgba(33, 150, 243, 0.05) 100%);\n }\n\n .empty-state-icon-wrapper > i {\n position: relative;\n font-size: 56px;\n color: #2196F3;\n z-index: 1;\n }\n\n .empty-state-icon-wrapper.search > i {\n font-size: 48px;\n color: #9e9e9e;\n }\n\n .empty-state h3 {\n margin: 0 0 12px;\n font-size: 22px;\n font-weight: 600;\n color: #333;\n }\n\n .empty-state p {\n margin: 0 0 8px;\n color: #666;\n font-size: 15px;\n line-height: 1.5;\n }\n\n .empty-state p:last-of-type {\n margin-bottom: 24px;\n }\n\n .empty-hint {\n color: #999 !important;\n font-size: 13px !important;\n }\n\n .empty-state-features {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 28px;\n text-align: left;\n }\n\n .feature-item {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 14px;\n color: #555;\n }\n\n .feature-item i {\n font-size: 14px !important;\n color: #4CAF50 !important;\n }\n\n .btn-create-large {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 28px;\n background: linear-gradient(135deg, #2196F3 0%, #1976D2 100%);\n color: white;\n border: none;\n border-radius: 8px;\n font-size: 15px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.3);\n }\n\n .btn-create-large:hover {\n background: linear-gradient(135deg, #1976D2 0%, #1565C0 100%);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(33, 150, 243, 0.4);\n }\n\n .btn-clear {\n padding: 10px 20px;\n background: #f0f0f0;\n border: none;\n border-radius: 6px;\n color: #666;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-clear:hover {\n background: #e0e0e0;\n }\n\n /* Content */\n .browse-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px 24px;\n }\n\n .results-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n }\n\n .result-count {\n font-size: 14px;\n color: #666;\n }\n\n .sort-options {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .sort-options label {\n font-size: 13px;\n color: #666;\n }\n\n /* Table View */\n .lists-table {\n background: white;\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(0,0,0,0.08);\n }\n\n .lists-table table {\n width: 100%;\n border-collapse: collapse;\n }\n\n .lists-table th {\n text-align: left;\n padding: 12px 16px;\n font-size: 12px;\n font-weight: 600;\n color: #666;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .lists-table td {\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n font-size: 14px;\n color: #333;\n }\n\n .list-row {\n cursor: pointer;\n transition: background 0.15s;\n outline: none;\n }\n\n .list-row:hover {\n background: #f5f5f5;\n }\n\n .list-row:focus {\n background: #e8f4fd;\n }\n\n .list-row:focus-visible {\n background: #e3f2fd;\n box-shadow: inset 3px 0 0 #2196F3;\n }\n\n .list-row:last-child td {\n border-bottom: none;\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n .col-name { width: 30%; }\n .col-entity { width: 15%; }\n .col-items { width: 8%; text-align: center; }\n .col-sharing { width: 8%; text-align: center; }\n .col-owner { width: 14%; }\n .col-updated { width: 15%; }\n .col-actions { width: 10%; text-align: right; }\n\n /* Sharing indicators */\n .sharing-indicator {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: #2196F3;\n font-size: 13px;\n }\n\n .sharing-indicator i {\n font-size: 14px;\n }\n\n .share-count {\n font-weight: 500;\n }\n\n .sharing-private {\n color: #999;\n font-size: 13px;\n }\n\n .sharing-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n background: #e3f2fd;\n border-radius: 50%;\n color: #2196F3;\n font-size: 11px;\n }\n\n .card-footer-right {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .name-cell {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .list-icon {\n width: 36px;\n height: 36px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 14px;\n flex-shrink: 0;\n }\n\n .name-content {\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .list-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .list-desc {\n font-size: 12px;\n color: #999;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .entity-badge {\n display: inline-block;\n padding: 2px 8px;\n background: #e8f4fd;\n border-radius: 4px;\n font-size: 12px;\n color: #1976D2;\n }\n\n .owner-name {\n color: #666;\n }\n\n .owner-name.is-me {\n color: #2196F3;\n font-weight: 500;\n }\n\n .action-btn {\n background: none;\n border: none;\n padding: 6px 10px;\n color: #999;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s;\n }\n\n .action-btn:hover {\n background: #e0e0e0;\n color: #666;\n }\n\n /* Card View */\n .lists-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 16px;\n }\n\n .list-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.08);\n overflow: hidden;\n cursor: pointer;\n transition: transform 0.2s, box-shadow 0.2s, outline 0.1s;\n outline: 2px solid transparent;\n }\n\n .list-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(0,0,0,0.12);\n }\n\n .list-card:focus {\n outline: 2px solid #2196F3;\n outline-offset: 2px;\n }\n\n .list-card:focus:not(:focus-visible) {\n outline: none;\n }\n\n .list-card:focus-visible {\n outline: 2px solid #2196F3;\n outline-offset: 2px;\n }\n\n .card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 16px 16px 0;\n }\n\n .card-icon {\n width: 40px;\n height: 40px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 18px;\n }\n\n .menu-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n color: #999;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .menu-btn:hover {\n background: #f5f5f5;\n color: #666;\n }\n\n .card-body {\n padding: 12px 16px;\n }\n\n .card-title {\n margin: 0 0 4px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n }\n\n .card-description {\n margin: 0 0 12px;\n font-size: 13px;\n color: #666;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .card-meta {\n display: flex;\n gap: 16px;\n }\n\n .meta-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #999;\n }\n\n .card-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n border-top: 1px solid #f0f0f0;\n background: #fafafa;\n }\n\n .owner-tag {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #666;\n }\n\n .owner-tag.is-me {\n color: #2196F3;\n }\n\n .date-info {\n font-size: 12px;\n color: #999;\n }\n\n /* Hierarchy View */\n .category-tree {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .category-section {\n background: white;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .category-header:hover {\n background: #f5f5f5;\n }\n\n .category-header i:first-child {\n width: 16px;\n text-align: center;\n color: #999;\n }\n\n .category-header .fa-folder,\n .category-header .fa-folder-open {\n color: #ffc107;\n }\n\n .category-header.uncategorized .fa-inbox {\n color: #999;\n }\n\n .category-name {\n flex: 1;\n font-weight: 500;\n color: #333;\n }\n\n .category-count {\n font-size: 12px;\n color: #999;\n background: #f0f0f0;\n padding: 2px 8px;\n border-radius: 10px;\n }\n\n .category-lists {\n border-top: 1px solid #f0f0f0;\n }\n\n .hierarchy-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px 12px 40px;\n cursor: pointer;\n transition: background 0.2s;\n outline: none;\n }\n\n .hierarchy-row:hover {\n background: #f5f5f5;\n }\n\n .hierarchy-row:focus {\n background: #e3f2fd;\n }\n\n .hierarchy-row:focus-visible {\n background: #e3f2fd;\n box-shadow: inset 3px 0 0 #2196F3;\n }\n\n .list-info {\n flex: 1;\n min-width: 0;\n }\n\n .list-meta {\n font-size: 12px;\n color: #999;\n }\n\n .list-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s;\n }\n\n .hierarchy-row:hover .list-actions {\n opacity: 1;\n }\n\n /* Context Menu */\n .context-menu-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 999;\n }\n\n .context-menu {\n position: fixed;\n background: white;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0,0,0,0.15);\n min-width: 160px;\n padding: 4px 0;\n z-index: 1000;\n }\n\n .menu-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n background: none;\n border: none;\n text-align: left;\n font-size: 14px;\n color: #333;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .menu-item:hover {\n background: #f5f5f5;\n }\n\n .menu-item.danger {\n color: #d32f2f;\n }\n\n .menu-item.danger:hover {\n background: #ffebee;\n }\n\n .menu-divider {\n height: 1px;\n background: #e0e0e0;\n margin: 4px 0;\n }\n\n /* Modal Styles */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1000;\n }\n\n .modal-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: white;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);\n width: 500px;\n max-width: 90vw;\n max-height: 90vh;\n overflow: hidden;\n z-index: 1001;\n }\n\n .confirm-dialog {\n width: 400px;\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n }\n\n .modal-close {\n background: none;\n border: none;\n padding: 4px 8px;\n color: #999;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .modal-close:hover {\n background: #f0f0f0;\n color: #666;\n }\n\n .modal-body {\n padding: 20px;\n max-height: 60vh;\n overflow-y: auto;\n }\n\n .modal-body p {\n margin: 0 0 8px;\n color: #333;\n }\n\n .warning-text {\n color: #d32f2f !important;\n font-size: 13px;\n }\n\n .modal-footer {\n display: flex;\n gap: 12px;\n padding: 16px 20px;\n border-top: 1px solid #e0e0e0;\n background: #fafafa;\n }\n\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #2196F3;\n color: white;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: #1976D2;\n }\n\n .btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .btn-secondary {\n padding: 10px 20px;\n background: white;\n color: #666;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: #f5f5f5;\n }\n\n .btn-danger {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #d32f2f;\n color: white;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-danger:hover:not(:disabled) {\n background: #c62828;\n }\n\n /* Form Styles */\n .form-group {\n margin-bottom: 16px;\n }\n\n .form-group:last-child {\n margin-bottom: 0;\n }\n\n .form-group label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #666;\n }\n\n .form-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #ddd;\n border-radius: 6px;\n font-size: 14px;\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n }\n\n .form-input:focus {\n outline: none;\n border-color: #2196F3;\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);\n }\n\n .form-input:disabled {\n background: #f5f5f5;\n color: #999;\n }\n\n textarea.form-input {\n resize: vertical;\n min-height: 80px;\n }\n\n select.form-input {\n cursor: pointer;\n }\n\n .custom-select-wrapper {\n position: relative;\n }\n\n /* Portal Dropdown */\n .entity-dropdown-portal {\n position: fixed;\n z-index: 10002;\n }\n\n .entity-dropdown-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: -1;\n }\n\n .entity-dropdown-content {\n max-height: 200px;\n overflow-y: auto;\n background: white;\n border: 1px solid #ddd;\n border-radius: 6px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n }\n\n .entity-dropdown-content.open-above {\n position: absolute;\n bottom: 0;\n }\n\n .dropdown-item {\n padding: 10px 12px;\n cursor: pointer;\n transition: background 0.15s;\n font-size: 14px;\n color: #333;\n }\n\n .dropdown-item:hover {\n background: #e3f2fd;\n }\n\n .dropdown-item:first-child {\n border-radius: 6px 6px 0 0;\n }\n\n .dropdown-item:last-child {\n border-radius: 0 0 6px 6px;\n }\n\n .dropdown-empty {\n padding: 10px 12px;\n color: #999;\n font-style: italic;\n }\n\n /* Responsive */\n @media (max-width: 768px) {\n .header-row {\n flex-direction: column;\n gap: 12px;\n align-items: stretch;\n }\n\n .btn-create {\n width: 100%;\n justify-content: center;\n }\n\n .header-actions {\n flex-direction: column;\n align-items: stretch;\n }\n\n .search-box {\n max-width: none;\n }\n\n .filter-group {\n width: 100%;\n }\n\n .filter-select {\n flex: 1;\n width: 100%;\n }\n\n .view-toggle-group {\n justify-content: center;\n }\n\n .lists-table {\n overflow-x: auto;\n }\n\n .col-entity, .col-items, .col-updated {\n display: none;\n }\n\n .lists-grid {\n grid-template-columns: 1fr;\n }\n\n .modal-dialog {\n width: 95vw;\n }\n }\n `],\n encapsulation: ViewEncapsulation.None\n})\nexport class ListsBrowseResource extends BaseResourceComponent implements OnDestroy {\n private destroy$ = new Subject<void>();\n\n isLoading = true;\n searchTerm = '';\n viewMode: ViewMode = 'card';\n selectedEntity = 'all';\n selectedOwner = 'mine';\n selectedSort = 'name';\n\n allLists: BrowseListItem[] = [];\n filteredLists: BrowseListItem[] = [];\n categories: MJListCategoryEntity[] = [];\n categoryTree: CategoryNode[] = [];\n flatCategories: Array<{ ID: string; displayName: string }> = [];\n availableEntities: Array<{ ID: string; Name: string }> = [];\n filteredEntitiesList: Array<{ ID: string; Name: string }> = [];\n\n entityOptions: Array<{ name: string; value: string }> = [{ name: 'All Entities', value: 'all' }];\n ownerOptions: Array<{ name: string; value: string }> = [\n { name: 'My Lists', value: 'mine' },\n { name: 'All Lists', value: 'all' },\n { name: 'Others', value: 'others' }\n ];\n sortOptions: Array<{ name: string; value: string }> = [\n { name: 'Name', value: 'name' },\n { name: 'Recently Updated', value: 'updated' },\n { name: 'Most Items', value: 'items' },\n { name: 'Entity', value: 'entity' }\n ];\n\n // Context menu state\n showContextMenu = false;\n contextMenuX = 0;\n contextMenuY = 0;\n selectedContextItem: BrowseListItem | null = null;\n\n // Create/Edit dialog state\n showCreateDialog = false;\n editingList: MJListEntity | null = null;\n newListName = '';\n newListDescription = '';\n selectedEntityId = '';\n selectedCategoryId: string | null = null;\n entitySearchTerm = '';\n showEntityDropdown = false;\n entityDropdownPosition = { top: 0, left: 0, width: 0, openAbove: false };\n\n // Delete confirmation state\n showDeleteConfirm = false;\n deleteListName = '';\n listToDelete: MJListEntity | null = null;\n\n // Operation states\n isSaving = false;\n isDeleting = false;\n\n // Sharing dialog state\n showShareDialog = false;\n shareDialogConfig: ListShareDialogConfig | null = null;\n\n private entityColorMap: Map<string, string> = new Map();\n private entityIconMap: Map<string, string> = new Map();\n private categoryMap: Map<string, MJListCategoryEntity> = new Map();\n private currentUserId = '';\n\n constructor(\n private cdr: ChangeDetectorRef,\n private tabService: TabService,\n private notificationService: MJNotificationService,\n private elementRef: ElementRef,\n private listSharingService: ListSharingService\n ) {\n super();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (this.showEntityDropdown) {\n const target = event.target as HTMLElement;\n if (!target.closest('.custom-select-wrapper')) {\n this.showEntityDropdown = false;\n }\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscapeKey() {\n if (this.showContextMenu) {\n this.closeContextMenu();\n }\n if (this.showCreateDialog) {\n this.closeCreateDialog();\n }\n if (this.showDeleteConfirm) {\n this.cancelDelete();\n }\n if (this.showEntityDropdown) {\n this.closeEntityDropdown();\n }\n }\n\n async ngOnInit() {\n await this.loadData();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async loadData() {\n this.isLoading = true;\n\n try {\n const md = new Metadata();\n const rv = new RunView();\n this.currentUserId = md.CurrentUser?.ID || '';\n\n // Load all lists, categories, details, and users in parallel\n const [listsResult, categoriesResult, detailsResult, usersResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Lists',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: List Details',\n Fields: ['ListID'],\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Users',\n Fields: ['ID', 'Name'],\n ResultType: 'simple'\n }\n ]);\n\n if (!listsResult.Success) {\n console.error('Failed to load lists');\n return;\n }\n\n const lists = listsResult.Results as MJListEntity[];\n this.categories = (categoriesResult.Results || []) as MJListCategoryEntity[];\n const details = (detailsResult.Results || []) as Array<{ ListID: string }>;\n const users = (usersResult.Results || []) as Array<{ ID: string; Name: string }>;\n\n // Build category map\n this.categoryMap.clear();\n for (const cat of this.categories) {\n this.categoryMap.set(cat.ID, cat);\n }\n\n // Build flat categories for dropdown\n this.flatCategories = this.buildFlatCategories(this.categories);\n\n // Build user map\n const userMap = new Map<string, string>();\n for (const user of users) {\n userMap.set(user.ID, user.Name);\n }\n\n // Count items per list\n const itemCounts = new Map<string, number>();\n for (const detail of details) {\n const count = itemCounts.get(detail.ListID) || 0;\n itemCounts.set(detail.ListID, count + 1);\n }\n\n // Build entity info\n const entities = md.Entities;\n const entitySet = new Set<string>();\n\n for (const entity of entities) {\n this.entityColorMap.set(entity.Name, this.generateEntityColor(entity.Name));\n this.entityIconMap.set(entity.Name, entity.Icon || 'fa-solid fa-table');\n }\n\n // Build available entities for dropdown\n this.availableEntities = entities\n .filter(e => e.IncludeInAPI)\n .map(e => ({ ID: e.ID, Name: e.Name }))\n .sort((a, b) => a.Name.localeCompare(b.Name));\n this.filteredEntitiesList = [...this.availableEntities];\n\n // Build list items\n this.allLists = lists.map(list => {\n const entityName = list.Entity || 'Unknown';\n entitySet.add(entityName);\n return {\n list,\n itemCount: itemCounts.get(list.ID) || 0,\n entityName,\n ownerName: userMap.get(list.UserID) || 'Unknown',\n isOwner: UUIDsEqual(list.UserID, this.currentUserId)\n };\n });\n\n // Build entity filter options\n this.entityOptions = [\n { name: 'All Entities', value: 'all' },\n ...Array.from(entitySet).sort().map(e => ({ name: e, value: e }))\n ];\n\n this.applyFilters();\n this.buildCategoryTree();\n\n // Load sharing info in the background\n this.loadSharingInfo();\n } catch (error) {\n console.error('Error loading lists:', error);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private buildFlatCategories(categories: MJListCategoryEntity[]): Array<{ ID: string; displayName: string }> {\n const result: Array<{ ID: string; displayName: string }> = [];\n const topLevel = categories.filter(c => !c.ParentID);\n\n const processCategory = (cat: MJListCategoryEntity, level: number) => {\n const indent = '\\u00A0\\u00A0'.repeat(level);\n result.push({ ID: cat.ID, displayName: `${indent}${cat.Name}` });\n\n const children = categories.filter(c => UUIDsEqual(c.ParentID, cat.ID));\n for (const child of children) {\n processCategory(child, level + 1);\n }\n };\n\n for (const cat of topLevel) {\n processCategory(cat, 0);\n }\n\n return result;\n }\n\n private buildCategoryTree() {\n const rootNodes: CategoryNode[] = [];\n const categoryNodes = new Map<string, CategoryNode>();\n\n // Create nodes for all categories\n for (const cat of this.categories) {\n categoryNodes.set(cat.ID, {\n category: cat,\n lists: [],\n children: [],\n isExpanded: true\n });\n }\n\n // Build tree structure\n for (const cat of this.categories) {\n const node = categoryNodes.get(cat.ID)!;\n if (cat.ParentID && categoryNodes.has(cat.ParentID)) {\n categoryNodes.get(cat.ParentID)!.children.push(node);\n } else {\n rootNodes.push(node);\n }\n }\n\n // Assign lists to categories\n const uncategorizedLists: BrowseListItem[] = [];\n for (const item of this.filteredLists) {\n if (item.list.CategoryID && categoryNodes.has(item.list.CategoryID)) {\n categoryNodes.get(item.list.CategoryID)!.lists.push(item);\n } else {\n uncategorizedLists.push(item);\n }\n }\n\n // Add uncategorized node if there are uncategorized lists\n if (uncategorizedLists.length > 0) {\n rootNodes.unshift({\n category: null,\n lists: uncategorizedLists,\n children: [],\n isExpanded: true\n });\n }\n\n this.categoryTree = rootNodes;\n }\n\n setViewMode(mode: ViewMode) {\n this.viewMode = mode;\n }\n\n onSearchChange(_term: string) {\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n onEntityFilterChange(_value: string) {\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n onOwnerFilterChange(_value: string) {\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n onSortChange(_value: string) {\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n clearSearch() {\n this.searchTerm = '';\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n clearFilters() {\n this.searchTerm = '';\n this.selectedEntity = 'all';\n this.selectedOwner = 'mine';\n this.applyFilters();\n this.buildCategoryTree();\n }\n\n private applyFilters() {\n let result = [...this.allLists];\n\n // Owner filter\n if (this.selectedOwner === 'mine') {\n result = result.filter(item => item.isOwner);\n } else if (this.selectedOwner === 'others') {\n result = result.filter(item => !item.isOwner);\n }\n\n // Search filter\n if (this.searchTerm) {\n const term = this.searchTerm.toLowerCase();\n result = result.filter(item =>\n item.list.Name.toLowerCase().includes(term) ||\n (item.list.Description && item.list.Description.toLowerCase().includes(term)) ||\n item.entityName.toLowerCase().includes(term) ||\n item.ownerName.toLowerCase().includes(term)\n );\n }\n\n // Entity filter\n if (this.selectedEntity !== 'all') {\n result = result.filter(item => item.entityName === this.selectedEntity);\n }\n\n // Sort\n switch (this.selectedSort) {\n case 'name':\n result.sort((a, b) => a.list.Name.localeCompare(b.list.Name));\n break;\n case 'updated':\n result.sort((a, b) => {\n const dateA = new Date(a.list.__mj_UpdatedAt).getTime();\n const dateB = new Date(b.list.__mj_UpdatedAt).getTime();\n return dateB - dateA;\n });\n break;\n case 'items':\n result.sort((a, b) => b.itemCount - a.itemCount);\n break;\n case 'entity':\n result.sort((a, b) => a.entityName.localeCompare(b.entityName));\n break;\n }\n\n this.filteredLists = result;\n }\n\n toggleCategory(node: CategoryNode) {\n node.isExpanded = !node.isExpanded;\n }\n\n getListCountInCategory(node: CategoryNode): number {\n let count = node.lists.length;\n for (const child of node.children) {\n count += this.getListCountInCategory(child);\n }\n return count;\n }\n\n getEntityColor(entityName: string): string {\n return this.entityColorMap.get(entityName) || '#607D8B';\n }\n\n getEntityIcon(entityName: string): string {\n return this.entityIconMap.get(entityName) || 'fa-solid fa-table';\n }\n\n private generateEntityColor(entityName: string): string {\n let hash = 0;\n for (let i = 0; i < entityName.length; i++) {\n hash = entityName.charCodeAt(i) + ((hash << 5) - hash);\n }\n const colors = [\n '#2196F3', '#4CAF50', '#FF9800', '#9C27B0', '#F44336',\n '#00BCD4', '#795548', '#607D8B', '#E91E63', '#3F51B5'\n ];\n return colors[Math.abs(hash) % colors.length];\n }\n\n formatDate(date: Date): string {\n if (!date) return '';\n const now = new Date();\n const d = new Date(date);\n const diffMs = now.getTime() - d.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n return d.toLocaleDateString();\n }\n\n openList(item: BrowseListItem) {\n const appId = this.Data?.Configuration?.applicationId || '';\n this.tabService.OpenList(item.list.ID, item.list.Name, appId);\n }\n\n openListMenu(event: Event, item: BrowseListItem) {\n event.stopPropagation();\n const mouseEvent = event as MouseEvent;\n this.selectedContextItem = item;\n this.contextMenuX = mouseEvent.clientX;\n this.contextMenuY = mouseEvent.clientY;\n this.showContextMenu = true;\n }\n\n closeContextMenu() {\n this.showContextMenu = false;\n this.selectedContextItem = null;\n }\n\n createNewList() {\n this.editingList = null;\n this.newListName = '';\n this.newListDescription = '';\n this.selectedEntityId = '';\n this.entitySearchTerm = '';\n this.selectedCategoryId = null;\n this.showEntityDropdown = false;\n this.showCreateDialog = true;\n }\n\n editList() {\n if (!this.selectedContextItem) return;\n\n const list = this.selectedContextItem.list;\n this.editingList = list;\n this.newListName = list.Name;\n this.newListDescription = list.Description || '';\n this.selectedEntityId = list.EntityID;\n this.entitySearchTerm = list.Entity || '';\n this.selectedCategoryId = list.CategoryID || null;\n this.showCreateDialog = true;\n this.closeContextMenu();\n }\n\n selectEntity(entity: { ID: string; Name: string }) {\n this.selectedEntityId = entity.ID;\n this.entitySearchTerm = entity.Name;\n this.showEntityDropdown = false;\n }\n\n filterEntities(term: string) {\n const lowerTerm = term.toLowerCase();\n this.filteredEntitiesList = this.availableEntities.filter(e =>\n e.Name.toLowerCase().includes(lowerTerm)\n );\n }\n\n openEntityDropdown(inputElement: HTMLInputElement) {\n const rect = inputElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const dropdownHeight = 200;\n const spaceBelow = viewportHeight - rect.bottom;\n const openAbove = spaceBelow < dropdownHeight && rect.top > dropdownHeight;\n\n this.entityDropdownPosition = {\n top: openAbove ? rect.top - dropdownHeight : rect.bottom,\n left: rect.left,\n width: rect.width,\n openAbove\n };\n this.showEntityDropdown = true;\n this.filteredEntitiesList = [...this.availableEntities];\n }\n\n closeEntityDropdown() {\n this.showEntityDropdown = false;\n }\n\n async duplicateList() {\n if (!this.selectedContextItem) return;\n\n const listToDuplicate = this.selectedContextItem.list;\n this.closeContextMenu();\n\n this.isLoading = true;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const rv = new RunView();\n\n const newList = await md.GetEntityObject<MJListEntity>('MJ: Lists');\n newList.Name = `${listToDuplicate.Name} (Copy)`;\n newList.Description = listToDuplicate.Description;\n newList.EntityID = listToDuplicate.EntityID;\n newList.CategoryID = listToDuplicate.CategoryID;\n newList.UserID = md.CurrentUser!.ID;\n\n const listSaved = await newList.Save();\n if (!listSaved) {\n this.notificationService.CreateSimpleNotification('Failed to duplicate list', 'error', 4000);\n return;\n }\n\n const itemsResult = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${listToDuplicate.ID}'`,\n ResultType: 'entity_object'\n });\n\n if (itemsResult.Success && itemsResult.Results.length > 0) {\n let copiedCount = 0;\n for (const item of itemsResult.Results) {\n const newItem = await md.GetEntityObject<MJListDetailEntity>('MJ: List Details');\n newItem.ListID = newList.ID;\n newItem.RecordID = item.RecordID;\n newItem.Sequence = item.Sequence;\n const itemSaved = await newItem.Save();\n if (itemSaved) copiedCount++;\n }\n this.notificationService.CreateSimpleNotification(\n `List duplicated with ${copiedCount} item${copiedCount !== 1 ? 's' : ''}`,\n 'success',\n 3000\n );\n } else {\n this.notificationService.CreateSimpleNotification('List duplicated successfully', 'success', 3000);\n }\n\n await this.loadData();\n } catch (error) {\n console.error('Error duplicating list:', error);\n this.notificationService.CreateSimpleNotification('Error duplicating list. Please try again.', 'error', 4000);\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n confirmDeleteList() {\n if (!this.selectedContextItem) return;\n this.listToDelete = this.selectedContextItem.list;\n this.deleteListName = this.selectedContextItem.list.Name;\n this.showDeleteConfirm = true;\n this.closeContextMenu();\n }\n\n cancelDelete() {\n this.showDeleteConfirm = false;\n this.listToDelete = null;\n this.deleteListName = '';\n }\n\n async deleteList() {\n if (!this.listToDelete) return;\n\n const listToDelete = this.listToDelete;\n const listName = listToDelete.Name;\n\n this.isDeleting = true;\n this.cdr.detectChanges();\n\n try {\n const deleted = await listToDelete.Delete();\n if (deleted) {\n this.notificationService.CreateSimpleNotification(`\"${listName}\" deleted`, 'success', 3000);\n } else {\n const errorMessage = listToDelete.LatestResult?.Message || 'Unknown error occurred';\n console.error('Failed to delete list:', listToDelete.LatestResult);\n this.notificationService.CreateSimpleNotification(`Failed to delete list: ${errorMessage}`, 'error', 6000);\n }\n this.cancelDelete();\n await this.loadData();\n } catch (error) {\n console.error('Error deleting list:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.notificationService.CreateSimpleNotification(`Error deleting list: ${errorMessage}`, 'error', 6000);\n } finally {\n this.isDeleting = false;\n this.cdr.detectChanges();\n }\n }\n\n closeCreateDialog() {\n this.showCreateDialog = false;\n this.editingList = null;\n this.showEntityDropdown = false;\n }\n\n async saveList() {\n this.isSaving = true;\n this.cdr.detectChanges();\n\n const isEditing = !!this.editingList;\n const listName = this.newListName;\n\n try {\n const md = new Metadata();\n let list: MJListEntity;\n\n if (this.editingList) {\n list = this.editingList;\n } else {\n list = await md.GetEntityObject<MJListEntity>('MJ: Lists');\n list.UserID = md.CurrentUser!.ID;\n list.EntityID = this.selectedEntityId;\n }\n\n list.Name = this.newListName;\n list.Description = this.newListDescription || null;\n list.CategoryID = this.selectedCategoryId || null;\n\n const saved = await list.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n isEditing ? `\"${listName}\" updated` : `\"${listName}\" created`,\n 'success',\n 3000\n );\n this.closeCreateDialog();\n await this.loadData();\n } else {\n const errorMessage = list.LatestResult?.Message || 'Unknown error occurred';\n const action = isEditing ? 'update' : 'create';\n console.error(`Failed to ${action} list:`, list.LatestResult);\n this.notificationService.CreateSimpleNotification(\n `Failed to ${action} list: ${errorMessage}`,\n 'error',\n 6000\n );\n }\n } catch (error) {\n console.error('Error saving list:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.notificationService.CreateSimpleNotification(`Error saving list: ${errorMessage}`, 'error', 6000);\n } finally {\n this.isSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n // Sharing methods\n openShareDialog() {\n if (!this.selectedContextItem) return;\n\n const item = this.selectedContextItem;\n this.shareDialogConfig = {\n listId: item.list.ID,\n listName: item.list.Name,\n currentUserId: this.currentUserId,\n isOwner: item.isOwner\n };\n this.showShareDialog = true;\n this.closeContextMenu();\n }\n\n onShareComplete(_result: ListShareDialogResult) {\n this.showShareDialog = false;\n this.shareDialogConfig = null;\n // Reload sharing info for all lists\n this.loadSharingInfo();\n this.cdr.detectChanges();\n }\n\n onShareCancel() {\n this.showShareDialog = false;\n this.shareDialogConfig = null;\n }\n\n private async loadSharingInfo() {\n // Load sharing summaries for all lists that the user owns\n const ownedLists = this.allLists.filter(item => item.isOwner);\n\n for (const item of ownedLists) {\n try {\n const summary = await this.listSharingService.getListSharingSummary(item.list.ID);\n item.sharingInfo = summary;\n } catch (error) {\n console.error(`Error loading sharing info for list ${item.list.ID}:`, error);\n }\n }\n\n this.cdr.detectChanges();\n }\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Lists';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-list-check';\n }\n}\n"]}
|
|
@@ -47,6 +47,7 @@ export declare class ListsCategoriesResource extends BaseResourceComponent imple
|
|
|
47
47
|
toggleExpand(event: Event, vm: CategoryViewModel): void;
|
|
48
48
|
expandNode(event: Event, vm: CategoryViewModel): void;
|
|
49
49
|
collapseNode(event: Event, vm: CategoryViewModel): void;
|
|
50
|
+
IsCategorySelected(category: MJListCategoryEntity): boolean;
|
|
50
51
|
selectCategory(category: MJListCategoryEntity): void;
|
|
51
52
|
getParentCategoryName(category: MJListCategoryEntity): string | null;
|
|
52
53
|
getSelectedCategoryListCount(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lists-categories-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Lists/components/lists-categories-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;;AACzE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAi4Ba,uBAAwB,SAAQ,qBAAsB,YAAW,SAAS;IA6BnF,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,mBAAmB;IA7B7B,OAAO,CAAC,QAAQ,CAAuB;IAEvC,SAAS,UAAQ;IACjB,UAAU,EAAE,oBAAoB,EAAE,CAAM;IACxC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAC7C,gBAAgB,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACrD,qBAAqB,EAAE,YAAY,EAAE,CAAM;IAG3C,UAAU,UAAS;IACnB,eAAe,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACpD,UAAU,SAAM;IAChB,iBAAiB,SAAM;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,gBAAgB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAGzE,QAAQ,UAAS;IAGjB,iBAAiB,UAAS;IAC1B,oBAAoB,SAAM;IAC1B,OAAO,CAAC,gBAAgB,CAAqC;IAE7D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,WAAW,CAAgD;gBAGzD,GAAG,EAAE,iBAAiB,EACtB,mBAAmB,EAAE,qBAAqB;IAK9C,QAAQ;IAKd,WAAW;IAKL,QAAQ;IAyDd,OAAO,CAAC,uBAAuB;IA8B/B,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,cAAc;IAOtB,qBAAqB,IAAI,iBAAiB,EAAE;IAI5C,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,EAAE;IAIrE,WAAW,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO;IAIpD,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB;IAKhD,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB;IAO9C,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB;IAOhD,cAAc,CAAC,QAAQ,EAAE,oBAAoB;IAK7C,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI;IAKpE,4BAA4B,IAAI,MAAM;IAKtC,6BAA6B,IAAI,MAAM;IAKvC,cAAc;IASd,YAAY;IAUZ,cAAc;IAoBd,YAAY;IAMN,aAAa;IAgCnB,WAAW;IAKL,YAAY;IA0DZ,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"lists-categories-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Lists/components/lists-categories-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;;AACzE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAi4Ba,uBAAwB,SAAQ,qBAAsB,YAAW,SAAS;IA6BnF,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,mBAAmB;IA7B7B,OAAO,CAAC,QAAQ,CAAuB;IAEvC,SAAS,UAAQ;IACjB,UAAU,EAAE,oBAAoB,EAAE,CAAM;IACxC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAC7C,gBAAgB,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACrD,qBAAqB,EAAE,YAAY,EAAE,CAAM;IAG3C,UAAU,UAAS;IACnB,eAAe,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACpD,UAAU,SAAM;IAChB,iBAAiB,SAAM;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,gBAAgB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAGzE,QAAQ,UAAS;IAGjB,iBAAiB,UAAS;IAC1B,oBAAoB,SAAM;IAC1B,OAAO,CAAC,gBAAgB,CAAqC;IAE7D,OAAO,CAAC,iBAAiB,CAA0C;IACnE,OAAO,CAAC,WAAW,CAAgD;gBAGzD,GAAG,EAAE,iBAAiB,EACtB,mBAAmB,EAAE,qBAAqB;IAK9C,QAAQ;IAKd,WAAW;IAKL,QAAQ;IAyDd,OAAO,CAAC,uBAAuB;IA8B/B,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,cAAc;IAOtB,qBAAqB,IAAI,iBAAiB,EAAE;IAI5C,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,EAAE;IAIrE,WAAW,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO;IAIpD,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB;IAKhD,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB;IAO9C,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB;IAOhD,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO;IAI3D,cAAc,CAAC,QAAQ,EAAE,oBAAoB;IAK7C,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI;IAKpE,4BAA4B,IAAI,MAAM;IAKtC,6BAA6B,IAAI,MAAM;IAKvC,cAAc;IASd,YAAY;IAUZ,cAAc;IAoBd,YAAY;IAMN,aAAa;IAgCnB,WAAW;IAKL,YAAY;IA0DZ,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAzWpD,uBAAuB;2CAAvB,uBAAuB;CA4WnC"}
|