@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.
- package/README.md +19 -0
- package/dist/generated/lazy-feature-config.d.ts.map +1 -1
- package/dist/generated/lazy-feature-config.js +12 -6
- package/dist/generated/lazy-feature-config.js.map +1 -1
- package/dist/lib/about/about-dialog.component.js +4 -4
- package/dist/lib/about/about-dialog.component.js.map +1 -1
- package/dist/lib/command-palette/command-palette.component.d.ts +13 -0
- package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
- package/dist/lib/command-palette/command-palette.component.js +106 -42
- package/dist/lib/command-palette/command-palette.component.js.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.js +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +1 -1
- package/dist/lib/oauth/oauth-callback.component.js +1 -1
- package/dist/lib/omnibar/omnibar-palette.component.d.ts.map +1 -1
- package/dist/lib/omnibar/omnibar-palette.component.js +9 -3
- package/dist/lib/omnibar/omnibar-palette.component.js.map +1 -1
- package/dist/lib/omnibar/providers/omnibar-record.provider.d.ts.map +1 -1
- package/dist/lib/omnibar/providers/omnibar-record.provider.js +9 -3
- package/dist/lib/omnibar/providers/omnibar-record.provider.js.map +1 -1
- package/dist/lib/profile/profile-dialog.component.js +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +13 -12
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +24 -0
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-deeplink-params.js +27 -0
- package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -0
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +7 -0
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +29 -14
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/list-detail-resource.component.js +1 -1
- package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/query-resource.component.js +1 -1
- package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/record-resource.component.d.ts +3 -0
- package/dist/lib/resource-wrappers/record-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/record-resource.component.js +18 -4
- package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +6 -2
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +6 -3
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/server-connectivity/server-connectivity-banner.component.d.ts +20 -8
- package/dist/lib/server-connectivity/server-connectivity-banner.component.d.ts.map +1 -1
- package/dist/lib/server-connectivity/server-connectivity-banner.component.js +25 -20
- package/dist/lib/server-connectivity/server-connectivity-banner.component.js.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +2 -2
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.js +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.js +82 -83
- package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
- package/dist/lib/shell/components/record-open/record-bar.component.js +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
- package/dist/lib/shell/components/record-open/record-switcher-sheet.component.js +1 -1
- package/dist/lib/shell/components/record-open/records-hub-pill.component.js +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +25 -0
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +88 -4
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/services/sharing-center-dialog-host.component.js +2 -2
- package/dist/lib/shell/services/sharing-center-dialog-host.component.js.map +1 -1
- package/dist/lib/shell/shell-chrome-policy.d.ts +54 -0
- package/dist/lib/shell/shell-chrome-policy.d.ts.map +1 -0
- package/dist/lib/shell/shell-chrome-policy.js +62 -0
- package/dist/lib/shell/shell-chrome-policy.js.map +1 -0
- package/dist/lib/shell/shell.component.d.ts +42 -0
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +394 -255
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts +9 -0
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +34 -15
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.d.ts +10 -0
- package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
- package/dist/lib/single-record/single-record.component.js +23 -3
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.js +5 -2
- package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +11 -12
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/lib/user-profile/user-profile.component.js +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- 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
|
|
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
|
|
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":"AAAA,OAAO,EAAoB,MAAM,EAAE,SAAS,EAAa,iBAAiB,EAAgB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5H,OAAO,EAAkD,YAAY,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACvI,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAwB,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAC1J,OAAO,EAAE,kBAAkB,EAA0E,MAAM,oCAAoC,CAAC;AAChJ,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE;;GAEG;AACH,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAMa,yBAA0B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAqK5F,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,kBAAkB;IAvKZ,MAAM,EAAE,MAAM,CAAM;IAEpC;;;;;OAKG;IACI,mBAAmB,SAAK;IAC/B,OAAO,CAAC,gBAAgB;IAEK,cAAc,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAG1E,UAAU,EAAE,YAAY,GAAG,IAAI,CAAQ;IACvC,UAAU,EAAE,OAAO,CAAS;IAM5B,YAAY,EAAE,gBAAgB,CAA8B;IAC5D,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAMjD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAIrC,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,EAAE,CAAM;IAClF,oBAAoB,UAAS;IAM7B,kBAAkB,UAAS;IAC3B,YAAY,EAAE,MAAM,GAAG,MAAM,CAAU;IACvC,oBAAoB,SAAM;IAC1B,wBAAwB,EAAE,YAAY,EAAE,CAAM;IAC9C,+BAA+B,UAAS;IACxC,sBAAsB,EAAE,YAAY,GAAG,IAAI,CAAQ;IACnD,kBAAkB,UAAS;IAC3B,gBAAgB,SAAK;IACrB,aAAa,SAAK;IAMlB,uBAAuB,UAAS;IAChC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAQ;IAKnC,gBAAgB,UAAS;IACzB,YAAY,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAW;IACjD,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAM;IACnF,iBAAiB,SAAK;IACtB,WAAW,UAAS;IACpB,WAAW,EAAE,eAAe,CAAc;IAC1C,mBAAmB,UAAS;IAC5B,iBAAiB,UAAS;IAC1B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAQ;IACtC,qBAAqB,UAAS;IAG9B,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,MAAM,CAAK;IAGrB,iBAAiB,EAAE,iBAAiB,CAQzC;IAGK,gBAAgB,EAAE,OAAO,CAAS;IAClC,UAAU,EAAE,OAAO,CAAS;IAC5B,cAAc,EAAE,MAAM,CAAK;IAC3B,WAAW,EAAE,MAAM,CAAK;IAGxB,oBAAoB,EAAE,OAAO,CAAS;IACtC,gBAAgB,EAAE,OAAO,CAAS;IAClC,eAAe,EAAE,OAAO,CAAS;IACjC,cAAc,EAAE,aAAa,EAAE,CAAM;IACrC,sBAAsB,EAAE,MAAM,CAAM;IAE3C,6EAA6E;IAC7E,IAAW,sBAAsB,IAAI,MAAM,CAE1C;IAEM,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC/C,WAAW,EAAE,MAAM,CAAK;IACxB,QAAQ,EAAE,MAAM,CAAK;IAC5B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAuB;IAGhC,qBAAqB,EAAE,OAAO,CAAS;IACvC,qBAAqB,EAAE,OAAO,CAAS;IACvC,SAAS,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAAQ;IACpD,cAAc,EAAE,wBAAwB,EAAE,CAAM;IACvD;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAAkC;IACpD,mBAAmB,EAAE,MAAM,CAAK;IAChC,gBAAgB,EAAE,MAAM,CAAK;IACpC;;;;;;;OAOG;IACI,0BAA0B,EAAE,MAAM,CAAK;IACvC,qBAAqB,EAAE,OAAO,CAAS;IAGvC,eAAe,EAAE,OAAO,CAAS;IAGjC,UAAU,EAAE,aAAa,EAAE,CAahC;IAGF,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;gBAU9B,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB;IASzC,WAAW,IAAI,IAAI;IAKnB,QAAQ,IAAI,IAAI;IAWvB;;OAEG;YACW,cAAc;IAgC5B;;;;;;;OAOG;YACW,kBAAkB;IAgBhC;;;;;OAKG;YACW,gBAAgB;IAmC9B,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,gBAAgB;IAQxB;;;;OAIG;IACU,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB1C,sBAAsB,IAAI,IAAI;IAMxB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC/D,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAQvD,YAAY,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAInD,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAIzD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAIvC,YAAY,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIjD,WAAW,IAAI,IAAI;IAcnB,IAAI,qBAAqB,IAAI,MAAM,CAElC;IAED,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED;;kDAE8C;IAC9C,OAAO,CAAC,sBAAsB;IAO9B,cAAc,IAAI,IAAI;IAItB,aAAa,IAAI,IAAI;IAIrB;;;;;OAKG;IACI,gBAAgB,IAAI,IAAI;IAkCxB,iBAAiB,IAAI,IAAI;IAKzB,qBAAqB,IAAI,IAAI;IAG7B,sBAAsB,IAAI,IAAI;IAGrC,IAAW,wBAAwB,IAAI,MAAM,CAE5C;IAED;;;;;;OAMG;IACU,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA8E3C,iBAAiB,IAAI,IAAI;IAIzB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAQ9C;;;;;;;OAOG;YACW,qBAAqB;IAgBnC;;;;OAIG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA6FtC,cAAc,IAAI,IAAI;IACtB,cAAc,IAAI,IAAI;IAE7B,OAAO,CAAC,kBAAkB;IAiBnB,mBAAmB,IAAI,IAAI;IAO3B,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIvD,IAAW,uBAAuB,IAAI,YAAY,EAAE,CAOnD;IAED,IAAW,uBAAuB,IAAI,MAAM,CAE3C;IAED;;mEAE+D;YACjD,mBAAmB;IAkCjC;;;;OAIG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IActC,mBAAmB,IAAI,IAAI;IASrB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAahC;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAyBtB;;;;;OAKG;YACW,aAAa;IAgH3B,gBAAgB,IAAI,IAAI;IAQxB,iBAAiB,IAAI,IAAI;IAOnB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmFtC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3C,qBAAqB,IAAI,IAAI;YAUf,yBAAyB;IAkBvC,4BAA4B,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKhD,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;YAK/B,aAAa;IAuD3B,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAKlD,IAAI,sBAAsB,IAAI,aAAa,EAAE,CAE5C;IAED,gBAAgB,IAAI,IAAI;IAMxB,kBAAkB,IAAI,IAAI;IAIpB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6DlC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C,sBAAsB,IAAI,IAAI;YAShB,eAAe;IAwB7B,mBAAmB,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI;IAWzD,cAAc,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO;IAIjD,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;yCA30C9B,yBAAyB;2CAAzB,yBAAyB;CAg7CrC"}
|
|
@@ -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) {
|
|
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) {
|
|
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) {
|
|
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
|
|
1323
|
-
//
|
|
1324
|
-
//
|
|
1325
|
-
|
|
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:
|
|
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
|
-
|
|
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,
|