@memberjunction/ng-base-forms 2.116.0 → 2.117.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/base-field-component.d.ts +20 -1
- package/dist/lib/base-field-component.d.ts.map +1 -1
- package/dist/lib/base-field-component.js +82 -32
- package/dist/lib/base-field-component.js.map +1 -1
- package/dist/lib/base-form-component.d.ts +119 -7
- package/dist/lib/base-form-component.d.ts.map +1 -1
- package/dist/lib/base-form-component.js +210 -15
- package/dist/lib/base-form-component.js.map +1 -1
- package/dist/lib/base-form-context.d.ts +23 -0
- package/dist/lib/base-form-context.d.ts.map +1 -0
- package/dist/lib/base-form-context.js +10 -0
- package/dist/lib/base-form-context.js.map +1 -0
- package/dist/lib/base-form-section-info.d.ts +28 -0
- package/dist/lib/base-form-section-info.d.ts.map +1 -0
- package/dist/lib/base-form-section-info.js +34 -0
- package/dist/lib/base-form-section-info.js.map +1 -0
- package/dist/lib/collapsible-panel.component.d.ts +50 -0
- package/dist/lib/collapsible-panel.component.d.ts.map +1 -0
- package/dist/lib/collapsible-panel.component.js +281 -0
- package/dist/lib/collapsible-panel.component.js.map +1 -0
- package/dist/lib/form-section-controls.component.d.ts +24 -0
- package/dist/lib/form-section-controls.component.d.ts.map +1 -0
- package/dist/lib/form-section-controls.component.js +150 -0
- package/dist/lib/form-section-controls.component.js.map +1 -0
- package/dist/module.d.ts +18 -16
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +14 -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 +4 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { Component, Input, ContentChildren, HostBinding, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { MJFormField } from './base-field-component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
const _c0 = ["*"];
|
|
5
|
+
function CollapsiblePanelComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
6
|
+
i0.ɵɵelementStart(0, "span", 11);
|
|
7
|
+
i0.ɵɵtext(1);
|
|
8
|
+
i0.ɵɵelementEnd();
|
|
9
|
+
} if (rf & 2) {
|
|
10
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
11
|
+
i0.ɵɵclassProp("zero-rows", ctx_r0.badgeCount === 0);
|
|
12
|
+
i0.ɵɵadvance();
|
|
13
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.badgeCount, " ");
|
|
14
|
+
} }
|
|
15
|
+
/**
|
|
16
|
+
* Reusable collapsible panel component for form sections
|
|
17
|
+
* Handles:
|
|
18
|
+
* - Expand/collapse state
|
|
19
|
+
* - Search filtering with case-insensitive matching
|
|
20
|
+
* - Yellow highlighting of matched section names
|
|
21
|
+
* - Visibility management based on section name or field name matches
|
|
22
|
+
* - Passes sectionFilter down to child mj-form-field components for their own label highlighting
|
|
23
|
+
* - Panel width modes: normal (default), full-width (spans entire row)
|
|
24
|
+
*/
|
|
25
|
+
export class CollapsiblePanelComponent {
|
|
26
|
+
cdr;
|
|
27
|
+
sectionKey = '';
|
|
28
|
+
sectionName = '';
|
|
29
|
+
icon = 'fa fa-folder';
|
|
30
|
+
form; // Reference to the form component for method calls
|
|
31
|
+
formContext; // Contains all form-level state
|
|
32
|
+
variant = 'default';
|
|
33
|
+
badgeCount;
|
|
34
|
+
entityName = ''; // For localStorage key generation
|
|
35
|
+
widthModeChange = new EventEmitter();
|
|
36
|
+
fieldComponents;
|
|
37
|
+
get isHidden() {
|
|
38
|
+
return !this.isVisible;
|
|
39
|
+
}
|
|
40
|
+
get isFullWidth() {
|
|
41
|
+
return this.widthMode === 'full-width';
|
|
42
|
+
}
|
|
43
|
+
get expanded() {
|
|
44
|
+
return this.form ? this.form.IsSectionExpanded(this.sectionKey) : true;
|
|
45
|
+
}
|
|
46
|
+
displayName = '';
|
|
47
|
+
fieldNames = '';
|
|
48
|
+
isVisible = true;
|
|
49
|
+
widthMode = 'normal';
|
|
50
|
+
constructor(cdr) {
|
|
51
|
+
this.cdr = cdr;
|
|
52
|
+
}
|
|
53
|
+
ngAfterContentInit() {
|
|
54
|
+
// Extract field names from projected field components
|
|
55
|
+
this.updateFieldNames();
|
|
56
|
+
this.fieldComponents.changes.subscribe(() => {
|
|
57
|
+
this.updateFieldNames();
|
|
58
|
+
});
|
|
59
|
+
// Load saved width mode from localStorage
|
|
60
|
+
this.loadWidthMode();
|
|
61
|
+
}
|
|
62
|
+
ngOnChanges(changes) {
|
|
63
|
+
if (changes['sectionName']) {
|
|
64
|
+
this.displayName = this.sectionName;
|
|
65
|
+
}
|
|
66
|
+
if (changes['sectionName'] || changes['formContext']) {
|
|
67
|
+
this.updateVisibilityAndHighlighting();
|
|
68
|
+
}
|
|
69
|
+
// Update context on all child field components when it changes
|
|
70
|
+
if (changes['formContext'] && this.fieldComponents) {
|
|
71
|
+
this.fieldComponents.forEach(field => {
|
|
72
|
+
field.formContext = this.formContext;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
toggle() {
|
|
77
|
+
if (this.form) {
|
|
78
|
+
this.form.SetSectionExpanded(this.sectionKey, !this.expanded);
|
|
79
|
+
this.cdr.markForCheck();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
toggleFullWidth(event) {
|
|
83
|
+
event.stopPropagation();
|
|
84
|
+
const newMode = this.widthMode === 'full-width' ? 'normal' : 'full-width';
|
|
85
|
+
// Auto-expand panel when switching to full-width mode
|
|
86
|
+
if (newMode === 'full-width' && !this.expanded && this.form) {
|
|
87
|
+
this.form.SetSectionExpanded(this.sectionKey, true);
|
|
88
|
+
}
|
|
89
|
+
this.setWidthMode(newMode);
|
|
90
|
+
}
|
|
91
|
+
setWidthMode(mode) {
|
|
92
|
+
this.widthMode = mode;
|
|
93
|
+
this.saveWidthMode();
|
|
94
|
+
this.widthModeChange.emit(mode);
|
|
95
|
+
this.cdr.markForCheck();
|
|
96
|
+
}
|
|
97
|
+
getStorageKey() {
|
|
98
|
+
// Generate unique key based on entity name and section key
|
|
99
|
+
const entity = this.entityName || 'unknown';
|
|
100
|
+
return `mj_panel_width_${entity}_${this.sectionKey}`;
|
|
101
|
+
}
|
|
102
|
+
saveWidthMode() {
|
|
103
|
+
try {
|
|
104
|
+
const key = this.getStorageKey();
|
|
105
|
+
localStorage.setItem(key, this.widthMode);
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
console.warn('Failed to save panel width mode to localStorage:', e);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
loadWidthMode() {
|
|
112
|
+
try {
|
|
113
|
+
const key = this.getStorageKey();
|
|
114
|
+
const saved = localStorage.getItem(key);
|
|
115
|
+
if (saved && (saved === 'normal' || saved === 'full-width')) {
|
|
116
|
+
this.widthMode = saved;
|
|
117
|
+
this.cdr.markForCheck();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
console.warn('Failed to load panel width mode from localStorage:', e);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
updateFieldNames() {
|
|
125
|
+
if (this.fieldComponents) {
|
|
126
|
+
// Extract field display names from all mj-form-field components
|
|
127
|
+
const names = [];
|
|
128
|
+
this.fieldComponents.forEach(field => {
|
|
129
|
+
if (field.DisplayName) {
|
|
130
|
+
names.push(field.DisplayName.toLowerCase());
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
this.fieldNames = names.join(' ');
|
|
134
|
+
this.updateVisibilityAndHighlighting();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
updateVisibilityAndHighlighting() {
|
|
138
|
+
const searchTerm = (this.formContext?.sectionFilter || '').toLowerCase().trim();
|
|
139
|
+
if (!searchTerm) {
|
|
140
|
+
// No filter - show everything, clear highlights
|
|
141
|
+
this.isVisible = true;
|
|
142
|
+
this.displayName = this.sectionName;
|
|
143
|
+
this.cdr.markForCheck();
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Check if this section matches the filter (section name or any field name)
|
|
147
|
+
const sectionMatches = this.sectionName.toLowerCase().includes(searchTerm);
|
|
148
|
+
const fieldsMatch = this.fieldNames.includes(searchTerm);
|
|
149
|
+
this.isVisible = sectionMatches || fieldsMatch;
|
|
150
|
+
if (this.isVisible && sectionMatches) {
|
|
151
|
+
// Highlight section name if it matches
|
|
152
|
+
const escapedTerm = this.escapeRegex(searchTerm);
|
|
153
|
+
const regex = new RegExp(escapedTerm, 'gi');
|
|
154
|
+
this.displayName = this.sectionName.replace(regex, '<mark class="search-highlight">$&</mark>');
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
this.displayName = this.sectionName;
|
|
158
|
+
}
|
|
159
|
+
this.cdr.markForCheck();
|
|
160
|
+
}
|
|
161
|
+
escapeRegex(term) {
|
|
162
|
+
return term.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
163
|
+
}
|
|
164
|
+
static ɵfac = function CollapsiblePanelComponent_Factory(t) { return new (t || CollapsiblePanelComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
165
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollapsiblePanelComponent, selectors: [["mj-collapsible-panel"]], contentQueries: function CollapsiblePanelComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
166
|
+
i0.ɵɵcontentQuery(dirIndex, MJFormField, 5);
|
|
167
|
+
} if (rf & 2) {
|
|
168
|
+
let _t;
|
|
169
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fieldComponents = _t);
|
|
170
|
+
} }, hostVars: 4, hostBindings: function CollapsiblePanelComponent_HostBindings(rf, ctx) { if (rf & 2) {
|
|
171
|
+
i0.ɵɵclassProp("search-hidden", ctx.isHidden)("panel-full-width", ctx.isFullWidth);
|
|
172
|
+
} }, inputs: { sectionKey: "sectionKey", sectionName: "sectionName", icon: "icon", form: "form", formContext: "formContext", variant: "variant", badgeCount: "badgeCount", entityName: "entityName" }, outputs: { widthModeChange: "widthModeChange" }, features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 15, vars: 14, consts: [[1, "form-card", "collapsible-card"], ["role", "button", "tabindex", "0", 1, "collapsible-header"], [1, "collapsible-title", 3, "click"], [1, "section-name", 3, "innerHTML"], [1, "row-count-badge", 3, "zero-rows"], [1, "panel-width-controls"], ["title", "Stretch panel to full width", "aria-label", "Stretch panel to full width", "type", "button", 1, "width-control-btn", 3, "click"], [1, "fa-solid", "fa-left-right"], [1, "collapse-icon", 3, "click"], [1, "collapsible-body"], [1, "form-body"], [1, "row-count-badge"]], template: function CollapsiblePanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
173
|
+
i0.ɵɵprojectionDef();
|
|
174
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
|
|
175
|
+
i0.ɵɵlistener("click", function CollapsiblePanelComponent_Template_div_click_2_listener() { return ctx.toggle(); });
|
|
176
|
+
i0.ɵɵelement(3, "i");
|
|
177
|
+
i0.ɵɵelementStart(4, "h3");
|
|
178
|
+
i0.ɵɵelement(5, "span", 3);
|
|
179
|
+
i0.ɵɵtemplate(6, CollapsiblePanelComponent_Conditional_6_Template, 2, 3, "span", 4);
|
|
180
|
+
i0.ɵɵelementEnd()();
|
|
181
|
+
i0.ɵɵelementStart(7, "div", 5)(8, "button", 6);
|
|
182
|
+
i0.ɵɵlistener("click", function CollapsiblePanelComponent_Template_button_click_8_listener($event) { return ctx.toggleFullWidth($event); });
|
|
183
|
+
i0.ɵɵelement(9, "i", 7);
|
|
184
|
+
i0.ɵɵelementEnd()();
|
|
185
|
+
i0.ɵɵelementStart(10, "div", 8);
|
|
186
|
+
i0.ɵɵlistener("click", function CollapsiblePanelComponent_Template_div_click_10_listener() { return ctx.toggle(); });
|
|
187
|
+
i0.ɵɵelement(11, "i");
|
|
188
|
+
i0.ɵɵelementEnd()();
|
|
189
|
+
i0.ɵɵelementStart(12, "div", 9)(13, "div", 10);
|
|
190
|
+
i0.ɵɵprojection(14);
|
|
191
|
+
i0.ɵɵelementEnd()()();
|
|
192
|
+
} if (rf & 2) {
|
|
193
|
+
i0.ɵɵclassProp("related-entity", ctx.variant === "related-entity");
|
|
194
|
+
i0.ɵɵattribute("data-section-name", ctx.sectionName)("data-field-names", ctx.fieldNames);
|
|
195
|
+
i0.ɵɵadvance(3);
|
|
196
|
+
i0.ɵɵclassMap(ctx.icon);
|
|
197
|
+
i0.ɵɵadvance(2);
|
|
198
|
+
i0.ɵɵproperty("innerHTML", ctx.displayName, i0.ɵɵsanitizeHtml);
|
|
199
|
+
i0.ɵɵadvance();
|
|
200
|
+
i0.ɵɵconditional(ctx.badgeCount !== undefined ? 6 : -1);
|
|
201
|
+
i0.ɵɵadvance(2);
|
|
202
|
+
i0.ɵɵclassProp("active", ctx.widthMode === "full-width");
|
|
203
|
+
i0.ɵɵadvance(3);
|
|
204
|
+
i0.ɵɵclassMap(ctx.expanded ? "fa fa-chevron-up" : "fa fa-chevron-down");
|
|
205
|
+
i0.ɵɵadvance();
|
|
206
|
+
i0.ɵɵclassProp("collapsed", !ctx.expanded);
|
|
207
|
+
} }, styles: ["[_nghost-%COMP%] {\n display: block;\n }\n\n .search-hidden[_nghost-%COMP%] {\n display: none;\n }\n\n .panel-full-width[_nghost-%COMP%] {\n grid-column: 1 / -1 !important;\n }\n\n .form-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n transition: all 0.3s ease;\n }\n\n .panel-full-width[_nghost-%COMP%] .form-card[_ngcontent-%COMP%] {\n box-shadow: 0 4px 8px rgba(102, 126, 234, 0.15);\n border: 2px solid #667eea;\n }\n\n .collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n }\n\n .collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n user-select: none;\n transition: all 0.3s ease;\n }\n\n .collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n }\n\n .collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n cursor: pointer;\n }\n\n .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #667eea;\n }\n\n .collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n }\n\n .panel-width-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n }\n\n .width-control-btn[_ngcontent-%COMP%] {\n padding: 6px 10px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #6b7280;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .width-control-btn[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n color: #374151;\n border-color: #9ca3af;\n }\n\n .width-control-btn.active[_ngcontent-%COMP%] {\n background: #667eea;\n color: white;\n border-color: #667eea;\n }\n\n .width-control-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: #6b7280;\n transition: transform 0.3s ease;\n cursor: pointer;\n padding: 4px;\n }\n\n .collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n }\n\n .collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n }\n\n .form-body[_ngcontent-%COMP%] {\n padding: 24px;\n overflow: auto;\n max-height: 600px;\n }\n\n \n\n .form-card.related-entity[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n }\n\n .form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n }\n\n .form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n }\n\n .form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n }\n\n \n\n .collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: #10b981;\n color: white;\n padding: 3px 8px 2px 9px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n line-height: 1;\n }\n\n \n\n .collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: #9ca3af;\n }\n\n \n\n .collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight {\n background-color: #fef08a;\n color: #854d0e;\n padding: 0;\n border-radius: 2px;\n font-weight: 700;\n box-shadow: 0 0 0 2px #fef08a;\n }"] });
|
|
208
|
+
}
|
|
209
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollapsiblePanelComponent, [{
|
|
210
|
+
type: Component,
|
|
211
|
+
args: [{ selector: 'mj-collapsible-panel', template: `
|
|
212
|
+
<div
|
|
213
|
+
class="form-card collapsible-card"
|
|
214
|
+
[class.related-entity]="variant === 'related-entity'"
|
|
215
|
+
[attr.data-section-name]="sectionName"
|
|
216
|
+
[attr.data-field-names]="fieldNames">
|
|
217
|
+
<div class="collapsible-header" role="button" tabindex="0">
|
|
218
|
+
<div class="collapsible-title" (click)="toggle()">
|
|
219
|
+
<i [class]="icon"></i>
|
|
220
|
+
<h3>
|
|
221
|
+
<span class="section-name" [innerHTML]="displayName"></span>
|
|
222
|
+
@if (badgeCount !== undefined) {
|
|
223
|
+
<span class="row-count-badge"
|
|
224
|
+
[class.zero-rows]="badgeCount === 0">
|
|
225
|
+
{{badgeCount}}
|
|
226
|
+
</span>
|
|
227
|
+
}
|
|
228
|
+
</h3>
|
|
229
|
+
</div>
|
|
230
|
+
<div class="panel-width-controls">
|
|
231
|
+
<button
|
|
232
|
+
class="width-control-btn"
|
|
233
|
+
[class.active]="widthMode === 'full-width'"
|
|
234
|
+
(click)="toggleFullWidth($event)"
|
|
235
|
+
title="Stretch panel to full width"
|
|
236
|
+
aria-label="Stretch panel to full width"
|
|
237
|
+
type="button">
|
|
238
|
+
<i class="fa-solid fa-left-right"></i>
|
|
239
|
+
</button>
|
|
240
|
+
</div>
|
|
241
|
+
<div class="collapse-icon" (click)="toggle()">
|
|
242
|
+
<i [class]="expanded ? 'fa fa-chevron-up' : 'fa fa-chevron-down'"></i>
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
<div class="collapsible-body" [class.collapsed]="!expanded">
|
|
246
|
+
<div class="form-body">
|
|
247
|
+
<ng-content></ng-content>
|
|
248
|
+
</div>
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
`, styles: ["\n :host {\n display: block;\n }\n\n :host(.search-hidden) {\n display: none;\n }\n\n :host(.panel-full-width) {\n grid-column: 1 / -1 !important;\n }\n\n .form-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n transition: all 0.3s ease;\n }\n\n :host(.panel-full-width) .form-card {\n box-shadow: 0 4px 8px rgba(102, 126, 234, 0.15);\n border: 2px solid #667eea;\n }\n\n .collapsible-card {\n overflow: hidden;\n }\n\n .collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n user-select: none;\n transition: all 0.3s ease;\n }\n\n .collapsible-header:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n }\n\n .collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n cursor: pointer;\n }\n\n .collapsible-title i {\n font-size: 20px;\n color: #667eea;\n }\n\n .collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n }\n\n .panel-width-controls {\n display: flex;\n gap: 6px;\n align-items: center;\n }\n\n .width-control-btn {\n padding: 6px 10px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #6b7280;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .width-control-btn:hover {\n background: #f3f4f6;\n color: #374151;\n border-color: #9ca3af;\n }\n\n .width-control-btn.active {\n background: #667eea;\n color: white;\n border-color: #667eea;\n }\n\n .width-control-btn i {\n font-size: 12px;\n }\n\n .collapsible-header .collapse-icon {\n color: #6b7280;\n transition: transform 0.3s ease;\n cursor: pointer;\n padding: 4px;\n }\n\n .collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n }\n\n .collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n }\n\n .form-body {\n padding: 24px;\n overflow: auto;\n max-height: 600px;\n }\n\n /* Related Entity Sections - Visual Distinction */\n .form-card.related-entity {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n }\n\n .form-card.related-entity .collapsible-header {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n }\n\n .form-card.related-entity .collapsible-header:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n }\n\n .form-card.related-entity .collapsible-title i {\n color: #3b82f6;\n }\n\n /* Row count badge for related entity sections */\n .collapsible-title .row-count-badge {\n background: #10b981;\n color: white;\n padding: 3px 8px 2px 9px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n line-height: 1;\n }\n\n /* Gray badge for zero rows (loaded but empty) */\n .collapsible-title .row-count-badge.zero-rows {\n background: #9ca3af;\n }\n\n /* Search highlighting */\n .collapsible-title h3 ::ng-deep .search-highlight {\n background-color: #fef08a;\n color: #854d0e;\n padding: 0;\n border-radius: 2px;\n font-weight: 700;\n box-shadow: 0 0 0 2px #fef08a;\n }\n "] }]
|
|
252
|
+
}], () => [{ type: i0.ChangeDetectorRef }], { sectionKey: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}], sectionName: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], icon: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], form: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], formContext: [{
|
|
261
|
+
type: Input
|
|
262
|
+
}], variant: [{
|
|
263
|
+
type: Input
|
|
264
|
+
}], badgeCount: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], entityName: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], widthModeChange: [{
|
|
269
|
+
type: Output
|
|
270
|
+
}], fieldComponents: [{
|
|
271
|
+
type: ContentChildren,
|
|
272
|
+
args: [MJFormField, { descendants: true }]
|
|
273
|
+
}], isHidden: [{
|
|
274
|
+
type: HostBinding,
|
|
275
|
+
args: ['class.search-hidden']
|
|
276
|
+
}], isFullWidth: [{
|
|
277
|
+
type: HostBinding,
|
|
278
|
+
args: ['class.panel-full-width']
|
|
279
|
+
}] }); })();
|
|
280
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollapsiblePanelComponent, { className: "CollapsiblePanelComponent", filePath: "src/lib/collapsible-panel.component.ts", lineNumber: 243 }); })();
|
|
281
|
+
//# sourceMappingURL=collapsible-panel.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible-panel.component.js","sourceRoot":"","sources":["../../src/lib/collapsible-panel.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Reusable component for form section controls (Expand All, Collapse All, Filter, Counter)
|
|
5
|
+
* Designed to be projected into form toolbars via ng-content with [toolbar-additional-controls] selector
|
|
6
|
+
*/
|
|
7
|
+
export declare class FormSectionControlsComponent {
|
|
8
|
+
visibleCount: number;
|
|
9
|
+
totalCount: number;
|
|
10
|
+
searchFilter: string;
|
|
11
|
+
expandedCount: number;
|
|
12
|
+
showEmptyFields: boolean;
|
|
13
|
+
expandAll: EventEmitter<void>;
|
|
14
|
+
collapseAll: EventEmitter<void>;
|
|
15
|
+
filterChange: EventEmitter<string>;
|
|
16
|
+
showEmptyFieldsChange: EventEmitter<boolean>;
|
|
17
|
+
searchTerm: string;
|
|
18
|
+
get allExpanded(): boolean;
|
|
19
|
+
get allCollapsed(): boolean;
|
|
20
|
+
clearFilter(): void;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FormSectionControlsComponent, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormSectionControlsComponent, "mj-form-section-controls[toolbar-additional-controls]", never, { "visibleCount": { "alias": "visibleCount"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "searchFilter": { "alias": "searchFilter"; "required": false; }; "expandedCount": { "alias": "expandedCount"; "required": false; }; "showEmptyFields": { "alias": "showEmptyFields"; "required": false; }; }, { "expandAll": "expandAll"; "collapseAll": "collapseAll"; "filterChange": "filterChange"; "showEmptyFieldsChange": "showEmptyFieldsChange"; }, never, never, false, never>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=form-section-controls.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-section-controls.component.d.ts","sourceRoot":"","sources":["../../src/lib/form-section-controls.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAA0C,MAAM,eAAe,CAAC;;AAEhG;;;GAGG;AACH,qBAwJa,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAK;IACzB,UAAU,EAAE,MAAM,CAAK;IACvB,YAAY,EAAE,MAAM,CAAM;IAC1B,aAAa,EAAE,MAAM,CAAK;IAC1B,eAAe,EAAE,OAAO,CAAS;IAChC,SAAS,qBAA4B;IACrC,WAAW,qBAA4B;IACvC,YAAY,uBAA8B;IAC1C,qBAAqB,wBAA+B;IAE9D,UAAU,SAAM;IAEhB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,WAAW,IAAI,IAAI;yCArBV,4BAA4B;2CAA5B,4BAA4B;CAyBxC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/forms";
|
|
4
|
+
import * as i2 from "@progress/kendo-angular-buttons";
|
|
5
|
+
const _c0 = ["toolbar-additional-controls", ""];
|
|
6
|
+
function FormSectionControlsComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
7
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
8
|
+
i0.ɵɵelementStart(0, "button", 11);
|
|
9
|
+
i0.ɵɵlistener("click", function FormSectionControlsComponent_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.clearFilter()); });
|
|
10
|
+
i0.ɵɵelement(1, "span", 12);
|
|
11
|
+
i0.ɵɵelementEnd();
|
|
12
|
+
} }
|
|
13
|
+
function FormSectionControlsComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementStart(0, "span", 10);
|
|
15
|
+
i0.ɵɵtext(1);
|
|
16
|
+
i0.ɵɵelementEnd();
|
|
17
|
+
} if (rf & 2) {
|
|
18
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
19
|
+
i0.ɵɵadvance();
|
|
20
|
+
i0.ɵɵtextInterpolate2("", ctx_r2.visibleCount, "/", ctx_r2.totalCount, "");
|
|
21
|
+
} }
|
|
22
|
+
/**
|
|
23
|
+
* Reusable component for form section controls (Expand All, Collapse All, Filter, Counter)
|
|
24
|
+
* Designed to be projected into form toolbars via ng-content with [toolbar-additional-controls] selector
|
|
25
|
+
*/
|
|
26
|
+
export class FormSectionControlsComponent {
|
|
27
|
+
visibleCount = 0;
|
|
28
|
+
totalCount = 0;
|
|
29
|
+
searchFilter = '';
|
|
30
|
+
expandedCount = 0;
|
|
31
|
+
showEmptyFields = false;
|
|
32
|
+
expandAll = new EventEmitter();
|
|
33
|
+
collapseAll = new EventEmitter();
|
|
34
|
+
filterChange = new EventEmitter();
|
|
35
|
+
showEmptyFieldsChange = new EventEmitter();
|
|
36
|
+
searchTerm = '';
|
|
37
|
+
get allExpanded() {
|
|
38
|
+
return this.totalCount > 0 && this.expandedCount === this.totalCount;
|
|
39
|
+
}
|
|
40
|
+
get allCollapsed() {
|
|
41
|
+
return this.totalCount > 0 && this.expandedCount === 0;
|
|
42
|
+
}
|
|
43
|
+
clearFilter() {
|
|
44
|
+
this.searchTerm = '';
|
|
45
|
+
this.filterChange.emit('');
|
|
46
|
+
}
|
|
47
|
+
static ɵfac = function FormSectionControlsComponent_Factory(t) { return new (t || FormSectionControlsComponent)(); };
|
|
48
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FormSectionControlsComponent, selectors: [["mj-form-section-controls", "toolbar-additional-controls", ""]], inputs: { visibleCount: "visibleCount", totalCount: "totalCount", searchFilter: "searchFilter", expandedCount: "expandedCount", showEmptyFields: "showEmptyFields" }, outputs: { expandAll: "expandAll", collapseAll: "collapseAll", filterChange: "filterChange", showEmptyFieldsChange: "showEmptyFieldsChange" }, attrs: _c0, decls: 13, vars: 6, consts: [["searchInput", ""], ["kendoButton", "", "title", "Expand all sections", 3, "click", "disabled"], [1, "fa-solid", "fa-angle-double-down"], ["kendoButton", "", "title", "Collapse all sections", 3, "click", "disabled"], [1, "fa-solid", "fa-angle-double-up"], [1, "show-empty-fields-toggle"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [2, "position", "relative"], ["type", "text", "placeholder", "Filter sections...", 1, "section-search", 3, "ngModelChange", "ngModel"], ["kendoButton", "", "title", "Clear filter", 1, "clear-search-btn"], [1, "section-count"], ["kendoButton", "", "title", "Clear filter", 1, "clear-search-btn", 3, "click"], [1, "fa-solid", "fa-xmark"]], template: function FormSectionControlsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
50
|
+
i0.ɵɵelementStart(0, "button", 1);
|
|
51
|
+
i0.ɵɵlistener("click", function FormSectionControlsComponent_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.expandAll.emit()); });
|
|
52
|
+
i0.ɵɵelement(1, "span", 2);
|
|
53
|
+
i0.ɵɵelementEnd();
|
|
54
|
+
i0.ɵɵelementStart(2, "button", 3);
|
|
55
|
+
i0.ɵɵlistener("click", function FormSectionControlsComponent_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.collapseAll.emit()); });
|
|
56
|
+
i0.ɵɵelement(3, "span", 4);
|
|
57
|
+
i0.ɵɵelementEnd();
|
|
58
|
+
i0.ɵɵelementStart(4, "label", 5)(5, "input", 6);
|
|
59
|
+
i0.ɵɵtwoWayListener("ngModelChange", function FormSectionControlsComponent_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.showEmptyFields, $event) || (ctx.showEmptyFields = $event); return i0.ɵɵresetView($event); });
|
|
60
|
+
i0.ɵɵlistener("ngModelChange", function FormSectionControlsComponent_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.showEmptyFieldsChange.emit($event)); });
|
|
61
|
+
i0.ɵɵelementEnd();
|
|
62
|
+
i0.ɵɵelementStart(6, "span");
|
|
63
|
+
i0.ɵɵtext(7, "Show Empty Fields");
|
|
64
|
+
i0.ɵɵelementEnd()();
|
|
65
|
+
i0.ɵɵelementStart(8, "div", 7)(9, "input", 8, 0);
|
|
66
|
+
i0.ɵɵtwoWayListener("ngModelChange", function FormSectionControlsComponent_Template_input_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.searchTerm, $event) || (ctx.searchTerm = $event); return i0.ɵɵresetView($event); });
|
|
67
|
+
i0.ɵɵlistener("ngModelChange", function FormSectionControlsComponent_Template_input_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.filterChange.emit($event)); });
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
i0.ɵɵtemplate(11, FormSectionControlsComponent_Conditional_11_Template, 2, 0, "button", 9);
|
|
70
|
+
i0.ɵɵelementEnd();
|
|
71
|
+
i0.ɵɵtemplate(12, FormSectionControlsComponent_Conditional_12_Template, 2, 2, "span", 10);
|
|
72
|
+
} if (rf & 2) {
|
|
73
|
+
i0.ɵɵproperty("disabled", ctx.allExpanded);
|
|
74
|
+
i0.ɵɵadvance(2);
|
|
75
|
+
i0.ɵɵproperty("disabled", ctx.allCollapsed);
|
|
76
|
+
i0.ɵɵadvance(3);
|
|
77
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx.showEmptyFields);
|
|
78
|
+
i0.ɵɵadvance(4);
|
|
79
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx.searchTerm);
|
|
80
|
+
i0.ɵɵadvance(2);
|
|
81
|
+
i0.ɵɵconditional(ctx.searchTerm ? 11 : -1);
|
|
82
|
+
i0.ɵɵadvance();
|
|
83
|
+
i0.ɵɵconditional(ctx.searchFilter && ctx.searchFilter.trim() ? 12 : -1);
|
|
84
|
+
} }, dependencies: [i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.ButtonComponent], styles: ["\n\n\n button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n }\n\n button[_ngcontent-%COMP%]:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n }\n\n button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n }\n\n button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n }\n\n .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n }\n\n .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n }\n\n .section-search[_ngcontent-%COMP%]::placeholder {\n color: #9ca3af;\n font-style: italic;\n }\n\n .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n font-weight: 500;\n padding: 6px 12px;\n background: #f3f4f6;\n border-radius: 6px;\n }\n\n .clear-search-btn[_ngcontent-%COMP%] {\n position: absolute;\n right: 6px;\n top: 50%;\n transform: translateY(-50%);\n padding: 4px 8px;\n min-width: unset;\n }\n\n .show-empty-fields-toggle[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: white;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n user-select: none;\n }\n\n .show-empty-fields-toggle[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n border-color: #9ca3af;\n }\n\n .show-empty-fields-toggle[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n cursor: pointer;\n width: 16px;\n height: 16px;\n }\n\n .show-empty-fields-toggle[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n white-space: nowrap;\n }"], changeDetection: 0 });
|
|
85
|
+
}
|
|
86
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormSectionControlsComponent, [{
|
|
87
|
+
type: Component,
|
|
88
|
+
args: [{ selector: 'mj-form-section-controls[toolbar-additional-controls]', changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
89
|
+
<button kendoButton
|
|
90
|
+
(click)="expandAll.emit()"
|
|
91
|
+
[disabled]="allExpanded"
|
|
92
|
+
title="Expand all sections">
|
|
93
|
+
<span class="fa-solid fa-angle-double-down"></span>
|
|
94
|
+
</button>
|
|
95
|
+
<button kendoButton
|
|
96
|
+
(click)="collapseAll.emit()"
|
|
97
|
+
[disabled]="allCollapsed"
|
|
98
|
+
title="Collapse all sections">
|
|
99
|
+
<span class="fa-solid fa-angle-double-up"></span>
|
|
100
|
+
</button>
|
|
101
|
+
<label class="show-empty-fields-toggle">
|
|
102
|
+
<input
|
|
103
|
+
type="checkbox"
|
|
104
|
+
[(ngModel)]="showEmptyFields"
|
|
105
|
+
(ngModelChange)="showEmptyFieldsChange.emit($event)">
|
|
106
|
+
<span>Show Empty Fields</span>
|
|
107
|
+
</label>
|
|
108
|
+
<div style="position: relative;">
|
|
109
|
+
<input
|
|
110
|
+
type="text"
|
|
111
|
+
class="section-search"
|
|
112
|
+
placeholder="Filter sections..."
|
|
113
|
+
[(ngModel)]="searchTerm"
|
|
114
|
+
(ngModelChange)="filterChange.emit($event)"
|
|
115
|
+
#searchInput>
|
|
116
|
+
@if (searchTerm) {
|
|
117
|
+
<button
|
|
118
|
+
kendoButton
|
|
119
|
+
class="clear-search-btn"
|
|
120
|
+
(click)="clearFilter()"
|
|
121
|
+
title="Clear filter">
|
|
122
|
+
<span class="fa-solid fa-xmark"></span>
|
|
123
|
+
</button>
|
|
124
|
+
}
|
|
125
|
+
</div>
|
|
126
|
+
@if (searchFilter && searchFilter.trim()) {
|
|
127
|
+
<span class="section-count">{{visibleCount}}/{{totalCount}}</span>
|
|
128
|
+
}
|
|
129
|
+
`, styles: ["\n /* Note: positioning (display, gap, align-items, margin-left) is handled by parent toolbar CSS */\n\n button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n }\n\n button:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n }\n\n button:active {\n transform: translateY(0);\n }\n\n button i {\n margin-right: 0;\n font-size: 14px;\n }\n\n .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n }\n\n .section-search:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n }\n\n .section-search::placeholder {\n color: #9ca3af;\n font-style: italic;\n }\n\n .section-count {\n font-size: 13px;\n color: #6b7280;\n font-weight: 500;\n padding: 6px 12px;\n background: #f3f4f6;\n border-radius: 6px;\n }\n\n .clear-search-btn {\n position: absolute;\n right: 6px;\n top: 50%;\n transform: translateY(-50%);\n padding: 4px 8px;\n min-width: unset;\n }\n\n .show-empty-fields-toggle {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: white;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n user-select: none;\n }\n\n .show-empty-fields-toggle:hover {\n background: #f3f4f6;\n border-color: #9ca3af;\n }\n\n .show-empty-fields-toggle input[type=\"checkbox\"] {\n cursor: pointer;\n width: 16px;\n height: 16px;\n }\n\n .show-empty-fields-toggle span {\n white-space: nowrap;\n }\n "] }]
|
|
130
|
+
}], null, { visibleCount: [{
|
|
131
|
+
type: Input
|
|
132
|
+
}], totalCount: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], searchFilter: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], expandedCount: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], showEmptyFields: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], expandAll: [{
|
|
141
|
+
type: Output
|
|
142
|
+
}], collapseAll: [{
|
|
143
|
+
type: Output
|
|
144
|
+
}], filterChange: [{
|
|
145
|
+
type: Output
|
|
146
|
+
}], showEmptyFieldsChange: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}] }); })();
|
|
149
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FormSectionControlsComponent, { className: "FormSectionControlsComponent", filePath: "src/lib/form-section-controls.component.ts", lineNumber: 159 }); })();
|
|
150
|
+
//# sourceMappingURL=form-section-controls.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-section-controls.component.js","sourceRoot":"","sources":["../../src/lib/form-section-controls.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;;;;;;;IAsChF,kCAIyB;IADrB,iMAAS,oBAAa,KAAC;IAEvB,2BAAuC;IAC3C,iBAAS;;;IAIb,gCAA4B;IAAA,YAA+B;IAAA,iBAAO;;;IAAtC,cAA+B;IAA/B,0EAA+B;;AA9CvE;;;GAGG;AAyJH,MAAM,OAAO,4BAA4B;IAC5B,YAAY,GAAW,CAAC,CAAC;IACzB,UAAU,GAAW,CAAC,CAAC;IACvB,YAAY,GAAW,EAAE,CAAC;IAC1B,aAAa,GAAW,CAAC,CAAC;IAC1B,eAAe,GAAY,KAAK,CAAC;IAChC,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;IACrC,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;IACvC,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;IAC1C,qBAAqB,GAAG,IAAI,YAAY,EAAW,CAAC;IAE9D,UAAU,GAAG,EAAE,CAAC;IAEhB,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,UAAU,CAAC;IACzE,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,WAAW;QACP,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;sFAxBQ,4BAA4B;6DAA5B,4BAA4B;;YApJjC,iCAGoC;YAF5B,+IAAS,oBAAgB,KAAC;YAG9B,0BAAmD;YACvD,iBAAS;YACT,iCAGsC;YAF9B,+IAAS,sBAAkB,KAAC;YAGhC,0BAAiD;YACrD,iBAAS;YAEL,AADJ,gCAAwC,eAIqB;YADrD,2QAA6B;YAC7B,oKAAiB,sCAAkC,KAAC;YAHxD,iBAGyD;YACzD,4BAAM;YAAA,iCAAiB;YAC3B,AAD2B,iBAAO,EAC1B;YAEJ,AADJ,8BAAiC,kBAOZ;YAFb,iQAAwB;YACxB,oKAAiB,6BAAyB,KAAC;YAL/C,iBAMiB;YACjB,0FAAkB;YAStB,iBAAM;YACN,yFAA2C;;YAnCnC,0CAAwB;YAMxB,eAAyB;YAAzB,2CAAyB;YAOzB,eAA6B;YAA7B,mDAA6B;YAS7B,eAAwB;YAAxB,8CAAwB;YAG5B,eAQC;YARD,0CAQC;YAEL,cAEC;YAFD,uEAEC;;;iFA6GI,4BAA4B;cAxJxC,SAAS;2BACI,uDAAuD,mBAChD,uBAAuB,CAAC,MAAM,YACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyCT;gBA6GQ,YAAY;kBAApB,KAAK;YACG,UAAU;kBAAlB,KAAK;YACG,YAAY;kBAApB,KAAK;YACG,aAAa;kBAArB,KAAK;YACG,eAAe;kBAAvB,KAAK;YACI,SAAS;kBAAlB,MAAM;YACG,WAAW;kBAApB,MAAM;YACG,YAAY;kBAArB,MAAM;YACG,qBAAqB;kBAA9B,MAAM;;kFATE,4BAA4B"}
|
package/dist/module.d.ts
CHANGED
|
@@ -2,24 +2,26 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./lib/section-loader-component";
|
|
3
3
|
import * as i2 from "./lib/base-field-component";
|
|
4
4
|
import * as i3 from "./lib/link-field.component";
|
|
5
|
-
import * as i4 from "
|
|
6
|
-
import * as i5 from "
|
|
7
|
-
import * as i6 from "@
|
|
8
|
-
import * as i7 from "@
|
|
9
|
-
import * as i8 from "@
|
|
10
|
-
import * as i9 from "@
|
|
11
|
-
import * as i10 from "@progress/kendo-angular-
|
|
12
|
-
import * as i11 from "@progress/kendo-angular-
|
|
13
|
-
import * as i12 from "@
|
|
14
|
-
import * as i13 from "@progress/kendo-angular-
|
|
15
|
-
import * as i14 from "@
|
|
16
|
-
import * as i15 from "@
|
|
17
|
-
import * as i16 from "@
|
|
18
|
-
import * as i17 from "@memberjunction/ng-
|
|
19
|
-
import * as i18 from "
|
|
5
|
+
import * as i4 from "./lib/form-section-controls.component";
|
|
6
|
+
import * as i5 from "./lib/collapsible-panel.component";
|
|
7
|
+
import * as i6 from "@angular/common";
|
|
8
|
+
import * as i7 from "@angular/forms";
|
|
9
|
+
import * as i8 from "@memberjunction/ng-tabstrip";
|
|
10
|
+
import * as i9 from "@memberjunction/ng-record-changes";
|
|
11
|
+
import * as i10 from "@progress/kendo-angular-buttons";
|
|
12
|
+
import * as i11 from "@progress/kendo-angular-inputs";
|
|
13
|
+
import * as i12 from "@progress/kendo-angular-dateinputs";
|
|
14
|
+
import * as i13 from "@progress/kendo-angular-dropdowns";
|
|
15
|
+
import * as i14 from "@memberjunction/ng-link-directives";
|
|
16
|
+
import * as i15 from "@progress/kendo-angular-dialog";
|
|
17
|
+
import * as i16 from "@progress/kendo-angular-indicators";
|
|
18
|
+
import * as i17 from "@memberjunction/ng-container-directives";
|
|
19
|
+
import * as i18 from "@memberjunction/ng-shared";
|
|
20
|
+
import * as i19 from "@memberjunction/ng-code-editor";
|
|
21
|
+
import * as i20 from "ngx-markdown";
|
|
20
22
|
export declare class BaseFormsModule {
|
|
21
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormsModule, never>;
|
|
22
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<BaseFormsModule, [typeof i1.SectionLoaderComponent, typeof i2.MJFormField, typeof i3.MJLinkField], [typeof
|
|
24
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<BaseFormsModule, [typeof i1.SectionLoaderComponent, typeof i2.MJFormField, typeof i3.MJLinkField, typeof i4.FormSectionControlsComponent, typeof i5.CollapsiblePanelComponent], [typeof i6.CommonModule, typeof i7.FormsModule, typeof i8.MJTabStripModule, typeof i9.RecordChangesModule, typeof i10.ButtonsModule, typeof i11.InputsModule, typeof i12.DateInputsModule, typeof i13.DropDownsModule, typeof i14.LinkDirectivesModule, typeof i15.DialogsModule, typeof i16.IndicatorsModule, typeof i17.ContainerDirectivesModule, typeof i18.MemberJunctionSharedModule, typeof i19.CodeEditorModule, typeof i20.MarkdownModule], [typeof i1.SectionLoaderComponent, typeof i2.MJFormField, typeof i3.MJLinkField, typeof i4.FormSectionControlsComponent, typeof i5.CollapsiblePanelComponent]>;
|
|
23
25
|
static ɵinj: i0.ɵɵInjectorDeclaration<BaseFormsModule>;
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=module.d.ts.map
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4BA,qBAiCa,eAAe;yCAAf,eAAe;0CAAf,eAAe;0CAAf,eAAe;CAAI"}
|
package/dist/module.js
CHANGED
|
@@ -19,6 +19,8 @@ import { CodeEditorModule } from '@memberjunction/ng-code-editor';
|
|
|
19
19
|
// Markdown
|
|
20
20
|
import { MarkdownModule } from 'ngx-markdown';
|
|
21
21
|
import { MJLinkField } from './lib/link-field.component';
|
|
22
|
+
import { FormSectionControlsComponent } from './lib/form-section-controls.component';
|
|
23
|
+
import { CollapsiblePanelComponent } from './lib/collapsible-panel.component';
|
|
22
24
|
import * as i0 from "@angular/core";
|
|
23
25
|
import * as i1 from "ngx-markdown";
|
|
24
26
|
export class BaseFormsModule {
|
|
@@ -46,7 +48,9 @@ export class BaseFormsModule {
|
|
|
46
48
|
declarations: [
|
|
47
49
|
SectionLoaderComponent,
|
|
48
50
|
MJFormField,
|
|
49
|
-
MJLinkField
|
|
51
|
+
MJLinkField,
|
|
52
|
+
FormSectionControlsComponent,
|
|
53
|
+
CollapsiblePanelComponent
|
|
50
54
|
],
|
|
51
55
|
imports: [
|
|
52
56
|
CommonModule,
|
|
@@ -68,13 +72,17 @@ export class BaseFormsModule {
|
|
|
68
72
|
exports: [
|
|
69
73
|
SectionLoaderComponent,
|
|
70
74
|
MJFormField,
|
|
71
|
-
MJLinkField
|
|
75
|
+
MJLinkField,
|
|
76
|
+
FormSectionControlsComponent,
|
|
77
|
+
CollapsiblePanelComponent
|
|
72
78
|
]
|
|
73
79
|
}]
|
|
74
80
|
}], null, null); })();
|
|
75
81
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(BaseFormsModule, { declarations: [SectionLoaderComponent,
|
|
76
82
|
MJFormField,
|
|
77
|
-
MJLinkField
|
|
83
|
+
MJLinkField,
|
|
84
|
+
FormSectionControlsComponent,
|
|
85
|
+
CollapsiblePanelComponent], imports: [CommonModule,
|
|
78
86
|
FormsModule,
|
|
79
87
|
MJTabStripModule,
|
|
80
88
|
RecordChangesModule,
|
|
@@ -89,5 +97,7 @@ export class BaseFormsModule {
|
|
|
89
97
|
MemberJunctionSharedModule,
|
|
90
98
|
CodeEditorModule, i1.MarkdownModule], exports: [SectionLoaderComponent,
|
|
91
99
|
MJFormField,
|
|
92
|
-
MJLinkField
|
|
100
|
+
MJLinkField,
|
|
101
|
+
FormSectionControlsComponent,
|
|
102
|
+
CollapsiblePanelComponent] }); })();
|
|
93
103
|
//# sourceMappingURL=module.js.map
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;;;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;;;AAmC9E,MAAM,OAAO,eAAe;yEAAf,eAAe;4DAAf,eAAe;gEAxBxB,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,mBAAmB;YACnB,aAAa;YACb,YAAY;YACZ,gBAAgB;YAChB,eAAe;YACf,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,yBAAyB;YACzB,0BAA0B;YAC1B,gBAAgB;YAChB,cAAc,CAAC,OAAO,EAAE;;iFAUf,eAAe;cAjC3B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,sBAAsB;oBACtB,WAAW;oBACX,WAAW;oBACX,4BAA4B;oBAC5B,yBAAyB;iBAC1B;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,gBAAgB;oBAChB,mBAAmB;oBACnB,aAAa;oBACb,YAAY;oBACZ,gBAAgB;oBAChB,eAAe;oBACf,oBAAoB;oBACpB,aAAa;oBACb,gBAAgB;oBAChB,yBAAyB;oBACzB,0BAA0B;oBAC1B,gBAAgB;oBAChB,cAAc,CAAC,OAAO,EAAE;iBACzB;gBACD,OAAO,EAAE;oBACP,sBAAsB;oBACtB,WAAW;oBACX,WAAW;oBACX,4BAA4B;oBAC5B,yBAAyB;iBAC1B;aACF;;wFACY,eAAe,mBA/BxB,sBAAsB;QACtB,WAAW;QACX,WAAW;QACX,4BAA4B;QAC5B,yBAAyB,aAGzB,YAAY;QACZ,WAAW;QACX,gBAAgB;QAChB,mBAAmB;QACnB,aAAa;QACb,YAAY;QACZ,gBAAgB;QAChB,eAAe;QACf,oBAAoB;QACpB,aAAa;QACb,gBAAgB;QAChB,yBAAyB;QACzB,0BAA0B;QAC1B,gBAAgB,gCAIhB,sBAAsB;QACtB,WAAW;QACX,WAAW;QACX,4BAA4B;QAC5B,yBAAyB"}
|