@memberjunction/ng-explorer-core 6.1.0-edge.4 → 6.1.0-edge.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +19 -0
  2. package/dist/generated/lazy-feature-config.d.ts.map +1 -1
  3. package/dist/generated/lazy-feature-config.js +12 -6
  4. package/dist/generated/lazy-feature-config.js.map +1 -1
  5. package/dist/lib/about/about-dialog.component.js +4 -4
  6. package/dist/lib/about/about-dialog.component.js.map +1 -1
  7. package/dist/lib/command-palette/command-palette.component.d.ts +13 -0
  8. package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
  9. package/dist/lib/command-palette/command-palette.component.js +106 -42
  10. package/dist/lib/command-palette/command-palette.component.js.map +1 -1
  11. package/dist/lib/conversation-feedback/conversation-feedback.js +1 -1
  12. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +1 -1
  13. package/dist/lib/oauth/oauth-callback.component.js +1 -1
  14. package/dist/lib/omnibar/omnibar-palette.component.d.ts.map +1 -1
  15. package/dist/lib/omnibar/omnibar-palette.component.js +9 -3
  16. package/dist/lib/omnibar/omnibar-palette.component.js.map +1 -1
  17. package/dist/lib/omnibar/providers/omnibar-record.provider.d.ts.map +1 -1
  18. package/dist/lib/omnibar/providers/omnibar-record.provider.js +9 -3
  19. package/dist/lib/omnibar/providers/omnibar-record.provider.js.map +1 -1
  20. package/dist/lib/profile/profile-dialog.component.js +1 -1
  21. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
  22. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +13 -12
  23. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
  24. package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +24 -0
  25. package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -0
  26. package/dist/lib/resource-wrappers/chat-deeplink-params.js +27 -0
  27. package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -0
  28. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +7 -0
  29. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
  30. package/dist/lib/resource-wrappers/dashboard-resource.component.js +29 -14
  31. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  32. package/dist/lib/resource-wrappers/list-detail-resource.component.js +1 -1
  33. package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
  34. package/dist/lib/resource-wrappers/query-resource.component.js +1 -1
  35. package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
  36. package/dist/lib/resource-wrappers/record-resource.component.d.ts +3 -0
  37. package/dist/lib/resource-wrappers/record-resource.component.d.ts.map +1 -1
  38. package/dist/lib/resource-wrappers/record-resource.component.js +18 -4
  39. package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
  40. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
  41. package/dist/lib/resource-wrappers/search-results-resource.component.js +6 -2
  42. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  43. package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
  44. package/dist/lib/resource-wrappers/view-resource.component.js +6 -3
  45. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  46. package/dist/lib/server-connectivity/server-connectivity-banner.component.d.ts +20 -8
  47. package/dist/lib/server-connectivity/server-connectivity-banner.component.d.ts.map +1 -1
  48. package/dist/lib/server-connectivity/server-connectivity-banner.component.js +25 -20
  49. package/dist/lib/server-connectivity/server-connectivity-banner.component.js.map +1 -1
  50. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +2 -2
  51. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
  52. package/dist/lib/shell/components/header/app-nav.component.js +1 -1
  53. package/dist/lib/shell/components/header/app-switcher.component.js +82 -83
  54. package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
  55. package/dist/lib/shell/components/record-open/record-bar.component.js +1 -1
  56. package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
  57. package/dist/lib/shell/components/record-open/record-switcher-sheet.component.js +1 -1
  58. package/dist/lib/shell/components/record-open/records-hub-pill.component.js +1 -1
  59. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +25 -0
  60. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  61. package/dist/lib/shell/components/tabs/tab-container.component.js +88 -4
  62. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  63. package/dist/lib/shell/services/sharing-center-dialog-host.component.js +2 -2
  64. package/dist/lib/shell/services/sharing-center-dialog-host.component.js.map +1 -1
  65. package/dist/lib/shell/shell-chrome-policy.d.ts +54 -0
  66. package/dist/lib/shell/shell-chrome-policy.d.ts.map +1 -0
  67. package/dist/lib/shell/shell-chrome-policy.js +62 -0
  68. package/dist/lib/shell/shell-chrome-policy.js.map +1 -0
  69. package/dist/lib/shell/shell.component.d.ts +42 -0
  70. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  71. package/dist/lib/shell/shell.component.js +394 -255
  72. package/dist/lib/shell/shell.component.js.map +1 -1
  73. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +1 -1
  74. package/dist/lib/single-dashboard/single-dashboard.component.js +1 -1
  75. package/dist/lib/single-list-detail/single-list-detail.component.d.ts +9 -0
  76. package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
  77. package/dist/lib/single-list-detail/single-list-detail.component.js +34 -15
  78. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  79. package/dist/lib/single-record/single-record.component.d.ts +10 -0
  80. package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
  81. package/dist/lib/single-record/single-record.component.js +23 -3
  82. package/dist/lib/single-record/single-record.component.js.map +1 -1
  83. package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
  84. package/dist/lib/single-search-result/single-search-result.component.js +5 -2
  85. package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
  86. package/dist/lib/user-notifications/user-notifications.component.js +11 -12
  87. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  88. package/dist/lib/user-profile/user-profile.component.js +1 -1
  89. package/dist/public-api.d.ts +1 -0
  90. package/dist/public-api.d.ts.map +1 -1
  91. package/dist/public-api.js +1 -0
  92. package/dist/public-api.js.map +1 -1
  93. package/package.json +62 -62
