@memberjunction/ng-entity-viewer 4.4.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/confirm-dialog/confirm-dialog.component.d.ts +84 -0
- package/dist/lib/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
- package/dist/lib/confirm-dialog/confirm-dialog.component.js +166 -0
- package/dist/lib/confirm-dialog/confirm-dialog.component.js.map +1 -0
- package/dist/lib/duplicate-view-dialog/duplicate-view-dialog.component.d.ts +44 -0
- package/dist/lib/duplicate-view-dialog/duplicate-view-dialog.component.d.ts.map +1 -0
- package/dist/lib/duplicate-view-dialog/duplicate-view-dialog.component.js +182 -0
- package/dist/lib/duplicate-view-dialog/duplicate-view-dialog.component.js.map +1 -0
- package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts +1 -1
- package/dist/lib/entity-data-grid/entity-data-grid.component.js +2 -2
- package/dist/lib/entity-data-grid/entity-data-grid.component.js.map +1 -1
- package/dist/lib/entity-grid/entity-grid.component.d.ts +216 -0
- package/dist/lib/entity-grid/entity-grid.component.d.ts.map +1 -0
- package/dist/lib/entity-grid/entity-grid.component.js +676 -0
- package/dist/lib/entity-grid/entity-grid.component.js.map +1 -0
- package/dist/lib/quick-save-dialog/quick-save-dialog.component.d.ts +94 -0
- package/dist/lib/quick-save-dialog/quick-save-dialog.component.d.ts.map +1 -0
- package/dist/lib/quick-save-dialog/quick-save-dialog.component.js +362 -0
- package/dist/lib/quick-save-dialog/quick-save-dialog.component.js.map +1 -0
- package/dist/lib/shared-view-warning-dialog/shared-view-warning-dialog.component.d.ts +37 -0
- package/dist/lib/shared-view-warning-dialog/shared-view-warning-dialog.component.d.ts.map +1 -0
- package/dist/lib/shared-view-warning-dialog/shared-view-warning-dialog.component.js +100 -0
- package/dist/lib/shared-view-warning-dialog/shared-view-warning-dialog.component.js.map +1 -0
- package/dist/lib/types.d.ts +41 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +0 -3
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/view-config-panel/view-config-panel.component.d.ts +63 -4
- package/dist/lib/view-config-panel/view-config-panel.component.d.ts.map +1 -1
- package/dist/lib/view-config-panel/view-config-panel.component.js +692 -557
- package/dist/lib/view-config-panel/view-config-panel.component.js.map +1 -1
- package/dist/lib/view-header/view-header.component.d.ts +86 -0
- package/dist/lib/view-header/view-header.component.d.ts.map +1 -0
- package/dist/lib/view-header/view-header.component.js +216 -0
- package/dist/lib/view-header/view-header.component.js.map +1 -0
- package/dist/module.d.ts +12 -7
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +29 -4
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +10 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Style variants for the confirm button
|
|
5
|
+
*/
|
|
6
|
+
export type ConfirmButtonStyle = 'primary' | 'danger';
|
|
7
|
+
/**
|
|
8
|
+
* ConfirmDialogComponent - Generic reusable confirmation dialog
|
|
9
|
+
*
|
|
10
|
+
* Used for:
|
|
11
|
+
* - Delete view confirmation
|
|
12
|
+
* - Filter mode switch warning (data loss)
|
|
13
|
+
* - Revert unsaved changes
|
|
14
|
+
* - Any action requiring user confirmation
|
|
15
|
+
*
|
|
16
|
+
* Follows the same @if backdrop + .dialog-panel.open pattern as AggregateSetupDialogComponent.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```html
|
|
20
|
+
* <mj-ev-confirm-dialog
|
|
21
|
+
* [IsOpen]="showDeleteConfirm"
|
|
22
|
+
* Title="Delete View"
|
|
23
|
+
* Message="Are you sure you want to delete this view?"
|
|
24
|
+
* DetailMessage="This action cannot be undone."
|
|
25
|
+
* ConfirmText="Delete"
|
|
26
|
+
* ConfirmStyle="danger"
|
|
27
|
+
* Icon="fa-solid fa-trash"
|
|
28
|
+
* (Confirmed)="onDeleteConfirmed()"
|
|
29
|
+
* (Cancelled)="showDeleteConfirm = false">
|
|
30
|
+
* </mj-ev-confirm-dialog>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare class ConfirmDialogComponent {
|
|
34
|
+
/**
|
|
35
|
+
* Whether the dialog is open
|
|
36
|
+
*/
|
|
37
|
+
IsOpen: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Dialog title
|
|
40
|
+
*/
|
|
41
|
+
Title: string;
|
|
42
|
+
/**
|
|
43
|
+
* Primary message to display
|
|
44
|
+
*/
|
|
45
|
+
Message: string;
|
|
46
|
+
/**
|
|
47
|
+
* Optional secondary detail message (shown smaller, below primary)
|
|
48
|
+
*/
|
|
49
|
+
DetailMessage: string;
|
|
50
|
+
/**
|
|
51
|
+
* Text for the confirm button
|
|
52
|
+
* @default 'Confirm'
|
|
53
|
+
*/
|
|
54
|
+
ConfirmText: string;
|
|
55
|
+
/**
|
|
56
|
+
* Text for the cancel button
|
|
57
|
+
* @default 'Cancel'
|
|
58
|
+
*/
|
|
59
|
+
CancelText: string;
|
|
60
|
+
/**
|
|
61
|
+
* Style variant for the confirm button
|
|
62
|
+
* 'primary' = blue, 'danger' = red
|
|
63
|
+
* @default 'primary'
|
|
64
|
+
*/
|
|
65
|
+
ConfirmStyle: ConfirmButtonStyle;
|
|
66
|
+
/**
|
|
67
|
+
* Font Awesome icon class for the dialog header
|
|
68
|
+
* @default 'fa-solid fa-circle-question'
|
|
69
|
+
*/
|
|
70
|
+
Icon: string;
|
|
71
|
+
/**
|
|
72
|
+
* Emitted when user clicks the confirm button
|
|
73
|
+
*/
|
|
74
|
+
Confirmed: EventEmitter<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Emitted when user clicks cancel or backdrop
|
|
77
|
+
*/
|
|
78
|
+
Cancelled: EventEmitter<void>;
|
|
79
|
+
OnConfirm(): void;
|
|
80
|
+
OnCancel(): void;
|
|
81
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmDialogComponent, never>;
|
|
82
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmDialogComponent, "mj-ev-confirm-dialog", never, { "IsOpen": { "alias": "IsOpen"; "required": false; }; "Title": { "alias": "Title"; "required": false; }; "Message": { "alias": "Message"; "required": false; }; "DetailMessage": { "alias": "DetailMessage"; "required": false; }; "ConfirmText": { "alias": "ConfirmText"; "required": false; }; "CancelText": { "alias": "CancelText"; "required": false; }; "ConfirmStyle": { "alias": "ConfirmStyle"; "required": false; }; "Icon": { "alias": "Icon"; "required": false; }; }, { "Confirmed": "Confirmed"; "Cancelled": "Cancelled"; }, never, never, false, never>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=confirm-dialog.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/lib/confirm-dialog/confirm-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;;AAEvE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAMa,sBAAsB;IACjC;;OAEG;IACM,MAAM,EAAE,OAAO,CAAS;IAEjC;;OAEG;IACM,KAAK,EAAE,MAAM,CAAa;IAEnC;;OAEG;IACM,OAAO,EAAE,MAAM,CAAmB;IAE3C;;OAEG;IACM,aAAa,EAAE,MAAM,CAAM;IAEpC;;;OAGG;IACM,WAAW,EAAE,MAAM,CAAa;IAEzC;;;OAGG;IACM,UAAU,EAAE,MAAM,CAAY;IAEvC;;;;OAIG;IACM,YAAY,EAAE,kBAAkB,CAAa;IAEtD;;;OAGG;IACM,IAAI,EAAE,MAAM,CAAiC;IAEtD;;OAEG;IACO,SAAS,qBAA4B;IAE/C;;OAEG;IACO,SAAS,qBAA4B;IAE/C,SAAS,IAAI,IAAI;IAIjB,QAAQ,IAAI,IAAI;yCA5DL,sBAAsB;2CAAtB,sBAAsB;CA+DlC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
function ConfirmDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
4
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
5
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
6
|
+
i0.ɵɵlistener("click", function ConfirmDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnCancel()); });
|
|
7
|
+
i0.ɵɵelementEnd();
|
|
8
|
+
} }
|
|
9
|
+
function ConfirmDialogComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
+
i0.ɵɵelementStart(0, "p", 8);
|
|
11
|
+
i0.ɵɵtext(1);
|
|
12
|
+
i0.ɵɵelementEnd();
|
|
13
|
+
} if (rf & 2) {
|
|
14
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
15
|
+
i0.ɵɵadvance();
|
|
16
|
+
i0.ɵɵtextInterpolate(ctx_r1.DetailMessage);
|
|
17
|
+
} }
|
|
18
|
+
/**
|
|
19
|
+
* ConfirmDialogComponent - Generic reusable confirmation dialog
|
|
20
|
+
*
|
|
21
|
+
* Used for:
|
|
22
|
+
* - Delete view confirmation
|
|
23
|
+
* - Filter mode switch warning (data loss)
|
|
24
|
+
* - Revert unsaved changes
|
|
25
|
+
* - Any action requiring user confirmation
|
|
26
|
+
*
|
|
27
|
+
* Follows the same @if backdrop + .dialog-panel.open pattern as AggregateSetupDialogComponent.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```html
|
|
31
|
+
* <mj-ev-confirm-dialog
|
|
32
|
+
* [IsOpen]="showDeleteConfirm"
|
|
33
|
+
* Title="Delete View"
|
|
34
|
+
* Message="Are you sure you want to delete this view?"
|
|
35
|
+
* DetailMessage="This action cannot be undone."
|
|
36
|
+
* ConfirmText="Delete"
|
|
37
|
+
* ConfirmStyle="danger"
|
|
38
|
+
* Icon="fa-solid fa-trash"
|
|
39
|
+
* (Confirmed)="onDeleteConfirmed()"
|
|
40
|
+
* (Cancelled)="showDeleteConfirm = false">
|
|
41
|
+
* </mj-ev-confirm-dialog>
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class ConfirmDialogComponent {
|
|
45
|
+
/**
|
|
46
|
+
* Whether the dialog is open
|
|
47
|
+
*/
|
|
48
|
+
IsOpen = false;
|
|
49
|
+
/**
|
|
50
|
+
* Dialog title
|
|
51
|
+
*/
|
|
52
|
+
Title = 'Confirm';
|
|
53
|
+
/**
|
|
54
|
+
* Primary message to display
|
|
55
|
+
*/
|
|
56
|
+
Message = 'Are you sure?';
|
|
57
|
+
/**
|
|
58
|
+
* Optional secondary detail message (shown smaller, below primary)
|
|
59
|
+
*/
|
|
60
|
+
DetailMessage = '';
|
|
61
|
+
/**
|
|
62
|
+
* Text for the confirm button
|
|
63
|
+
* @default 'Confirm'
|
|
64
|
+
*/
|
|
65
|
+
ConfirmText = 'Confirm';
|
|
66
|
+
/**
|
|
67
|
+
* Text for the cancel button
|
|
68
|
+
* @default 'Cancel'
|
|
69
|
+
*/
|
|
70
|
+
CancelText = 'Cancel';
|
|
71
|
+
/**
|
|
72
|
+
* Style variant for the confirm button
|
|
73
|
+
* 'primary' = blue, 'danger' = red
|
|
74
|
+
* @default 'primary'
|
|
75
|
+
*/
|
|
76
|
+
ConfirmStyle = 'primary';
|
|
77
|
+
/**
|
|
78
|
+
* Font Awesome icon class for the dialog header
|
|
79
|
+
* @default 'fa-solid fa-circle-question'
|
|
80
|
+
*/
|
|
81
|
+
Icon = 'fa-solid fa-circle-question';
|
|
82
|
+
/**
|
|
83
|
+
* Emitted when user clicks the confirm button
|
|
84
|
+
*/
|
|
85
|
+
Confirmed = new EventEmitter();
|
|
86
|
+
/**
|
|
87
|
+
* Emitted when user clicks cancel or backdrop
|
|
88
|
+
*/
|
|
89
|
+
Cancelled = new EventEmitter();
|
|
90
|
+
OnConfirm() {
|
|
91
|
+
this.Confirmed.emit();
|
|
92
|
+
}
|
|
93
|
+
OnCancel() {
|
|
94
|
+
this.Cancelled.emit();
|
|
95
|
+
}
|
|
96
|
+
static ɵfac = function ConfirmDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ConfirmDialogComponent)(); };
|
|
97
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConfirmDialogComponent, selectors: [["mj-ev-confirm-dialog"]], inputs: { IsOpen: "IsOpen", Title: "Title", Message: "Message", DetailMessage: "DetailMessage", ConfirmText: "ConfirmText", CancelText: "CancelText", ConfirmStyle: "ConfirmStyle", Icon: "Icon" }, outputs: { Confirmed: "Confirmed", Cancelled: "Cancelled" }, standalone: false, decls: 18, vars: 14, consts: [[1, "dialog-backdrop"], [1, "dialog-panel"], [1, "dialog-header"], [1, "header-title"], ["title", "Close", 1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "dialog-content"], [1, "message"], [1, "detail-message"], [1, "dialog-footer"], [1, "btn", "btn-confirm", 3, "click"], [1, "btn", "btn-cancel", 3, "click"], [1, "dialog-backdrop", 3, "click"]], template: function ConfirmDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
98
|
+
i0.ɵɵconditionalCreate(0, ConfirmDialogComponent_Conditional_0_Template, 1, 0, "div", 0);
|
|
99
|
+
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
100
|
+
i0.ɵɵelement(4, "i");
|
|
101
|
+
i0.ɵɵelementStart(5, "span");
|
|
102
|
+
i0.ɵɵtext(6);
|
|
103
|
+
i0.ɵɵelementEnd()();
|
|
104
|
+
i0.ɵɵelementStart(7, "button", 4);
|
|
105
|
+
i0.ɵɵlistener("click", function ConfirmDialogComponent_Template_button_click_7_listener() { return ctx.OnCancel(); });
|
|
106
|
+
i0.ɵɵelement(8, "i", 5);
|
|
107
|
+
i0.ɵɵelementEnd()();
|
|
108
|
+
i0.ɵɵelementStart(9, "div", 6)(10, "p", 7);
|
|
109
|
+
i0.ɵɵtext(11);
|
|
110
|
+
i0.ɵɵelementEnd();
|
|
111
|
+
i0.ɵɵconditionalCreate(12, ConfirmDialogComponent_Conditional_12_Template, 2, 1, "p", 8);
|
|
112
|
+
i0.ɵɵelementEnd();
|
|
113
|
+
i0.ɵɵelementStart(13, "div", 9)(14, "button", 10);
|
|
114
|
+
i0.ɵɵlistener("click", function ConfirmDialogComponent_Template_button_click_14_listener() { return ctx.OnConfirm(); });
|
|
115
|
+
i0.ɵɵtext(15);
|
|
116
|
+
i0.ɵɵelementEnd();
|
|
117
|
+
i0.ɵɵelementStart(16, "button", 11);
|
|
118
|
+
i0.ɵɵlistener("click", function ConfirmDialogComponent_Template_button_click_16_listener() { return ctx.OnCancel(); });
|
|
119
|
+
i0.ɵɵtext(17);
|
|
120
|
+
i0.ɵɵelementEnd()()();
|
|
121
|
+
} if (rf & 2) {
|
|
122
|
+
i0.ɵɵconditional(ctx.IsOpen ? 0 : -1);
|
|
123
|
+
i0.ɵɵadvance();
|
|
124
|
+
i0.ɵɵclassProp("open", ctx.IsOpen);
|
|
125
|
+
i0.ɵɵadvance(3);
|
|
126
|
+
i0.ɵɵclassMap(ctx.Icon);
|
|
127
|
+
i0.ɵɵadvance(2);
|
|
128
|
+
i0.ɵɵtextInterpolate(ctx.Title);
|
|
129
|
+
i0.ɵɵadvance(5);
|
|
130
|
+
i0.ɵɵtextInterpolate(ctx.Message);
|
|
131
|
+
i0.ɵɵadvance();
|
|
132
|
+
i0.ɵɵconditional(ctx.DetailMessage ? 12 : -1);
|
|
133
|
+
i0.ɵɵadvance(2);
|
|
134
|
+
i0.ɵɵclassProp("btn-primary", ctx.ConfirmStyle === "primary")("btn-danger", ctx.ConfirmStyle === "danger");
|
|
135
|
+
i0.ɵɵadvance();
|
|
136
|
+
i0.ɵɵtextInterpolate1(" ", ctx.ConfirmText, " ");
|
|
137
|
+
i0.ɵɵadvance(2);
|
|
138
|
+
i0.ɵɵtextInterpolate1(" ", ctx.CancelText, " ");
|
|
139
|
+
} }, styles: ["\n\n.dialog-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 2000;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.dialog-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.95);\n width: 420px;\n max-width: calc(100vw - 40px);\n background: white;\n border-radius: 16px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 2001;\n display: flex;\n flex-direction: column;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dialog-panel.open[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n transform: translate(-50%, -50%) scale(1);\n}\n\n\n\n.dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 18px 24px;\n border-bottom: 1px solid #e5e7eb;\n background: #f8fafc;\n border-radius: 16px 16px 0 0;\n}\n\n.header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 17px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.header-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n font-size: 18px;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: #6b7280;\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n color: #374151;\n}\n\n\n\n.dialog-content[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.message[_ngcontent-%COMP%] {\n font-size: 15px;\n color: #374151;\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-message[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n line-height: 1.5;\n margin: 12px 0 0 0;\n}\n\n\n\n.dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 24px;\n border-top: 1px solid #e5e7eb;\n background: #f8fafc;\n border-radius: 0 0 16px 16px;\n}\n\n\n\n.btn[_ngcontent-%COMP%] {\n padding: 9px 20px;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-confirm.btn-primary[_ngcontent-%COMP%] {\n background: #3b82f6;\n color: white;\n}\n\n.btn-confirm.btn-primary[_ngcontent-%COMP%]:hover {\n background: #2563eb;\n}\n\n.btn-confirm.btn-danger[_ngcontent-%COMP%] {\n background: #ef4444;\n color: white;\n}\n\n.btn-confirm.btn-danger[_ngcontent-%COMP%]:hover {\n background: #dc2626;\n}\n\n.btn-cancel[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #374151;\n}\n\n.btn-cancel[_ngcontent-%COMP%]:hover {\n background: #e5e7eb;\n}"] });
|
|
140
|
+
}
|
|
141
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConfirmDialogComponent, [{
|
|
142
|
+
type: Component,
|
|
143
|
+
args: [{ standalone: false, selector: 'mj-ev-confirm-dialog', template: "<!-- Dialog Backdrop -->\n@if (IsOpen) {\n <div class=\"dialog-backdrop\" (click)=\"OnCancel()\"></div>\n}\n\n<!-- Dialog Panel -->\n<div class=\"dialog-panel\" [class.open]=\"IsOpen\">\n <!-- Header -->\n <div class=\"dialog-header\">\n <div class=\"header-title\">\n <i [class]=\"Icon\"></i>\n <span>{{ Title }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"OnCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"dialog-content\">\n <p class=\"message\">{{ Message }}</p>\n @if (DetailMessage) {\n <p class=\"detail-message\">{{ DetailMessage }}</p>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"dialog-footer\">\n <button\n class=\"btn btn-confirm\"\n [class.btn-primary]=\"ConfirmStyle === 'primary'\"\n [class.btn-danger]=\"ConfirmStyle === 'danger'\"\n (click)=\"OnConfirm()\">\n {{ ConfirmText }}\n </button>\n <button class=\"btn btn-cancel\" (click)=\"OnCancel()\">\n {{ CancelText }}\n </button>\n </div>\n</div>\n", styles: ["/* Dialog Backdrop */\n.dialog-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 2000;\n animation: fadeIn 0.2s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Dialog Panel */\n.dialog-panel {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.95);\n width: 420px;\n max-width: calc(100vw - 40px);\n background: white;\n border-radius: 16px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 2001;\n display: flex;\n flex-direction: column;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dialog-panel.open {\n opacity: 1;\n pointer-events: auto;\n transform: translate(-50%, -50%) scale(1);\n}\n\n/* Dialog Header */\n.dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 18px 24px;\n border-bottom: 1px solid #e5e7eb;\n background: #f8fafc;\n border-radius: 16px 16px 0 0;\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 17px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.header-title i {\n color: #3b82f6;\n font-size: 18px;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: #6b7280;\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-btn:hover {\n background: #f3f4f6;\n color: #374151;\n}\n\n/* Dialog Content */\n.dialog-content {\n padding: 24px;\n}\n\n.message {\n font-size: 15px;\n color: #374151;\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-message {\n font-size: 13px;\n color: #6b7280;\n line-height: 1.5;\n margin: 12px 0 0 0;\n}\n\n/* Dialog Footer */\n.dialog-footer {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 24px;\n border-top: 1px solid #e5e7eb;\n background: #f8fafc;\n border-radius: 0 0 16px 16px;\n}\n\n/* Buttons */\n.btn {\n padding: 9px 20px;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-confirm.btn-primary {\n background: #3b82f6;\n color: white;\n}\n\n.btn-confirm.btn-primary:hover {\n background: #2563eb;\n}\n\n.btn-confirm.btn-danger {\n background: #ef4444;\n color: white;\n}\n\n.btn-confirm.btn-danger:hover {\n background: #dc2626;\n}\n\n.btn-cancel {\n background: #f3f4f6;\n color: #374151;\n}\n\n.btn-cancel:hover {\n background: #e5e7eb;\n}\n"] }]
|
|
144
|
+
}], null, { IsOpen: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], Title: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], Message: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], DetailMessage: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], ConfirmText: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], CancelText: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], ConfirmStyle: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], Icon: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], Confirmed: [{
|
|
161
|
+
type: Output
|
|
162
|
+
}], Cancelled: [{
|
|
163
|
+
type: Output
|
|
164
|
+
}] }); })();
|
|
165
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConfirmDialogComponent, { className: "ConfirmDialogComponent", filePath: "src/lib/confirm-dialog/confirm-dialog.component.ts", lineNumber: 40 }); })();
|
|
166
|
+
//# sourceMappingURL=confirm-dialog.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/confirm-dialog/confirm-dialog.component.ts","../../../src/lib/confirm-dialog/confirm-dialog.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;;;ICErE,+BAAkD;IAArB,uLAAS,iBAAU,KAAC;IAAC,iBAAM;;;IAoBpD,4BAA0B;IAAA,YAAmB;IAAA,iBAAI;;;IAAvB,cAAmB;IAAnB,0CAAmB;;ADfnD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAOH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACM,MAAM,GAAY,KAAK,CAAC;IAEjC;;OAEG;IACM,KAAK,GAAW,SAAS,CAAC;IAEnC;;OAEG;IACM,OAAO,GAAW,eAAe,CAAC;IAE3C;;OAEG;IACM,aAAa,GAAW,EAAE,CAAC;IAEpC;;;OAGG;IACM,WAAW,GAAW,SAAS,CAAC;IAEzC;;;OAGG;IACM,UAAU,GAAW,QAAQ,CAAC;IAEvC;;;;OAIG;IACM,YAAY,GAAuB,SAAS,CAAC;IAEtD;;;OAGG;IACM,IAAI,GAAW,6BAA6B,CAAC;IAEtD;;OAEG;IACO,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE/C;;OAEG;IACO,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE/C,SAAS;QACP,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;gHA9DU,sBAAsB;6DAAtB,sBAAsB;YCtCnC,wFAAc;YAQV,AADF,AAFF,8BAAgD,aAEnB,aACC;YACxB,oBAAsB;YACtB,4BAAM;YAAA,YAAW;YACnB,AADmB,iBAAO,EACpB;YACN,iCAA6D;YAAnC,mGAAS,cAAU,IAAC;YAC5C,uBAAiC;YAErC,AADE,iBAAS,EACL;YAIJ,AADF,8BAA4B,YACP;YAAA,aAAa;YAAA,iBAAI;YACpC,wFAAqB;YAGvB,iBAAM;YAIJ,AADF,+BAA2B,kBAKD;YAAtB,oGAAS,eAAW,IAAC;YACrB,aACF;YAAA,iBAAS;YACT,mCAAoD;YAArB,oGAAS,cAAU,IAAC;YACjD,aACF;YAEJ,AADE,AADE,iBAAS,EACL,EACF;;YAtCN,qCAEC;YAGyB,cAAqB;YAArB,kCAAqB;YAItC,eAAc;YAAd,uBAAc;YACX,eAAW;YAAX,+BAAW;YASA,eAAa;YAAb,iCAAa;YAChC,cAEC;YAFD,6CAEC;YAOC,eAAgD;YAChD,AADA,6DAAgD,6CACF;YAE9C,cACF;YADE,gDACF;YAEE,eACF;YADE,+CACF;;;iFDES,sBAAsB;cANlC,SAAS;6BACI,KAAK,YACP,sBAAsB;;kBAQ/B,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAKL,KAAK;;kBAML,KAAK;;kBAML,KAAK;;kBAOL,KAAK;;kBAML,KAAK;;kBAKL,MAAM;;kBAKN,MAAM;;kFAtDI,sBAAsB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { ViewConfigSummary } from '../types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Event emitted when user confirms the duplicate action
|
|
6
|
+
*/
|
|
7
|
+
export interface DuplicateViewEvent {
|
|
8
|
+
/** The user-chosen name for the copy */
|
|
9
|
+
Name: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* DuplicateViewDialogComponent - Modal for duplicating a view with a custom name
|
|
13
|
+
*
|
|
14
|
+
* Shows the source view name, allows renaming the copy, and displays
|
|
15
|
+
* a metadata summary (filters, columns, sorts) of what will be duplicated.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```html
|
|
19
|
+
* <mj-duplicate-view-dialog
|
|
20
|
+
* [IsOpen]="showDuplicateDialog"
|
|
21
|
+
* [SourceViewName]="viewToDuplicate?.Name"
|
|
22
|
+
* [Summary]="duplicateSummary"
|
|
23
|
+
* (Duplicate)="onDuplicateConfirmed($event)"
|
|
24
|
+
* (Cancel)="showDuplicateDialog = false">
|
|
25
|
+
* </mj-duplicate-view-dialog>
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare class DuplicateViewDialogComponent implements OnChanges {
|
|
29
|
+
private cdr;
|
|
30
|
+
IsOpen: boolean;
|
|
31
|
+
SourceViewName: string;
|
|
32
|
+
Summary: ViewConfigSummary | null;
|
|
33
|
+
Duplicate: EventEmitter<DuplicateViewEvent>;
|
|
34
|
+
Cancel: EventEmitter<void>;
|
|
35
|
+
NewName: string;
|
|
36
|
+
NameTouched: boolean;
|
|
37
|
+
constructor(cdr: ChangeDetectorRef);
|
|
38
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
39
|
+
OnDuplicate(): void;
|
|
40
|
+
OnCancel(): void;
|
|
41
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DuplicateViewDialogComponent, never>;
|
|
42
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DuplicateViewDialogComponent, "mj-duplicate-view-dialog", never, { "IsOpen": { "alias": "IsOpen"; "required": false; }; "SourceViewName": { "alias": "SourceViewName"; "required": false; }; "Summary": { "alias": "Summary"; "required": false; }; }, { "Duplicate": "Duplicate"; "Cancel": "Cancel"; }, never, never, false, never>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=duplicate-view-dialog.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicate-view-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/lib/duplicate-view-dialog/duplicate-view-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;;AAE7C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAMa,4BAA6B,YAAW,SAAS;IAWhD,OAAO,CAAC,GAAG;IAVd,MAAM,EAAE,OAAO,CAAS;IACxB,cAAc,EAAE,MAAM,CAAM;IAC5B,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAExC,SAAS,mCAA0C;IACnD,MAAM,qBAA4B;IAErC,OAAO,EAAE,MAAM,CAAM;IACrB,WAAW,EAAE,OAAO,CAAS;gBAEhB,GAAG,EAAE,iBAAiB;IAE1C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAQzC,WAAW,IAAI,IAAI;IAKnB,QAAQ,IAAI,IAAI;yCA1BL,4BAA4B;2CAA5B,4BAA4B;CA6BxC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/forms";
|
|
4
|
+
function DuplicateViewDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
5
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
6
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
7
|
+
i0.ɵɵlistener("click", function DuplicateViewDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnCancel()); });
|
|
8
|
+
i0.ɵɵelementEnd();
|
|
9
|
+
} }
|
|
10
|
+
function DuplicateViewDialogComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
11
|
+
i0.ɵɵelementStart(0, "span", 13);
|
|
12
|
+
i0.ɵɵtext(1, "Name is required");
|
|
13
|
+
i0.ɵɵelementEnd();
|
|
14
|
+
} }
|
|
15
|
+
function DuplicateViewDialogComponent_Conditional_20_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
17
|
+
i0.ɵɵelement(1, "i", 21);
|
|
18
|
+
i0.ɵɵtext(2);
|
|
19
|
+
i0.ɵɵelementEnd();
|
|
20
|
+
} if (rf & 2) {
|
|
21
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
22
|
+
i0.ɵɵadvance(2);
|
|
23
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.Summary.FilterCount, " filter", ctx_r1.Summary.FilterCount !== 1 ? "s" : "", " ");
|
|
24
|
+
} }
|
|
25
|
+
function DuplicateViewDialogComponent_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
27
|
+
i0.ɵɵelement(1, "i", 22);
|
|
28
|
+
i0.ɵɵtext(2);
|
|
29
|
+
i0.ɵɵelementEnd();
|
|
30
|
+
} if (rf & 2) {
|
|
31
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
32
|
+
i0.ɵɵadvance(2);
|
|
33
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.Summary.SortCount, " sort", ctx_r1.Summary.SortCount !== 1 ? "s" : "", " ");
|
|
34
|
+
} }
|
|
35
|
+
function DuplicateViewDialogComponent_Conditional_20_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
37
|
+
i0.ɵɵelement(1, "i", 23);
|
|
38
|
+
i0.ɵɵtext(2);
|
|
39
|
+
i0.ɵɵelementEnd();
|
|
40
|
+
} if (rf & 2) {
|
|
41
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
42
|
+
i0.ɵɵadvance(2);
|
|
43
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.Summary.AggregateCount, " aggregate", ctx_r1.Summary.AggregateCount !== 1 ? "s" : "", " ");
|
|
44
|
+
} }
|
|
45
|
+
function DuplicateViewDialogComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
+
i0.ɵɵelementStart(0, "div", 14);
|
|
47
|
+
i0.ɵɵconditionalCreate(1, DuplicateViewDialogComponent_Conditional_20_Conditional_1_Template, 3, 2, "span", 19);
|
|
48
|
+
i0.ɵɵelementStart(2, "span", 19);
|
|
49
|
+
i0.ɵɵelement(3, "i", 20);
|
|
50
|
+
i0.ɵɵtext(4);
|
|
51
|
+
i0.ɵɵelementEnd();
|
|
52
|
+
i0.ɵɵconditionalCreate(5, DuplicateViewDialogComponent_Conditional_20_Conditional_5_Template, 3, 2, "span", 19);
|
|
53
|
+
i0.ɵɵconditionalCreate(6, DuplicateViewDialogComponent_Conditional_20_Conditional_6_Template, 3, 2, "span", 19);
|
|
54
|
+
i0.ɵɵelementEnd();
|
|
55
|
+
} if (rf & 2) {
|
|
56
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
57
|
+
i0.ɵɵadvance();
|
|
58
|
+
i0.ɵɵconditional(ctx_r1.Summary.FilterCount > 0 ? 1 : -1);
|
|
59
|
+
i0.ɵɵadvance(3);
|
|
60
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.Summary.ColumnCount, " column", ctx_r1.Summary.ColumnCount !== 1 ? "s" : "", " ");
|
|
61
|
+
i0.ɵɵadvance();
|
|
62
|
+
i0.ɵɵconditional(ctx_r1.Summary.SortCount > 0 ? 5 : -1);
|
|
63
|
+
i0.ɵɵadvance();
|
|
64
|
+
i0.ɵɵconditional(ctx_r1.Summary.AggregateCount > 0 ? 6 : -1);
|
|
65
|
+
} }
|
|
66
|
+
/**
|
|
67
|
+
* DuplicateViewDialogComponent - Modal for duplicating a view with a custom name
|
|
68
|
+
*
|
|
69
|
+
* Shows the source view name, allows renaming the copy, and displays
|
|
70
|
+
* a metadata summary (filters, columns, sorts) of what will be duplicated.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```html
|
|
74
|
+
* <mj-duplicate-view-dialog
|
|
75
|
+
* [IsOpen]="showDuplicateDialog"
|
|
76
|
+
* [SourceViewName]="viewToDuplicate?.Name"
|
|
77
|
+
* [Summary]="duplicateSummary"
|
|
78
|
+
* (Duplicate)="onDuplicateConfirmed($event)"
|
|
79
|
+
* (Cancel)="showDuplicateDialog = false">
|
|
80
|
+
* </mj-duplicate-view-dialog>
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export class DuplicateViewDialogComponent {
|
|
84
|
+
cdr;
|
|
85
|
+
IsOpen = false;
|
|
86
|
+
SourceViewName = '';
|
|
87
|
+
Summary = null;
|
|
88
|
+
Duplicate = new EventEmitter();
|
|
89
|
+
Cancel = new EventEmitter();
|
|
90
|
+
NewName = '';
|
|
91
|
+
NameTouched = false;
|
|
92
|
+
constructor(cdr) {
|
|
93
|
+
this.cdr = cdr;
|
|
94
|
+
}
|
|
95
|
+
ngOnChanges(changes) {
|
|
96
|
+
if (changes['IsOpen'] && this.IsOpen) {
|
|
97
|
+
this.NewName = this.SourceViewName ? `${this.SourceViewName} (Copy)` : '';
|
|
98
|
+
this.NameTouched = false;
|
|
99
|
+
this.cdr.detectChanges();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
OnDuplicate() {
|
|
103
|
+
if (!this.NewName.trim())
|
|
104
|
+
return;
|
|
105
|
+
this.Duplicate.emit({ Name: this.NewName.trim() });
|
|
106
|
+
}
|
|
107
|
+
OnCancel() {
|
|
108
|
+
this.Cancel.emit();
|
|
109
|
+
}
|
|
110
|
+
static ɵfac = function DuplicateViewDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DuplicateViewDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
111
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DuplicateViewDialogComponent, selectors: [["mj-duplicate-view-dialog"]], inputs: { IsOpen: "IsOpen", SourceViewName: "SourceViewName", Summary: "Summary" }, outputs: { Duplicate: "Duplicate", Cancel: "Cancel" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 27, vars: 10, consts: [[1, "dialog-backdrop"], [1, "dialog-panel"], [1, "dialog-header"], [1, "icon-circle"], [1, "fa-regular", "fa-copy"], [1, "header-title"], ["title", "Close", 1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "dialog-body"], [1, "intro-text"], [1, "form-group"], ["for", "duplicateName"], ["id", "duplicateName", "type", "text", 1, "form-input", 3, "ngModelChange", "blur", "keydown.enter", "ngModel"], [1, "validation-error"], [1, "meta-summary"], [1, "dialog-footer"], [1, "btn", "btn-primary", 3, "click", "disabled"], [1, "btn", "btn-cancel", 3, "click"], [1, "dialog-backdrop", 3, "click"], [1, "meta-item"], [1, "fa-solid", "fa-table-columns"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-arrow-down-short-wide"], [1, "fa-solid", "fa-chart-simple"]], template: function DuplicateViewDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
112
|
+
i0.ɵɵconditionalCreate(0, DuplicateViewDialogComponent_Conditional_0_Template, 1, 0, "div", 0);
|
|
113
|
+
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
114
|
+
i0.ɵɵelement(4, "i", 4);
|
|
115
|
+
i0.ɵɵelementEnd();
|
|
116
|
+
i0.ɵɵelementStart(5, "span", 5);
|
|
117
|
+
i0.ɵɵtext(6, "Duplicate View");
|
|
118
|
+
i0.ɵɵelementEnd();
|
|
119
|
+
i0.ɵɵelementStart(7, "button", 6);
|
|
120
|
+
i0.ɵɵlistener("click", function DuplicateViewDialogComponent_Template_button_click_7_listener() { return ctx.OnCancel(); });
|
|
121
|
+
i0.ɵɵelement(8, "i", 7);
|
|
122
|
+
i0.ɵɵelementEnd()();
|
|
123
|
+
i0.ɵɵelementStart(9, "div", 8)(10, "p", 9);
|
|
124
|
+
i0.ɵɵtext(11, " Creating a copy of ");
|
|
125
|
+
i0.ɵɵelementStart(12, "strong");
|
|
126
|
+
i0.ɵɵtext(13);
|
|
127
|
+
i0.ɵɵelementEnd();
|
|
128
|
+
i0.ɵɵtext(14, " with all its columns, filters, and sorting. ");
|
|
129
|
+
i0.ɵɵelementEnd();
|
|
130
|
+
i0.ɵɵelementStart(15, "div", 10)(16, "label", 11);
|
|
131
|
+
i0.ɵɵtext(17, "New View Name");
|
|
132
|
+
i0.ɵɵelementEnd();
|
|
133
|
+
i0.ɵɵelementStart(18, "input", 12);
|
|
134
|
+
i0.ɵɵtwoWayListener("ngModelChange", function DuplicateViewDialogComponent_Template_input_ngModelChange_18_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.NewName, $event) || (ctx.NewName = $event); return $event; });
|
|
135
|
+
i0.ɵɵlistener("blur", function DuplicateViewDialogComponent_Template_input_blur_18_listener() { return ctx.NameTouched = true; })("keydown.enter", function DuplicateViewDialogComponent_Template_input_keydown_enter_18_listener() { return ctx.OnDuplicate(); });
|
|
136
|
+
i0.ɵɵelementEnd();
|
|
137
|
+
i0.ɵɵconditionalCreate(19, DuplicateViewDialogComponent_Conditional_19_Template, 2, 0, "span", 13);
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
i0.ɵɵconditionalCreate(20, DuplicateViewDialogComponent_Conditional_20_Template, 7, 5, "div", 14);
|
|
140
|
+
i0.ɵɵelementEnd();
|
|
141
|
+
i0.ɵɵelementStart(21, "div", 15)(22, "button", 16);
|
|
142
|
+
i0.ɵɵlistener("click", function DuplicateViewDialogComponent_Template_button_click_22_listener() { return ctx.OnDuplicate(); });
|
|
143
|
+
i0.ɵɵelement(23, "i", 4);
|
|
144
|
+
i0.ɵɵtext(24, " Duplicate ");
|
|
145
|
+
i0.ɵɵelementEnd();
|
|
146
|
+
i0.ɵɵelementStart(25, "button", 17);
|
|
147
|
+
i0.ɵɵlistener("click", function DuplicateViewDialogComponent_Template_button_click_25_listener() { return ctx.OnCancel(); });
|
|
148
|
+
i0.ɵɵtext(26, " Cancel ");
|
|
149
|
+
i0.ɵɵelementEnd()()();
|
|
150
|
+
} if (rf & 2) {
|
|
151
|
+
i0.ɵɵconditional(ctx.IsOpen ? 0 : -1);
|
|
152
|
+
i0.ɵɵadvance();
|
|
153
|
+
i0.ɵɵclassProp("open", ctx.IsOpen);
|
|
154
|
+
i0.ɵɵadvance(12);
|
|
155
|
+
i0.ɵɵtextInterpolate1("\"", ctx.SourceViewName, "\"");
|
|
156
|
+
i0.ɵɵadvance(5);
|
|
157
|
+
i0.ɵɵclassProp("invalid", ctx.NameTouched && !ctx.NewName.trim());
|
|
158
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx.NewName);
|
|
159
|
+
i0.ɵɵadvance();
|
|
160
|
+
i0.ɵɵconditional(ctx.NameTouched && !ctx.NewName.trim() ? 19 : -1);
|
|
161
|
+
i0.ɵɵadvance();
|
|
162
|
+
i0.ɵɵconditional(ctx.Summary ? 20 : -1);
|
|
163
|
+
i0.ɵɵadvance(2);
|
|
164
|
+
i0.ɵɵproperty("disabled", !ctx.NewName.trim());
|
|
165
|
+
} }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["\n\n.dialog-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 2000;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.dialog-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.95);\n width: 420px;\n max-width: calc(100vw - 40px);\n background: white;\n border-radius: 16px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 2001;\n display: flex;\n flex-direction: column;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dialog-panel.open[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n transform: translate(-50%, -50%) scale(1);\n}\n\n\n\n.dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px 24px 0;\n}\n\n.icon-circle[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n background: #eff6ff;\n color: #3b82f6;\n flex-shrink: 0;\n}\n\n.header-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: #6b7280;\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n color: #374151;\n}\n\n\n\n.dialog-body[_ngcontent-%COMP%] {\n padding: 20px 24px;\n}\n\n.intro-text[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #6b7280;\n line-height: 1.5;\n margin: 0 0 16px 0;\n}\n\n.intro-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: #374151;\n}\n\n\n\n.form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 16px;\n}\n\n.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.form-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n font-size: 14px;\n font-family: inherit;\n color: #1f2937;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n box-sizing: border-box;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.form-input.invalid[_ngcontent-%COMP%] {\n border-color: #ef4444;\n}\n\n.validation-error[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #ef4444;\n}\n\n\n\n.meta-summary[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n background: #f8fafc;\n border-radius: 8px;\n padding: 10px 14px;\n font-size: 12px;\n color: #6b7280;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n font-size: 11px;\n}\n\n\n\n.dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 24px 20px;\n border-top: 1px solid #e5e7eb;\n}\n\n\n\n.btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: #3b82f6;\n color: white;\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #2563eb;\n}\n\n.btn-primary[_ngcontent-%COMP%]:disabled {\n background: #93c5fd;\n cursor: not-allowed;\n}\n\n.btn-cancel[_ngcontent-%COMP%] {\n background: #f3f4f6;\n color: #374151;\n}\n\n.btn-cancel[_ngcontent-%COMP%]:hover {\n background: #e5e7eb;\n}"] });
|
|
166
|
+
}
|
|
167
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DuplicateViewDialogComponent, [{
|
|
168
|
+
type: Component,
|
|
169
|
+
args: [{ standalone: false, selector: 'mj-duplicate-view-dialog', template: "<!-- Dialog Backdrop -->\n@if (IsOpen) {\n <div class=\"dialog-backdrop\" (click)=\"OnCancel()\"></div>\n}\n\n<!-- Dialog Panel -->\n<div class=\"dialog-panel\" [class.open]=\"IsOpen\">\n <!-- Header -->\n <div class=\"dialog-header\">\n <div class=\"icon-circle\">\n <i class=\"fa-regular fa-copy\"></i>\n </div>\n <span class=\"header-title\">Duplicate View</span>\n <button class=\"close-btn\" (click)=\"OnCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Body -->\n <div class=\"dialog-body\">\n <p class=\"intro-text\">\n Creating a copy of <strong>\"{{ SourceViewName }}\"</strong> with all its columns, filters, and sorting.\n </p>\n\n <!-- New Name Input -->\n <div class=\"form-group\">\n <label for=\"duplicateName\">New View Name</label>\n <input\n id=\"duplicateName\"\n type=\"text\"\n class=\"form-input\"\n [class.invalid]=\"NameTouched && !NewName.trim()\"\n [(ngModel)]=\"NewName\"\n (blur)=\"NameTouched = true\"\n (keydown.enter)=\"OnDuplicate()\"\n />\n @if (NameTouched && !NewName.trim()) {\n <span class=\"validation-error\">Name is required</span>\n }\n </div>\n\n <!-- Metadata Summary -->\n @if (Summary) {\n <div class=\"meta-summary\">\n @if (Summary.FilterCount > 0) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ Summary.FilterCount }} filter{{ Summary.FilterCount !== 1 ? 's' : '' }}\n </span>\n }\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-table-columns\"></i>\n {{ Summary.ColumnCount }} column{{ Summary.ColumnCount !== 1 ? 's' : '' }}\n </span>\n @if (Summary.SortCount > 0) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-arrow-down-short-wide\"></i>\n {{ Summary.SortCount }} sort{{ Summary.SortCount !== 1 ? 's' : '' }}\n </span>\n }\n @if (Summary.AggregateCount > 0) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-chart-simple\"></i>\n {{ Summary.AggregateCount }} aggregate{{ Summary.AggregateCount !== 1 ? 's' : '' }}\n </span>\n }\n </div>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"dialog-footer\">\n <button\n class=\"btn btn-primary\"\n (click)=\"OnDuplicate()\"\n [disabled]=\"!NewName.trim()\">\n <i class=\"fa-regular fa-copy\"></i>\n Duplicate\n </button>\n <button class=\"btn btn-cancel\" (click)=\"OnCancel()\">\n Cancel\n </button>\n </div>\n</div>\n", styles: ["/* Dialog Backdrop */\n.dialog-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 2000;\n animation: fadeIn 0.2s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Dialog Panel */\n.dialog-panel {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.95);\n width: 420px;\n max-width: calc(100vw - 40px);\n background: white;\n border-radius: 16px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 2001;\n display: flex;\n flex-direction: column;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dialog-panel.open {\n opacity: 1;\n pointer-events: auto;\n transform: translate(-50%, -50%) scale(1);\n}\n\n/* Dialog Header */\n.dialog-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px 24px 0;\n}\n\n.icon-circle {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n background: #eff6ff;\n color: #3b82f6;\n flex-shrink: 0;\n}\n\n.header-title {\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: #6b7280;\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n}\n\n.close-btn:hover {\n background: #f3f4f6;\n color: #374151;\n}\n\n/* Dialog Body */\n.dialog-body {\n padding: 20px 24px;\n}\n\n.intro-text {\n font-size: 14px;\n color: #6b7280;\n line-height: 1.5;\n margin: 0 0 16px 0;\n}\n\n.intro-text strong {\n color: #374151;\n}\n\n/* Form Group */\n.form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 16px;\n}\n\n.form-group label {\n font-size: 13px;\n font-weight: 600;\n color: #6b7280;\n}\n\n.form-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n font-size: 14px;\n font-family: inherit;\n color: #1f2937;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n box-sizing: border-box;\n}\n\n.form-input:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.form-input.invalid {\n border-color: #ef4444;\n}\n\n.validation-error {\n font-size: 12px;\n color: #ef4444;\n}\n\n/* Metadata Summary */\n.meta-summary {\n display: flex;\n gap: 16px;\n background: #f8fafc;\n border-radius: 8px;\n padding: 10px 14px;\n font-size: 12px;\n color: #6b7280;\n}\n\n.meta-item {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-item i {\n color: #3b82f6;\n font-size: 11px;\n}\n\n/* Dialog Footer */\n.dialog-footer {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 24px 20px;\n border-top: 1px solid #e5e7eb;\n}\n\n/* Buttons */\n.btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary {\n background: #3b82f6;\n color: white;\n}\n\n.btn-primary:hover:not(:disabled) {\n background: #2563eb;\n}\n\n.btn-primary:disabled {\n background: #93c5fd;\n cursor: not-allowed;\n}\n\n.btn-cancel {\n background: #f3f4f6;\n color: #374151;\n}\n\n.btn-cancel:hover {\n background: #e5e7eb;\n}\n"] }]
|
|
170
|
+
}], () => [{ type: i0.ChangeDetectorRef }], { IsOpen: [{
|
|
171
|
+
type: Input
|
|
172
|
+
}], SourceViewName: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], Summary: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], Duplicate: [{
|
|
177
|
+
type: Output
|
|
178
|
+
}], Cancel: [{
|
|
179
|
+
type: Output
|
|
180
|
+
}] }); })();
|
|
181
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DuplicateViewDialogComponent, { className: "DuplicateViewDialogComponent", filePath: "src/lib/duplicate-view-dialog/duplicate-view-dialog.component.ts", lineNumber: 35 }); })();
|
|
182
|
+
//# sourceMappingURL=duplicate-view-dialog.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicate-view-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/duplicate-view-dialog/duplicate-view-dialog.component.ts","../../../src/lib/duplicate-view-dialog/duplicate-view-dialog.component.html"],"names":[],"mappings":"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"}
|
|
@@ -681,7 +681,7 @@ export declare class EntityDataGridComponent implements OnInit, OnDestroy {
|
|
|
681
681
|
private generateColumnsFromMetadata;
|
|
682
682
|
/**
|
|
683
683
|
* Determines if a field should be shown by default when no saved view exists.
|
|
684
|
-
* This logic is aligned with
|
|
684
|
+
* This logic is aligned with MJUserViewEntity.SetDefaultsFromEntity() to ensure
|
|
685
685
|
* consistent column visibility between initial load and saved views.
|
|
686
686
|
*/
|
|
687
687
|
private shouldShowField;
|
|
@@ -2063,7 +2063,7 @@ export class EntityDataGridComponent {
|
|
|
2063
2063
|
}
|
|
2064
2064
|
/**
|
|
2065
2065
|
* Determines if a field should be shown by default when no saved view exists.
|
|
2066
|
-
* This logic is aligned with
|
|
2066
|
+
* This logic is aligned with MJUserViewEntity.SetDefaultsFromEntity() to ensure
|
|
2067
2067
|
* consistent column visibility between initial load and saved views.
|
|
2068
2068
|
*/
|
|
2069
2069
|
shouldShowField(field) {
|
|
@@ -2075,7 +2075,7 @@ export class EntityDataGridComponent {
|
|
|
2075
2075
|
return false;
|
|
2076
2076
|
}
|
|
2077
2077
|
// Only show fields explicitly marked as DefaultInView
|
|
2078
|
-
// This aligns with
|
|
2078
|
+
// This aligns with MJUserViewEntity.SetDefaultsFromEntity() behavior
|
|
2079
2079
|
// ensuring users see the same columns before and after saving a view
|
|
2080
2080
|
return field.DefaultInView === true;
|
|
2081
2081
|
}
|