@@ -161,7 +161,7 @@ export class EditDashboardComponent {
161
161
  i0.ɵɵstyleProp("grid-template-columns", "repeat(" + ctx.config.columns + ", 1fr)")("grid-auto-rows", ctx.config.rowHeight + "px");
162
162
  i0.ɵɵadvance();
163
163
  i0.ɵɵrepeater(ctx._items);
164
- } }, dependencies: [i1.MJButtonDirective, i1.MJWindowComponent], styles: [".edit-dashboard-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.5));\n z-index: 999;\n}\n\n.custom-dialog-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n flex: 1;\n}\n\n.custom-dialog-body[_ngcontent-%COMP%] .dialog-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n padding: 16px;\n box-sizing: border-box;\n}\n\n.dialog-content[_ngcontent-%COMP%] .dialog-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 12px;\n}\n\n.dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n width: auto;\n height: 40px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n padding: 8px 16px;\n}\n\n.dialog-footer-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 0;\n}\n\n\n\n.mj-tile-layout[_ngcontent-%COMP%] {\n display: grid;\n gap: 12px;\n background: var(--mj-bg-surface);\n}\n\n.mj-tile-item[_ngcontent-%COMP%] {\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n}\n\n.mj-tile-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, white);\n font-weight: 500;\n font-size: 14px;\n}\n\n.mj-tile-header-title[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n}\n\n.remove-item-btn[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n.mj-tile-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n background: var(--mj-bg-surface-sunken);\n}\n\n\n\n.add-dropdown-wrapper[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.add-dropdown-arrow[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-left: 4px;\n}\n\n.add-dropdown-panel[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n min-width: 200px;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n z-index: 100;\n overflow: hidden;\n}\n\n.add-dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 10px 16px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.add-dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-dropdown-item-text[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}"] });
164
+ } }, dependencies: [i1.MJButtonDirective, i1.MJWindowComponent], styles: [".edit-dashboard-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.5));\n z-index: 999;\n}\n\n.custom-dialog-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n flex: 1;\n}\n\n.custom-dialog-body[_ngcontent-%COMP%] .dialog-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n padding: 16px;\n box-sizing: border-box;\n}\n\n.dialog-content[_ngcontent-%COMP%] .dialog-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 12px;\n}\n\n.dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n width: auto;\n height: 40px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n padding: 8px 16px;\n}\n\n.dialog-footer-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 0;\n}\n\n\n.mj-tile-layout[_ngcontent-%COMP%] {\n display: grid;\n gap: 12px;\n background: var(--mj-bg-surface);\n}\n\n.mj-tile-item[_ngcontent-%COMP%] {\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n}\n\n.mj-tile-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, white);\n font-weight: 500;\n font-size: 14px;\n}\n\n.mj-tile-header-title[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n}\n\n.remove-item-btn[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n.mj-tile-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n background: var(--mj-bg-surface-sunken);\n}\n\n\n.add-dropdown-wrapper[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.add-dropdown-arrow[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-left: 4px;\n}\n\n.add-dropdown-panel[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n min-width: 200px;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n z-index: 100;\n overflow: hidden;\n}\n\n.add-dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 10px 16px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.add-dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-dropdown-item-text[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}"] });
165
165
  }
166
166
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditDashboardComponent, [{
167
167
  type: Component,
@@ -480,7 +480,7 @@ export class SingleDashboardComponent extends BaseDashboard {
480
480
  i0.ɵɵconditional(ctx.items.length === 0 && !ctx.isEditingDashboard ? 12 : -1);
481
481
  i0.ɵɵadvance();
482
482
  i0.ɵɵconditional(ctx.items.length > 0 || ctx.isEditingDashboard ? 13 : -1);
483
- } }, styles: ["[_nghost-%COMP%] {\n display: block;\n padding: 20px;\n height: 100%;\n box-sizing: border-box;\n}\n\n.dashboard-container[_ngcontent-%COMP%] {\n height: calc(100% - 60px);\n overflow: auto;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 15px;\n}\n\n.dashboard-star-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 22px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin: 0;\n cursor: pointer;\n}\n\n.dashboard-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.dashboard-header[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n align-items: center;\n justify-content: flex-end;\n}\n\n.button-spacing[_ngcontent-%COMP%] {\n margin-right: 8px;\n}\n\n.btn-wrapper[_ngcontent-%COMP%] {\n display: flex;\n gap: 5px;\n}\n\n.btn-wrapper[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n margin-left: 5px;\n}\n\n.main-head-dashboard[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.tile-resource-container[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding: 15px;\n border-radius: 8px;\n background-color: var(--mj-bg-surface-card);\n}\n\n\n\n.mj-tile-layout[_ngcontent-%COMP%] {\n display: grid;\n gap: 16px;\n background: var(--mj-bg-surface);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n border-radius: 8px;\n padding: 10px;\n}\n\n.mj-tile-item[_ngcontent-%COMP%] {\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n}\n\n.mj-tile-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 15px;\n font-weight: 500;\n background-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, white);\n}\n\n.mj-tile-header[_ngcontent-%COMP%] .item-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.mj-tile-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n}\n\n.bg-light-grey[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.bg-dark-grey[_ngcontent-%COMP%] {\n background-color: var(--mj-text-secondary);\n color: var(--mj-text-inverse, white);\n}\n\n.bg-blue[_ngcontent-%COMP%] {\n background-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, white);\n}\n\n\n\n.empty-dashboard[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: var(--mj-text-secondary);\n background-color: var(--mj-bg-surface-card);\n border-radius: 8px;\n margin-top: 20px;\n}\n\n.empty-dashboard[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-border-strong);\n}\n\n.empty-dashboard[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.empty-dashboard[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}"] });
483
+ } }, styles: ["[_nghost-%COMP%] {\n display: block;\n padding: 20px;\n height: 100%;\n box-sizing: border-box;\n}\n\n.dashboard-container[_ngcontent-%COMP%] {\n height: calc(100% - 60px);\n overflow: auto;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 15px;\n}\n\n.dashboard-star-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 22px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin: 0;\n cursor: pointer;\n}\n\n.dashboard-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.dashboard-header[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n align-items: center;\n justify-content: flex-end;\n}\n\n.button-spacing[_ngcontent-%COMP%] {\n margin-right: 8px;\n}\n\n.btn-wrapper[_ngcontent-%COMP%] {\n display: flex;\n gap: 5px;\n}\n\n.btn-wrapper[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n margin-left: 5px;\n}\n\n.main-head-dashboard[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.tile-resource-container[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding: 15px;\n border-radius: 8px;\n background-color: var(--mj-bg-surface-card);\n}\n\n\n.mj-tile-layout[_ngcontent-%COMP%] {\n display: grid;\n gap: 16px;\n background: var(--mj-bg-surface);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n border-radius: 8px;\n padding: 10px;\n}\n\n.mj-tile-item[_ngcontent-%COMP%] {\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n}\n\n.mj-tile-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 15px;\n font-weight: 500;\n background-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, white);\n}\n\n.mj-tile-header[_ngcontent-%COMP%] .item-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.mj-tile-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n}\n\n.bg-light-grey[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface-sunken);\n}\n\n.bg-dark-grey[_ngcontent-%COMP%] {\n background-color: var(--mj-text-secondary);\n color: var(--mj-text-inverse, white);\n}\n\n.bg-blue[_ngcontent-%COMP%] {\n background-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, white);\n}\n\n\n.empty-dashboard[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: var(--mj-text-secondary);\n background-color: var(--mj-bg-surface-card);\n border-radius: 8px;\n margin-top: 20px;\n}\n\n.empty-dashboard[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-border-strong);\n}\n\n.empty-dashboard[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.empty-dashboard[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}"] });
484
484
  }
485
485
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SingleDashboardComponent, [{
486
486
  type: Component,
@@ -181,6 +181,15 @@ export declare class SingleListDetailComponent extends BaseAngularComponent impl
181
181
  executeExport(): Promise<void>;
182
182
  toggleAddDropdown(): void;
183
183
  onDropdownItemClick(item: NewItemOption): void;
184
+ /**
185
+ * Predicate selecting the underlying entity rows that are members of a list. For a
186
+ * single-column key membership is filtered SERVER-SIDE via a subquery on the List Details
187
+ * view (RecordID holds the raw key value), so no member id round-trips to the client and no
188
+ * IN(...) clause breaks on a large list. A composite key stores RecordID as "F1|v1||F2|v2",
189
+ * which no single column can be compared to, so the member ids are fetched and each expanded
190
+ * to its full key predicate.
191
+ */
192
+ private buildListMemberFilter;
184
193
  /**
185
194
  * Apply the chosen status to all selected list-detail rows. Re-uses
186
195
  * the existing extract-record-id-from-composite-key logic to map
@@ -1 +1 @@
1
- {"version":3,"file":"single-list-detail.component.d.ts","sourceRoot":"","sources":["../../../src/lib/single-list-detail/single-list-detail.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"single-list-detail.component.d.ts","sourceRoot":"","sources":["../../../src/lib/single-list-detail/single-list-detail.component.ts"],"names":[],"mappings":"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"}
@@ -334,7 +334,7 @@ function SingleListDetailComponent_Conditional_14_Conditional_3_Conditional_8_Fo
334
334
  i0.ɵɵelementStart(0, "div", 77);
335
335
  i0.ɵɵlistener("click", function SingleListDetailComponent_Conditional_14_Conditional_3_Conditional_8_For_2_Template_div_click_0_listener() { const target_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.selectMoveCopyTarget(target_r12)); });
336
336
  i0.ɵɵelementStart(1, "div", 78)(2, "input", 79);
337
- i0.ɵɵlistener("click", function SingleListDetailComponent_Conditional_14_Conditional_3_Conditional_8_For_2_Template_input_click_2_listener($event) { i0.ɵɵrestoreView(_r11); return i0.ɵɵresetView($event.stopPropagation()); })("change", function SingleListDetailComponent_Conditional_14_Conditional_3_Conditional_8_For_2_Template_input_change_2_listener() { const target_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.selectMoveCopyTarget(target_r12)); });
337
+ i0.ɵɵlistener("click", function SingleListDetailComponent_Conditional_14_Conditional_3_Conditional_8_For_2_Template_input_click_2_listener($event) { return $event.stopPropagation(); })("change", function SingleListDetailComponent_Conditional_14_Conditional_3_Conditional_8_For_2_Template_input_change_2_listener() { const target_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.selectMoveCopyTarget(target_r12)); });
338
338
  i0.ɵɵelementEnd()();
339
339
  i0.ɵɵelementStart(3, "div", 80)(4, "strong");
340
340
  i0.ɵɵtext(5);
@@ -520,7 +520,7 @@ function SingleListDetailComponent_Conditional_16_Conditional_3_Conditional_10_F
520
520
  function SingleListDetailComponent_Conditional_16_Conditional_3_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
521
521
  const _r19 = i0.ɵɵgetCurrentView();
522
522
  i0.ɵɵelementStart(0, "input", 104);
523
- i0.ɵɵlistener("click", function SingleListDetailComponent_Conditional_16_Conditional_3_Conditional_10_For_9_Conditional_3_Template_input_click_0_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); })("change", function SingleListDetailComponent_Conditional_16_Conditional_3_Conditional_10_For_9_Conditional_3_Template_input_change_0_listener() { i0.ɵɵrestoreView(_r19); const record_r18 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleRecordSelection(record_r18)); });
523
+ i0.ɵɵlistener("click", function SingleListDetailComponent_Conditional_16_Conditional_3_Conditional_10_For_9_Conditional_3_Template_input_click_0_listener($event) { return $event.stopPropagation(); })("change", function SingleListDetailComponent_Conditional_16_Conditional_3_Conditional_10_For_9_Conditional_3_Template_input_change_0_listener() { i0.ɵɵrestoreView(_r19); const record_r18 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleRecordSelection(record_r18)); });
524
524
  i0.ɵɵelementEnd();
525
525
  } if (rf & 2) {
526
526
  const record_r18 = i0.ɵɵnextContext().$implicit;
@@ -763,7 +763,7 @@ function SingleListDetailComponent_Conditional_18_Conditional_5_Conditional_4_Fo
763
763
  i0.ɵɵelementStart(0, "div", 129);
764
764
  i0.ɵɵlistener("click", function SingleListDetailComponent_Conditional_18_Conditional_5_Conditional_4_For_1_Template_div_click_0_listener() { const view_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleViewSelection(view_r25)); });
765
765
  i0.ɵɵelementStart(1, "input", 104);
766
- i0.ɵɵlistener("click", function SingleListDetailComponent_Conditional_18_Conditional_5_Conditional_4_For_1_Template_input_click_1_listener($event) { i0.ɵɵrestoreView(_r24); return i0.ɵɵresetView($event.stopPropagation()); })("change", function SingleListDetailComponent_Conditional_18_Conditional_5_Conditional_4_For_1_Template_input_change_1_listener() { const view_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleViewSelection(view_r25)); });
766
+ i0.ɵɵlistener("click", function SingleListDetailComponent_Conditional_18_Conditional_5_Conditional_4_For_1_Template_input_click_1_listener($event) { return $event.stopPropagation(); })("change", function SingleListDetailComponent_Conditional_18_Conditional_5_Conditional_4_For_1_Template_input_change_1_listener() { const view_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleViewSelection(view_r25)); });
767
767
  i0.ɵɵelementEnd();
768
768
  i0.ɵɵelement(2, "span", 130);
769
769
  i0.ɵɵelementStart(3, "span", 131);
@@ -1305,7 +1305,6 @@ export class SingleListDetailComponent extends BaseAngularComponent {
1305
1305
  try {
1306
1306
  const md = this.ProviderToUse;
1307
1307
  const entityInfo = md.EntityByID(this.listRecord.EntityID);
1308
- const pk = entityInfo.PrimaryKeys[0].Name;
1309
1308
  // Cheap emptiness check before doing any row work
1310
1309
  const rv = RunView.FromMetadataProvider(md);
1311
1310
  const countResult = await rv.RunView({
@@ -1319,16 +1318,13 @@ export class SingleListDetailComponent extends BaseAngularComponent {
1319
1318
  return;
1320
1319
  }
1321
1320
  // Pull underlying entity rows restricted to the chosen fields, with
1322
- // membership filtered SERVER-SIDE via a subquery (same pattern the
1323
- // member grid uses). This avoids round-tripping every member ID to
1324
- // the client and building an IN(...) clause that breaks on large
1325
- // lists. Always include the PK so the projection round-trips cleanly.
1326
- const listDetailInfo = md.EntityByName('MJ: List Details');
1327
- const listDetailsView = `${listDetailInfo?.SchemaName ?? '__mj'}.${listDetailInfo?.BaseView ?? 'vwListDetails'}`;
1328
- const fieldsForQuery = Array.from(new Set([pk, ...selectedFields]));
1321
+ // membership filtered by buildListMemberFilter (server-side subquery
1322
+ // for a single-column key). Always include the key column(s) so the
1323
+ // projection round-trips cleanly.
1324
+ const fieldsForQuery = Array.from(new Set([...entityInfo.PrimaryKeys.map((pk) => pk.Name), ...selectedFields]));
1329
1325
  const rowResult = await rv.RunView({
1330
1326
  EntityName: entityInfo.Name,
1331
- ExtraFilter: `${pk} IN (SELECT RecordID FROM ${listDetailsView} WHERE ListID='${this.listRecord.ID}')`,
1327
+ ExtraFilter: await this.buildListMemberFilter(entityInfo, this.listRecord.ID, rv),
1332
1328
  Fields: fieldsForQuery,
1333
1329
  ResultType: 'simple',
1334
1330
  });
@@ -1380,6 +1376,29 @@ export class SingleListDetailComponent extends BaseAngularComponent {
1380
1376
  }
1381
1377
  }
1382
1378
  // ==========================================
1379
+ /**
1380
+ * Predicate selecting the underlying entity rows that are members of a list. For a
1381
+ * single-column key membership is filtered SERVER-SIDE via a subquery on the List Details
1382
+ * view (RecordID holds the raw key value), so no member id round-trips to the client and no
1383
+ * IN(...) clause breaks on a large list. A composite key stores RecordID as "F1|v1||F2|v2",
1384
+ * which no single column can be compared to, so the member ids are fetched and each expanded
1385
+ * to its full key predicate.
1386
+ */
1387
+ async buildListMemberFilter(entityInfo, listId, rv) {
1388
+ if (entityInfo.PrimaryKeys.length === 1) {
1389
+ const listDetailInfo = this.ProviderToUse.EntityByName('MJ: List Details');
1390
+ const listDetailsView = `${listDetailInfo?.SchemaName ?? '__mj'}.${listDetailInfo?.BaseView ?? 'vwListDetails'}`;
1391
+ return `${entityInfo.FirstPrimaryKey.Name} IN (SELECT RecordID FROM ${listDetailsView} WHERE ListID='${listId}')`; // first-pk-ok: guarded by PrimaryKeys.length === 1 above
1392
+ }
1393
+ const members = await rv.RunView({
1394
+ EntityName: 'MJ: List Details',
1395
+ ExtraFilter: `ListID='${listId}'`,
1396
+ Fields: ['RecordID'],
1397
+ ResultType: 'simple',
1398
+ });
1399
+ const clauses = (members.Results ?? []).map((m) => `(${CompositeKey.FromURLSegment(entityInfo, m.RecordID).ToWhereClause()})`);
1400
+ return clauses.length > 0 ? clauses.join(' OR ') : '1=0';
1401
+ }
1383
1402
  /**
1384
1403
  * Apply the chosen status to all selected list-detail rows. Re-uses
1385
1404
  * the existing extract-record-id-from-composite-key logic to map
@@ -1884,7 +1903,6 @@ export class SingleListDetailComponent extends BaseAngularComponent {
1884
1903
  // (first non-PK/non-FK/non-system field). Text-typed fields also
1885
1904
  // drive the LIKE search so name-less entities remain searchable.
1886
1905
  const displayField = GetRecordDisplayField(sourceEntityInfo);
1887
- const pkField = sourceEntityInfo.FirstPrimaryKey?.Name || 'ID';
1888
1906
  let filter;
1889
1907
  if (displayField.Field && IsTextSearchableField(displayField.Field)) {
1890
1908
  filter = `${displayField.Field.Name} LIKE '%${searchText.replace(/'/g, "''")}%'`;
@@ -1898,7 +1916,8 @@ export class SingleListDetailComponent extends BaseAngularComponent {
1898
1916
  });
1899
1917
  if (result.Success) {
1900
1918
  this.addableRecords = result.Results.map((record) => {
1901
- const recordId = String(record[pkField]);
1919
+ // Compact key segment (raw value, or "F1|v1||F2|v2" for a composite key) — the form ListDetail.RecordID stores
1920
+ const recordId = CompositeKey.FromEntityRecord(sourceEntityInfo, record).ToCompactURLSegment();
1902
1921
  return {
1903
1922
  ID: recordId,
1904
1923
  Name: displayField.Field
@@ -2170,7 +2189,7 @@ export class SingleListDetailComponent extends BaseAngularComponent {
2170
2189
  i0.ɵɵconditional(ctx.showExportDialog && ctx.listRecord ? 17 : -1);
2171
2190
  i0.ɵɵadvance();
2172
2191
  i0.ɵɵconditional(ctx.showAddFromViewDialog ? 18 : -1);
2173
- } }, dependencies: [i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i4.DefaultValueAccessor, i4.CheckboxControlValueAccessor, i4.SelectControlValueAccessor, i4.RadioControlValueAccessor, i4.NgControlStatus, i4.NgModel, i5.MJProgressBarComponent, i6.LoadingComponent, i7.ListDetailGridComponent, i3.ListDeltaConfirmComponent, i3.ListStatsComponent, i3.TagChipsComponent, i5.MJButtonDirective, i5.MJDialogComponent, i5.MJDialogActionsComponent, i5.MJEmptyStateComponent, i8.DatePipe], styles: [".list-detail-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 20px;\n background: var(--mj-bg-surface-card);\n}\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 16px;\n flex-shrink: 0;\n gap: 16px;\n}\n\n.list-header__titleblock[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.list-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.lineage-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\n color: var(--mj-text-secondary);\n font-size: 12px;\n width: fit-content;\n}\n\n.lineage-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.lineage-badge__refreshed[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.refresh-mode-select[_ngcontent-%COMP%] {\n min-width: 100px;\n font-size: 13px;\n}\n\n.bulk-status-select[_ngcontent-%COMP%] {\n min-width: 130px;\n font-size: 13px;\n}\n\n\n\n\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.permission-badge--viewer[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n\n.list-detail__tags[_ngcontent-%COMP%] {\n margin-top: 8px;\n}\n\n\n\n\n.grid-with-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 280px;\n gap: 16px;\n flex: 1;\n min-height: 0;\n}\n\n.list-detail__stats[_ngcontent-%COMP%] {\n min-width: 0;\n overflow-y: auto;\n}\n\n@media (max-width: 900px) {\n .grid-with-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .list-detail__stats[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n\n.custom-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-bottom: none;\n border-radius: 8px 8px 0 0;\n flex-shrink: 0;\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.row-count[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.selection-count[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.toolbar-button[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n}\n\n.toolbar-button[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.remove-btn[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 200px;\n}\n\n.grid-container[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0 0 8px 8px;\n overflow: hidden;\n}\n\n\n\n.add-dropdown-wrapper[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.add-btn[_ngcontent-%COMP%] {\n font-size: 16px;\n padding: 8px 25px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.add-dropdown-arrow[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-left: 4px;\n}\n\n.add-dropdown-panel[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n min-width: 240px;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n z-index: 100;\n overflow: hidden;\n}\n\n.add-dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 10px 16px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.add-dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-dropdown-item-text[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.add-dropdown-item-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n\n\n\n\n\n.dialog-content[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.dialog-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n gap: 20px;\n}\n\n.dialog-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 20px;\n}\n\n.warning-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-status-warning);\n margin-bottom: 16px;\n display: block;\n}\n\n.dialog-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 8px 0;\n font-size: 15px;\n color: var(--mj-text-primary);\n}\n\n.dialog-note[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary) !important;\n font-size: 13px !important;\n}\n\n.progress-bar[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 300px;\n}\n\n\n\n\n\n\n.add-records-dialog[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.search-section[_ngcontent-%COMP%] {\n padding-bottom: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n margin-bottom: 12px;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n pointer-events: none;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 32px;\n}\n\n.search-hint[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n color: var(--mj-text-disabled);\n margin-top: 6px;\n}\n\n.records-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.list-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 40px;\n}\n\n.selection-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n margin-bottom: 8px;\n}\n\n.selection-info[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.records-scroll[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n max-height: 280px;\n}\n\n.record-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-radius: 6px;\n cursor: pointer;\n transition: background-color 0.15s;\n gap: 12px;\n}\n\n.record-item[_ngcontent-%COMP%]:hover:not(.in-list) {\n background: var(--mj-bg-surface-card);\n}\n\n.record-item.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.record-item.in-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n cursor: default;\n opacity: 0.7;\n}\n\n.record-checkbox[_ngcontent-%COMP%] {\n width: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.record-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.in-list-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n font-size: 14px;\n}\n\n.record-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.in-list-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 10px;\n font-weight: 500;\n}\n\n\n\n\n\n\n.dialog-instruction[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.views-list[_ngcontent-%COMP%] {\n max-height: 320px;\n overflow-y: auto;\n}\n\n.view-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px;\n border-radius: 6px;\n cursor: pointer;\n transition: background-color 0.15s;\n gap: 12px;\n}\n\n.view-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.view-item.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.view-item[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.view-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 16px;\n}\n\n.view-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n\n\n.export-dialog[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 8px; }\n.export-section-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n margin-bottom: 8px;\n}\n.export-format-row[_ngcontent-%COMP%] { display: flex; gap: 8px; }\n.export-format-option[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n background: var(--mj-bg-surface);\n}\n.export-format-option--selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n.export-format-option[_ngcontent-%COMP%] input[type=\"radio\"][_ngcontent-%COMP%] { margin: 0; }\n.export-section-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 16px 0;\n}\n.export-fields-list[_ngcontent-%COMP%] {\n max-height: 280px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n.export-field-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 13px;\n cursor: pointer;\n}\n.export-field-row[_ngcontent-%COMP%]:last-child { border-bottom: none; }\n.export-field-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.export-field-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 8px;\n align-items: center;\n font-size: 11.5px;\n}\n.export-field-actions[_ngcontent-%COMP%] a[_ngcontent-%COMP%] { color: var(--mj-text-link); }\n.export-field-actions[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n margin-left: auto;\n color: var(--mj-text-muted);\n}"] });
2192
+ } }, dependencies: [i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i4.DefaultValueAccessor, i4.CheckboxControlValueAccessor, i4.SelectControlValueAccessor, i4.RadioControlValueAccessor, i4.NgControlStatus, i4.NgModel, i5.MJProgressBarComponent, i6.LoadingComponent, i7.ListDetailGridComponent, i3.ListDeltaConfirmComponent, i3.ListStatsComponent, i3.TagChipsComponent, i5.MJButtonDirective, i5.MJDialogComponent, i5.MJDialogActionsComponent, i5.MJEmptyStateComponent, i8.DatePipe], styles: [".list-detail-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 20px;\n background: var(--mj-bg-surface-card);\n}\n\n.list-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 16px;\n flex-shrink: 0;\n gap: 16px;\n}\n\n.list-header__titleblock[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.list-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.lineage-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\n color: var(--mj-text-secondary);\n font-size: 12px;\n width: fit-content;\n}\n\n.lineage-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.lineage-badge__refreshed[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.refresh-mode-select[_ngcontent-%COMP%] {\n min-width: 100px;\n font-size: 13px;\n}\n\n.bulk-status-select[_ngcontent-%COMP%] {\n min-width: 130px;\n font-size: 13px;\n}\n\n\n\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.permission-badge--viewer[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n.list-detail__tags[_ngcontent-%COMP%] {\n margin-top: 8px;\n}\n\n\n\n.grid-with-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 280px;\n gap: 16px;\n flex: 1;\n min-height: 0;\n}\n\n.list-detail__stats[_ngcontent-%COMP%] {\n min-width: 0;\n overflow-y: auto;\n}\n\n@media (max-width: 900px) {\n .grid-with-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .list-detail__stats[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n.custom-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-bottom: none;\n border-radius: 8px 8px 0 0;\n flex-shrink: 0;\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.row-count[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.selection-count[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.toolbar-button[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n}\n\n.toolbar-button[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.remove-btn[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n min-height: 200px;\n}\n\n.grid-container[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0 0 8px 8px;\n overflow: hidden;\n}\n\n\n.add-dropdown-wrapper[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.add-btn[_ngcontent-%COMP%] {\n font-size: 16px;\n padding: 8px 25px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.add-dropdown-arrow[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-left: 4px;\n}\n\n.add-dropdown-panel[_ngcontent-%COMP%] {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 4px;\n min-width: 240px;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n z-index: 100;\n overflow: hidden;\n}\n\n.add-dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n padding: 10px 16px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.add-dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-dropdown-item-text[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.add-dropdown-item-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n\n\n\n\n.dialog-content[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.dialog-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n gap: 20px;\n}\n\n.dialog-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 20px;\n}\n\n.warning-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-status-warning);\n margin-bottom: 16px;\n display: block;\n}\n\n.dialog-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 8px 0;\n font-size: 15px;\n color: var(--mj-text-primary);\n}\n\n.dialog-note[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary) !important;\n font-size: 13px !important;\n}\n\n.progress-bar[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 300px;\n}\n\n\n\n\n\n.add-records-dialog[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.search-section[_ngcontent-%COMP%] {\n padding-bottom: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n margin-bottom: 12px;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n pointer-events: none;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 32px;\n}\n\n.search-hint[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n color: var(--mj-text-disabled);\n margin-top: 6px;\n}\n\n.records-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.list-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 40px;\n}\n\n.selection-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n margin-bottom: 8px;\n}\n\n.selection-info[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.records-scroll[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n max-height: 280px;\n}\n\n.record-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-radius: 6px;\n cursor: pointer;\n transition: background-color 0.15s;\n gap: 12px;\n}\n\n.record-item[_ngcontent-%COMP%]:hover:not(.in-list) {\n background: var(--mj-bg-surface-card);\n}\n\n.record-item.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.record-item.in-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n cursor: default;\n opacity: 0.7;\n}\n\n.record-checkbox[_ngcontent-%COMP%] {\n width: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.record-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.in-list-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n font-size: 14px;\n}\n\n.record-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.in-list-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 10px;\n font-weight: 500;\n}\n\n\n\n\n\n.dialog-instruction[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.views-list[_ngcontent-%COMP%] {\n max-height: 320px;\n overflow-y: auto;\n}\n\n.view-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px;\n border-radius: 6px;\n cursor: pointer;\n transition: background-color 0.15s;\n gap: 12px;\n}\n\n.view-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.view-item.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.view-item[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.view-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 16px;\n}\n\n.view-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n\n.export-dialog[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 8px; }\n.export-section-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n margin-bottom: 8px;\n}\n.export-format-row[_ngcontent-%COMP%] { display: flex; gap: 8px; }\n.export-format-option[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n background: var(--mj-bg-surface);\n}\n.export-format-option--selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n.export-format-option[_ngcontent-%COMP%] input[type=\"radio\"][_ngcontent-%COMP%] { margin: 0; }\n.export-section-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 16px 0;\n}\n.export-fields-list[_ngcontent-%COMP%] {\n max-height: 280px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n.export-field-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 13px;\n cursor: pointer;\n}\n.export-field-row[_ngcontent-%COMP%]:last-child { border-bottom: none; }\n.export-field-row[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.export-field-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 8px;\n align-items: center;\n font-size: 11.5px;\n}\n.export-field-actions[_ngcontent-%COMP%] a[_ngcontent-%COMP%] { color: var(--mj-text-link); }\n.export-field-actions[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n margin-left: auto;\n color: var(--mj-text-muted);\n}"] });
2174
2193
  }
2175
2194
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SingleListDetailComponent, [{
2176
2195
  type: Component,