@memberjunction/ng-base-forms 5.30.1 → 5.31.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/__tests__/base-forms.test.js +21 -17
- package/dist/lib/__tests__/base-forms.test.js.map +1 -1
- package/dist/lib/base-form-component.d.ts.map +1 -1
- package/dist/lib/base-form-component.js +11 -9
- package/dist/lib/base-form-component.js.map +1 -1
- package/dist/lib/base-record-component.d.ts +5 -1
- package/dist/lib/base-record-component.d.ts.map +1 -1
- package/dist/lib/base-record-component.js +9 -1
- package/dist/lib/base-record-component.js.map +1 -1
- package/dist/lib/container/record-form-container.component.d.ts +2 -1
- package/dist/lib/container/record-form-container.component.d.ts.map +1 -1
- package/dist/lib/container/record-form-container.component.js +9 -8
- package/dist/lib/container/record-form-container.component.js.map +1 -1
- package/dist/lib/field/form-field.component.d.ts +2 -1
- package/dist/lib/field/form-field.component.d.ts.map +1 -1
- package/dist/lib/field/form-field.component.js +9 -8
- package/dist/lib/field/form-field.component.js.map +1 -1
- package/dist/lib/form-state.service.d.ts +7 -1
- package/dist/lib/form-state.service.d.ts.map +1 -1
- package/dist/lib/form-state.service.js +10 -1
- package/dist/lib/form-state.service.js.map +1 -1
- package/dist/lib/isa-related-panel/isa-hierarchy-utils.js +1 -1
- package/dist/lib/isa-related-panel/isa-hierarchy-utils.js.map +1 -1
- package/dist/lib/isa-related-panel/isa-related-card.component.d.ts +2 -1
- package/dist/lib/isa-related-panel/isa-related-card.component.d.ts.map +1 -1
- package/dist/lib/isa-related-panel/isa-related-card.component.js +7 -7
- package/dist/lib/isa-related-panel/isa-related-card.component.js.map +1 -1
- package/package.json +10 -10
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, inject, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
const _forTrack0 = ($index, $item) => $item.Label;
|
|
5
5
|
const _forTrack1 = ($index, $item) => $item.EntityName;
|
|
@@ -127,7 +127,7 @@ function MjIsaRelatedCardComponent_Conditional_12_Template(rf, ctx) { if (rf & 1
|
|
|
127
127
|
* Used inside `<mj-isa-related-panel>` to show related IS-A records
|
|
128
128
|
* alongside the main form.
|
|
129
129
|
*/
|
|
130
|
-
export class MjIsaRelatedCardComponent {
|
|
130
|
+
export class MjIsaRelatedCardComponent extends BaseAngularComponent {
|
|
131
131
|
cdr = inject(ChangeDetectorRef);
|
|
132
132
|
/** The entity name for the related record (e.g., "Members", "Speakers") */
|
|
133
133
|
EntityName = '';
|
|
@@ -188,8 +188,8 @@ export class MjIsaRelatedCardComponent {
|
|
|
188
188
|
this.LoadError = false;
|
|
189
189
|
this.cdr.markForCheck();
|
|
190
190
|
try {
|
|
191
|
-
const md =
|
|
192
|
-
this.EntityInfoRef = md.EntityByName(this.EntityName);
|
|
191
|
+
const md = this.ProviderToUse;
|
|
192
|
+
this.EntityInfoRef = md.EntityByName(this.EntityName) ?? null;
|
|
193
193
|
if (!this.EntityInfoRef) {
|
|
194
194
|
this.LoadError = true;
|
|
195
195
|
return;
|
|
@@ -289,8 +289,8 @@ export class MjIsaRelatedCardComponent {
|
|
|
289
289
|
Direction: this.Relationship === 'sibling' ? 'child' : 'child'
|
|
290
290
|
});
|
|
291
291
|
}
|
|
292
|
-
static ɵfac = function MjIsaRelatedCardComponent_Factory(__ngFactoryType__) { return
|
|
293
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MjIsaRelatedCardComponent, selectors: [["mj-isa-related-card"]], inputs: { EntityName: "EntityName", PrimaryKey: "PrimaryKey", CurrentRecordName: "CurrentRecordName", Relationship: "Relationship", Depth: "Depth", Children: "Children" }, outputs: { Navigate: "Navigate" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 13, vars: 14, consts: [[1, "mj-isa-card"], [1, "mj-isa-card__header"], [1, "mj-isa-card__header-left"], [1, "mj-isa-card__icon"], [1, "mj-isa-card__entity-name"], [1, "mj-isa-card__record-name"], ["href", "#", 1, "mj-isa-card__open-link", 3, "click"], [1, "mj-isa-card__body", "mj-isa-card__body--loading"], [1, "mj-isa-card__body", "mj-isa-card__body--error"], [1, "mj-isa-card__children"], [1, "mj-isa-card__loading-bar"], [1, "mj-isa-card__loading-bar", "mj-isa-card__loading-bar--short"], [1, "mj-isa-card__error-text"], [1, "mj-isa-card__body"], [1, "mj-isa-card__field"], [1, "mj-isa-card__field-label"], [1, "mj-isa-card__field-value"], [1, "mj-isa-card__expand-row"], [1, "mj-isa-card__expand-btn", 3, "click"], [1, "mj-isa-card__extra-fields"], [1, "fa-solid", "fa-chevron-down", "mj-isa-card__expand-chevron"], [1, "fa-solid", "fa-chevron-up", "mj-isa-card__expand-chevron"], [3, "EntityName", "PrimaryKey", "CurrentRecordName", "Relationship", "Depth", "Children"], [3, "Navigate", "EntityName", "PrimaryKey", "CurrentRecordName", "Relationship", "Depth", "Children"]], template: function MjIsaRelatedCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵMjIsaRelatedCardComponent_BaseFactory; return function MjIsaRelatedCardComponent_Factory(__ngFactoryType__) { return (ɵMjIsaRelatedCardComponent_BaseFactory || (ɵMjIsaRelatedCardComponent_BaseFactory = i0.ɵɵgetInheritedFactory(MjIsaRelatedCardComponent)))(__ngFactoryType__ || MjIsaRelatedCardComponent); }; })();
|
|
293
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MjIsaRelatedCardComponent, selectors: [["mj-isa-related-card"]], inputs: { EntityName: "EntityName", PrimaryKey: "PrimaryKey", CurrentRecordName: "CurrentRecordName", Relationship: "Relationship", Depth: "Depth", Children: "Children" }, outputs: { Navigate: "Navigate" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 13, vars: 14, consts: [[1, "mj-isa-card"], [1, "mj-isa-card__header"], [1, "mj-isa-card__header-left"], [1, "mj-isa-card__icon"], [1, "mj-isa-card__entity-name"], [1, "mj-isa-card__record-name"], ["href", "#", 1, "mj-isa-card__open-link", 3, "click"], [1, "mj-isa-card__body", "mj-isa-card__body--loading"], [1, "mj-isa-card__body", "mj-isa-card__body--error"], [1, "mj-isa-card__children"], [1, "mj-isa-card__loading-bar"], [1, "mj-isa-card__loading-bar", "mj-isa-card__loading-bar--short"], [1, "mj-isa-card__error-text"], [1, "mj-isa-card__body"], [1, "mj-isa-card__field"], [1, "mj-isa-card__field-label"], [1, "mj-isa-card__field-value"], [1, "mj-isa-card__expand-row"], [1, "mj-isa-card__expand-btn", 3, "click"], [1, "mj-isa-card__extra-fields"], [1, "fa-solid", "fa-chevron-down", "mj-isa-card__expand-chevron"], [1, "fa-solid", "fa-chevron-up", "mj-isa-card__expand-chevron"], [3, "EntityName", "PrimaryKey", "CurrentRecordName", "Relationship", "Depth", "Children"], [3, "Navigate", "EntityName", "PrimaryKey", "CurrentRecordName", "Relationship", "Depth", "Children"]], template: function MjIsaRelatedCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
294
294
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
|
|
295
295
|
i0.ɵɵelement(3, "i", 3);
|
|
296
296
|
i0.ɵɵelementStart(4, "span", 4);
|
|
@@ -343,5 +343,5 @@ export class MjIsaRelatedCardComponent {
|
|
|
343
343
|
}], Navigate: [{
|
|
344
344
|
type: Output
|
|
345
345
|
}] }); })();
|
|
346
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MjIsaRelatedCardComponent, { className: "MjIsaRelatedCardComponent", filePath: "src/lib/isa-related-panel/isa-related-card.component.ts", lineNumber:
|
|
346
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MjIsaRelatedCardComponent, { className: "MjIsaRelatedCardComponent", filePath: "src/lib/isa-related-panel/isa-related-card.component.ts", lineNumber: 39 }); })();
|
|
347
347
|
//# sourceMappingURL=isa-related-card.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isa-related-card.component.js","sourceRoot":"","sources":["../../../src/lib/isa-related-panel/isa-related-card.component.ts","../../../src/lib/isa-related-panel/isa-related-card.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, Input, Output, EventEmitter,\n ChangeDetectionStrategy, ChangeDetectorRef, inject,\n OnInit, OnChanges, SimpleChanges, ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseEntity, EntityInfo, EntityFieldInfo, Metadata, CompositeKey\n} from '@memberjunction/core';\nimport { EntityHierarchyNavigationEvent } from '../types/navigation-events';\nimport { IsaRelatedItem } from './isa-hierarchy-utils';\n\n/**\n * Represents a single field value displayed in the ISA related card.\n */\nexport interface IsaCardFieldDisplay {\n Label: string;\n Value: string;\n IsBooleanTrue?: boolean;\n IsBooleanFalse?: boolean;\n}\n\n/**\n * Compact card showing summary fields for one IS-A related entity record\n * (sibling or child). Displays DefaultInView fields by default with\n * expand/collapse for remaining fields.\n *\n * Used inside `<mj-isa-related-panel>` to show related IS-A records\n * alongside the main form.\n */\n@Component({\n standalone: false,\n selector: 'mj-isa-related-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './isa-related-card.component.html',\n styleUrls: ['./isa-related-card.component.css']\n})\nexport class MjIsaRelatedCardComponent implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n /** The entity name for the related record (e.g., \"Members\", \"Speakers\") */\n @Input() EntityName = '';\n\n /** The primary key shared with the parent record */\n @Input() PrimaryKey: CompositeKey | null = null;\n\n /** The record name of the current form's entity (to suppress if same) */\n @Input() CurrentRecordName = '';\n\n /** The relationship type label */\n @Input() Relationship: 'sibling' | 'child' = 'sibling';\n\n /** Depth in the IS-A hierarchy (0 = direct child/sibling, 1 = grandchild, etc.) */\n @Input() Depth = 0;\n\n /** Child items nested under this entity (rendered as sub-cards within this card) */\n @Input() Children: IsaRelatedItem[] = [];\n\n /** Emitted when user clicks \"Open\" to navigate to this related record */\n @Output() Navigate = new EventEmitter<EntityHierarchyNavigationEvent>();\n\n // Internal state\n EntityInfoRef: EntityInfo | null = null;\n RelatedRecord: BaseEntity | null = null;\n IsLoading = true;\n LoadError = false;\n Expanded = false;\n\n DefaultFields: IsaCardFieldDisplay[] = [];\n ExtraFields: IsaCardFieldDisplay[] = [];\n\n /** Display name for the entity */\n get DisplayName(): string {\n return this.EntityInfoRef?.DisplayNameOrName ?? this.EntityName;\n }\n\n /** Icon class from entity metadata */\n get IconClass(): string {\n return this.EntityInfoRef?.Icon ?? 'fa-solid fa-link';\n }\n\n /** Record name of the related record (suppressed if same as current) */\n get RecordName(): string {\n if (!this.RelatedRecord) return '';\n const name = this.RelatedRecord.GetRecordName();\n if (!name) return '';\n const nameStr = String(name);\n // Suppress if same as the current form's record name\n if (nameStr === this.CurrentRecordName) return '';\n return nameStr;\n }\n\n ngOnInit(): void {\n this.LoadRelatedRecord();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['EntityName'] || changes['PrimaryKey']) && !changes['EntityName']?.firstChange) {\n this.LoadRelatedRecord();\n }\n }\n\n /** Load the related entity record and extract field data */\n async LoadRelatedRecord(): Promise<void> {\n if (!this.EntityName || !this.PrimaryKey) return;\n\n this.IsLoading = true;\n this.LoadError = false;\n this.cdr.markForCheck();\n\n try {\n const md = new Metadata();\n this.EntityInfoRef = md.EntityByName(this.EntityName);\n if (!this.EntityInfoRef) {\n this.LoadError = true;\n return;\n }\n\n const entity = await md.GetEntityObject<BaseEntity>(this.EntityName);\n const loaded = await entity.InnerLoad(this.PrimaryKey);\n if (!loaded) {\n this.LoadError = true;\n return;\n }\n\n this.RelatedRecord = entity;\n this.BuildFieldDisplayLists();\n } catch {\n this.LoadError = true;\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n /** Split fields into DefaultInView (shown by default) and extra (hidden) */\n private BuildFieldDisplayLists(): void {\n if (!this.RelatedRecord || !this.EntityInfoRef) return;\n\n const parentFieldNames = this.EntityInfoRef.ParentEntityFieldNames;\n const ownFields = this.EntityInfoRef.Fields.filter(f =>\n !f.IsPrimaryKey &&\n !f.IsVirtual &&\n !parentFieldNames.has(f.Name) &&\n f.Name !== '__mj_CreatedAt' &&\n f.Name !== '__mj_UpdatedAt' &&\n f.IncludeInGeneratedForm\n );\n\n const defaultFields: IsaCardFieldDisplay[] = [];\n const extraFields: IsaCardFieldDisplay[] = [];\n\n for (const field of ownFields) {\n const display = this.BuildFieldDisplay(field);\n if (field.DefaultInView) {\n defaultFields.push(display);\n } else {\n extraFields.push(display);\n }\n }\n\n this.DefaultFields = defaultFields;\n this.ExtraFields = extraFields;\n }\n\n /** Create a display representation of a single field value */\n private BuildFieldDisplay(field: EntityFieldInfo): IsaCardFieldDisplay {\n const rawValue = this.RelatedRecord!.Get(field.Name);\n const label = field.DisplayNameOrName;\n\n // Handle boolean fields\n if (field.TSType === 'boolean') {\n return {\n Label: label,\n Value: rawValue ? 'Yes' : 'No',\n IsBooleanTrue: !!rawValue,\n IsBooleanFalse: !rawValue\n };\n }\n\n // Format the value for display\n return {\n Label: label,\n Value: this.FormatFieldValue(rawValue, field)\n };\n }\n\n /** Format a field value for compact display */\n private FormatFieldValue(value: unknown, field: EntityFieldInfo): string {\n if (value == null) return '';\n\n // Date formatting\n if (value instanceof Date) {\n return value.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n }\n\n // Number formatting\n if (typeof value === 'number') {\n if (field.Type?.toLowerCase().includes('money')) {\n return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(value);\n }\n return value.toLocaleString();\n }\n\n return String(value);\n }\n\n /** Toggle expanded state to show/hide extra fields */\n ToggleExpand(): void {\n this.Expanded = !this.Expanded;\n this.cdr.markForCheck();\n }\n\n /** Handle \"Open\" link click — emit navigation event */\n OnOpenClick(event: MouseEvent): void {\n event.preventDefault();\n if (!this.PrimaryKey) return;\n\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: this.EntityName,\n PrimaryKey: this.PrimaryKey,\n Direction: this.Relationship === 'sibling' ? 'child' : 'child'\n });\n }\n}\n","<!-- ISA Related Card: compact summary of one sibling/child entity record -->\n<div class=\"mj-isa-card\"\n [class.mj-isa-card--loading]=\"IsLoading\"\n [class.mj-isa-card--error]=\"LoadError\"\n [class.mj-isa-card--nested]=\"Depth > 0\">\n\n <!-- Card Header -->\n <div class=\"mj-isa-card__header\">\n <div class=\"mj-isa-card__header-left\">\n <i [class]=\"IconClass\" class=\"mj-isa-card__icon\"></i>\n <span class=\"mj-isa-card__entity-name\">{{ DisplayName }}</span>\n @if (RecordName) {\n <span class=\"mj-isa-card__record-name\">{{ RecordName }}</span>\n }\n </div>\n <a href=\"#\" class=\"mj-isa-card__open-link\" (click)=\"OnOpenClick($event)\">Open →</a>\n </div>\n\n <!-- Loading State -->\n @if (IsLoading) {\n <div class=\"mj-isa-card__body mj-isa-card__body--loading\">\n <div class=\"mj-isa-card__loading-bar\"></div>\n <div class=\"mj-isa-card__loading-bar mj-isa-card__loading-bar--short\"></div>\n </div>\n }\n\n <!-- Error State -->\n @if (LoadError && !IsLoading) {\n <div class=\"mj-isa-card__body mj-isa-card__body--error\">\n <span class=\"mj-isa-card__error-text\">Unable to load record</span>\n </div>\n }\n\n <!-- Field Values -->\n @if (!IsLoading && !LoadError && RelatedRecord) {\n <div class=\"mj-isa-card__body\">\n @for (field of DefaultFields; track field.Label) {\n <div class=\"mj-isa-card__field\">\n <span class=\"mj-isa-card__field-label\">{{ field.Label }}</span>\n <span class=\"mj-isa-card__field-value\"\n [class.mj-isa-card__field-value--bool-yes]=\"field.IsBooleanTrue\"\n [class.mj-isa-card__field-value--bool-no]=\"field.IsBooleanFalse\">\n {{ field.Value }}\n </span>\n </div>\n }\n </div>\n\n <!-- Expand/Collapse for extra fields -->\n @if (ExtraFields.length > 0) {\n <div class=\"mj-isa-card__expand-row\">\n <button class=\"mj-isa-card__expand-btn\" (click)=\"ToggleExpand()\">\n @if (!Expanded) {\n Show {{ ExtraFields.length }} more field{{ ExtraFields.length > 1 ? 's' : '' }}\n <i class=\"fa-solid fa-chevron-down mj-isa-card__expand-chevron\"></i>\n } @else {\n Show fewer fields\n <i class=\"fa-solid fa-chevron-up mj-isa-card__expand-chevron\"></i>\n }\n </button>\n </div>\n\n @if (Expanded) {\n <div class=\"mj-isa-card__extra-fields\">\n @for (field of ExtraFields; track field.Label) {\n <div class=\"mj-isa-card__field\">\n <span class=\"mj-isa-card__field-label\">{{ field.Label }}</span>\n <span class=\"mj-isa-card__field-value\"\n [class.mj-isa-card__field-value--bool-yes]=\"field.IsBooleanTrue\"\n [class.mj-isa-card__field-value--bool-no]=\"field.IsBooleanFalse\">\n {{ field.Value }}\n </span>\n </div>\n }\n </div>\n }\n }\n }\n\n <!-- Nested sub-cards for IS-A children (e.g., Gold Members inside Members) -->\n @if (Children.length > 0 && !IsLoading) {\n <div class=\"mj-isa-card__children\">\n @for (child of Children; track child.EntityName) {\n <mj-isa-related-card\n [EntityName]=\"child.EntityName\"\n [PrimaryKey]=\"PrimaryKey\"\n [CurrentRecordName]=\"CurrentRecordName\"\n [Relationship]=\"'child'\"\n [Depth]=\"Depth + 1\"\n [Children]=\"child.Children\"\n (Navigate)=\"Navigate.emit($event)\">\n </mj-isa-related-card>\n }\n </div>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"isa-related-card.component.js","sourceRoot":"","sources":["../../../src/lib/isa-related-panel/isa-related-card.component.ts","../../../src/lib/isa-related-panel/isa-related-card.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EACtC,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,EAChB,iBAAiB,EACpD,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;;;;ICG7D,+BAAuC;IAAA,YAAgB;IAAA,iBAAO;;;IAAvB,cAAgB;IAAhB,uCAAgB;;;IAQ3D,8BAA0D;IAExD,AADA,0BAA4C,cACgC;IAC9E,iBAAM;;;IAMJ,AADF,8BAAwD,eAChB;IAAA,qCAAqB;IAC7D,AAD6D,iBAAO,EAC9D;;;IAQA,AADF,+BAAgC,eACS;IAAA,YAAiB;IAAA,iBAAO;IAC/D,gCAEuE;IACrE,YACF;IACF,AADE,iBAAO,EACH;;;IANmC,eAAiB;IAAjB,oCAAiB;IAElD,cAAgE;IAChE,AADA,4EAAgE,8DACA;IACpE,cACF;IADE,+CACF;;;IAUE,YACA;IAAA,wBAAoE;;;IADpE,wHACA;;;IAEA,mCACA;IAAA,wBAAkE;;;IAShE,AADF,+BAAgC,eACS;IAAA,YAAiB;IAAA,iBAAO;IAC/D,gCAEuE;IACrE,YACF;IACF,AADE,iBAAO,EACH;;;IANmC,eAAiB;IAAjB,oCAAiB;IAElD,cAAgE;IAChE,AADA,4EAAgE,8DACA;IACpE,cACF;IADE,+CACF;;;IARN,+BAAuC;IACrC,wIASC;IACH,iBAAM;;;IAVJ,cASC;IATD,iCASC;;;;IAtBH,AADF,+BAAqC,iBAC8B;IAAzB,6MAAS,qBAAc,KAAC;IAI5D,AAHF,8GAAiB,wFAGR;IAKb,AADE,iBAAS,EACL;IAEN,yHAAgB;;;IAVZ,eAMC;IAND,0CAMC;IAIL,eAaC;IAbD,0CAaC;;;IAxCH,+BAA+B;IAC7B,4GASC;IACH,iBAAM;IAGN,gGAA8B;;;IAb5B,cASC;IATD,mCASC;IAIH,eA2BC;IA3BD,wDA2BC;;;;IAOG,+CAOqC;IAAnC,8NAAY,4BAAqB,KAAC;IACpC,iBAAsB;;;;IAFpB,AADA,AADA,AADA,AADA,AADA,gDAA+B,iCACN,+CACc,yBACf,2BACL,+BACQ;;;IARjC,8BAAmC;IACjC,4HAUC;IACH,iBAAM;;;IAXJ,cAUC;IAVD,8BAUC;;ADtEP;;;;;;;GAOG;AASH,MAAM,OAAO,yBAA0B,SAAQ,oBAAoB;IACzD,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAExC,2EAA2E;IAClE,UAAU,GAAG,EAAE,CAAC;IAEzB,oDAAoD;IAC3C,UAAU,GAAwB,IAAI,CAAC;IAEhD,yEAAyE;IAChE,iBAAiB,GAAG,EAAE,CAAC;IAEhC,kCAAkC;IACzB,YAAY,GAAwB,SAAS,CAAC;IAEvD,mFAAmF;IAC1E,KAAK,GAAG,CAAC,CAAC;IAEnB,oFAAoF;IAC3E,QAAQ,GAAqB,EAAE,CAAC;IAEzC,yEAAyE;IAC/D,QAAQ,GAAG,IAAI,YAAY,EAAkC,CAAC;IAExE,iBAAiB;IACjB,aAAa,GAAsB,IAAI,CAAC;IACxC,aAAa,GAAsB,IAAI,CAAC;IACxC,SAAS,GAAG,IAAI,CAAC;IACjB,SAAS,GAAG,KAAK,CAAC;IAClB,QAAQ,GAAG,KAAK,CAAC;IAEjB,aAAa,GAA0B,EAAE,CAAC;IAC1C,WAAW,GAA0B,EAAE,CAAC;IAExC,kCAAkC;IAClC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,EAAE,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC;IAClE,CAAC;IAED,sCAAsC;IACtC,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,kBAAkB,CAAC;IACxD,CAAC;IAED,wEAAwE;IACxE,IAAI,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,qDAAqD;QACrD,IAAI,OAAO,KAAK,IAAI,CAAC,iBAAiB;YAAE,OAAO,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;YAC5F,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAEjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAC9B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;YAC9D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAa,IAAI,CAAC,UAAU,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;YAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,4EAA4E;IACpE,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAEvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrD,CAAC,CAAC,CAAC,YAAY;YACf,CAAC,CAAC,CAAC,SAAS;YACZ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7B,CAAC,CAAC,IAAI,KAAK,gBAAgB;YAC3B,CAAC,CAAC,IAAI,KAAK,gBAAgB;YAC3B,CAAC,CAAC,sBAAsB,CACzB,CAAC;QAEF,MAAM,aAAa,GAA0B,EAAE,CAAC;QAChD,MAAM,WAAW,GAA0B,EAAE,CAAC;QAE9C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,8DAA8D;IACtD,iBAAiB,CAAC,KAAsB;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAEtC,wBAAwB;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBAC9B,aAAa,EAAE,CAAC,CAAC,QAAQ;gBACzB,cAAc,EAAE,CAAC,QAAQ;aAC1B,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,+CAA+C;IACvC,gBAAgB,CAAC,KAAc,EAAE,KAAsB;QAC7D,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QAE7B,kBAAkB;QAClB,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,oBAAoB;QACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChD,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9F,CAAC;YACD,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,sDAAsD;IACtD,YAAY;QACV,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAED,uDAAuD;IACvD,WAAW,CAAC,KAAiB;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,kBAAkB;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;SAC/D,CAAC,CAAC;IACL,CAAC;iRA3LU,yBAAyB,yBAAzB,yBAAyB;6DAAzB,yBAAyB;YC9BlC,AADF,AANF,8BAG6C,aAGV,aACO;YACpC,uBAAqD;YACrD,+BAAuC;YAAA,YAAiB;YAAA,iBAAO;YAC/D,4FAAkB;YAGpB,iBAAM;YACN,4BAAyE;YAA9B,uGAAS,uBAAmB,IAAC;YAAC,2BAAW;YACtF,AADsF,iBAAI,EACpF;YAGN,2FAAiB;YAQjB,6FAA+B;YAO/B,mFAAiD;YA8CjD,6FAAyC;YAe3C,iBAAM;;YA3FD,AADA,AADA,qDAAwC,qCACF,sCACC;YAKnC,eAAmB;YAAnB,4BAAmB;YACiB,eAAiB;YAAjB,qCAAiB;YACxD,cAEC;YAFD,yCAEC;YAML,eAKC;YALD,wCAKC;YAGD,cAIC;YAJD,2DAIC;YAGD,cA2CC;YA3CD,iFA2CC;YAGD,cAcC;YAdD,qEAcC;4BDxDU,yBAAyB;;iFAAzB,yBAAyB;cARrC,SAAS;6BACI,KAAK,YACP,qBAAqB,mBACd,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;;kBAQpC,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,MAAM;;kFAtBI,yBAAyB","sourcesContent":["import {\n Component, Input, Output, EventEmitter,\n ChangeDetectionStrategy, ChangeDetectorRef, inject,\n OnInit, OnChanges, SimpleChanges, ViewEncapsulation\n} from '@angular/core';\nimport {\n BaseEntity, EntityInfo, EntityFieldInfo, Metadata, CompositeKey\n} from '@memberjunction/core';\nimport { EntityHierarchyNavigationEvent } from '../types/navigation-events';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { IsaRelatedItem } from './isa-hierarchy-utils';\n\n/**\n * Represents a single field value displayed in the ISA related card.\n */\nexport interface IsaCardFieldDisplay {\n Label: string;\n Value: string;\n IsBooleanTrue?: boolean;\n IsBooleanFalse?: boolean;\n}\n\n/**\n * Compact card showing summary fields for one IS-A related entity record\n * (sibling or child). Displays DefaultInView fields by default with\n * expand/collapse for remaining fields.\n *\n * Used inside `<mj-isa-related-panel>` to show related IS-A records\n * alongside the main form.\n */\n@Component({\n standalone: false,\n selector: 'mj-isa-related-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './isa-related-card.component.html',\n styleUrls: ['./isa-related-card.component.css']\n})\nexport class MjIsaRelatedCardComponent extends BaseAngularComponent implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n /** The entity name for the related record (e.g., \"Members\", \"Speakers\") */\n @Input() EntityName = '';\n\n /** The primary key shared with the parent record */\n @Input() PrimaryKey: CompositeKey | null = null;\n\n /** The record name of the current form's entity (to suppress if same) */\n @Input() CurrentRecordName = '';\n\n /** The relationship type label */\n @Input() Relationship: 'sibling' | 'child' = 'sibling';\n\n /** Depth in the IS-A hierarchy (0 = direct child/sibling, 1 = grandchild, etc.) */\n @Input() Depth = 0;\n\n /** Child items nested under this entity (rendered as sub-cards within this card) */\n @Input() Children: IsaRelatedItem[] = [];\n\n /** Emitted when user clicks \"Open\" to navigate to this related record */\n @Output() Navigate = new EventEmitter<EntityHierarchyNavigationEvent>();\n\n // Internal state\n EntityInfoRef: EntityInfo | null = null;\n RelatedRecord: BaseEntity | null = null;\n IsLoading = true;\n LoadError = false;\n Expanded = false;\n\n DefaultFields: IsaCardFieldDisplay[] = [];\n ExtraFields: IsaCardFieldDisplay[] = [];\n\n /** Display name for the entity */\n get DisplayName(): string {\n return this.EntityInfoRef?.DisplayNameOrName ?? this.EntityName;\n }\n\n /** Icon class from entity metadata */\n get IconClass(): string {\n return this.EntityInfoRef?.Icon ?? 'fa-solid fa-link';\n }\n\n /** Record name of the related record (suppressed if same as current) */\n get RecordName(): string {\n if (!this.RelatedRecord) return '';\n const name = this.RelatedRecord.GetRecordName();\n if (!name) return '';\n const nameStr = String(name);\n // Suppress if same as the current form's record name\n if (nameStr === this.CurrentRecordName) return '';\n return nameStr;\n }\n\n ngOnInit(): void {\n this.LoadRelatedRecord();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['EntityName'] || changes['PrimaryKey']) && !changes['EntityName']?.firstChange) {\n this.LoadRelatedRecord();\n }\n }\n\n /** Load the related entity record and extract field data */\n async LoadRelatedRecord(): Promise<void> {\n if (!this.EntityName || !this.PrimaryKey) return;\n\n this.IsLoading = true;\n this.LoadError = false;\n this.cdr.markForCheck();\n\n try {\n const md = this.ProviderToUse;\n this.EntityInfoRef = md.EntityByName(this.EntityName) ?? null;\n if (!this.EntityInfoRef) {\n this.LoadError = true;\n return;\n }\n\n const entity = await md.GetEntityObject<BaseEntity>(this.EntityName);\n const loaded = await entity.InnerLoad(this.PrimaryKey);\n if (!loaded) {\n this.LoadError = true;\n return;\n }\n\n this.RelatedRecord = entity;\n this.BuildFieldDisplayLists();\n } catch {\n this.LoadError = true;\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n /** Split fields into DefaultInView (shown by default) and extra (hidden) */\n private BuildFieldDisplayLists(): void {\n if (!this.RelatedRecord || !this.EntityInfoRef) return;\n\n const parentFieldNames = this.EntityInfoRef.ParentEntityFieldNames;\n const ownFields = this.EntityInfoRef.Fields.filter(f =>\n !f.IsPrimaryKey &&\n !f.IsVirtual &&\n !parentFieldNames.has(f.Name) &&\n f.Name !== '__mj_CreatedAt' &&\n f.Name !== '__mj_UpdatedAt' &&\n f.IncludeInGeneratedForm\n );\n\n const defaultFields: IsaCardFieldDisplay[] = [];\n const extraFields: IsaCardFieldDisplay[] = [];\n\n for (const field of ownFields) {\n const display = this.BuildFieldDisplay(field);\n if (field.DefaultInView) {\n defaultFields.push(display);\n } else {\n extraFields.push(display);\n }\n }\n\n this.DefaultFields = defaultFields;\n this.ExtraFields = extraFields;\n }\n\n /** Create a display representation of a single field value */\n private BuildFieldDisplay(field: EntityFieldInfo): IsaCardFieldDisplay {\n const rawValue = this.RelatedRecord!.Get(field.Name);\n const label = field.DisplayNameOrName;\n\n // Handle boolean fields\n if (field.TSType === 'boolean') {\n return {\n Label: label,\n Value: rawValue ? 'Yes' : 'No',\n IsBooleanTrue: !!rawValue,\n IsBooleanFalse: !rawValue\n };\n }\n\n // Format the value for display\n return {\n Label: label,\n Value: this.FormatFieldValue(rawValue, field)\n };\n }\n\n /** Format a field value for compact display */\n private FormatFieldValue(value: unknown, field: EntityFieldInfo): string {\n if (value == null) return '';\n\n // Date formatting\n if (value instanceof Date) {\n return value.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n }\n\n // Number formatting\n if (typeof value === 'number') {\n if (field.Type?.toLowerCase().includes('money')) {\n return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(value);\n }\n return value.toLocaleString();\n }\n\n return String(value);\n }\n\n /** Toggle expanded state to show/hide extra fields */\n ToggleExpand(): void {\n this.Expanded = !this.Expanded;\n this.cdr.markForCheck();\n }\n\n /** Handle \"Open\" link click — emit navigation event */\n OnOpenClick(event: MouseEvent): void {\n event.preventDefault();\n if (!this.PrimaryKey) return;\n\n this.Navigate.emit({\n Kind: 'entity-hierarchy',\n EntityName: this.EntityName,\n PrimaryKey: this.PrimaryKey,\n Direction: this.Relationship === 'sibling' ? 'child' : 'child'\n });\n }\n}\n","<!-- ISA Related Card: compact summary of one sibling/child entity record -->\n<div class=\"mj-isa-card\"\n [class.mj-isa-card--loading]=\"IsLoading\"\n [class.mj-isa-card--error]=\"LoadError\"\n [class.mj-isa-card--nested]=\"Depth > 0\">\n\n <!-- Card Header -->\n <div class=\"mj-isa-card__header\">\n <div class=\"mj-isa-card__header-left\">\n <i [class]=\"IconClass\" class=\"mj-isa-card__icon\"></i>\n <span class=\"mj-isa-card__entity-name\">{{ DisplayName }}</span>\n @if (RecordName) {\n <span class=\"mj-isa-card__record-name\">{{ RecordName }}</span>\n }\n </div>\n <a href=\"#\" class=\"mj-isa-card__open-link\" (click)=\"OnOpenClick($event)\">Open →</a>\n </div>\n\n <!-- Loading State -->\n @if (IsLoading) {\n <div class=\"mj-isa-card__body mj-isa-card__body--loading\">\n <div class=\"mj-isa-card__loading-bar\"></div>\n <div class=\"mj-isa-card__loading-bar mj-isa-card__loading-bar--short\"></div>\n </div>\n }\n\n <!-- Error State -->\n @if (LoadError && !IsLoading) {\n <div class=\"mj-isa-card__body mj-isa-card__body--error\">\n <span class=\"mj-isa-card__error-text\">Unable to load record</span>\n </div>\n }\n\n <!-- Field Values -->\n @if (!IsLoading && !LoadError && RelatedRecord) {\n <div class=\"mj-isa-card__body\">\n @for (field of DefaultFields; track field.Label) {\n <div class=\"mj-isa-card__field\">\n <span class=\"mj-isa-card__field-label\">{{ field.Label }}</span>\n <span class=\"mj-isa-card__field-value\"\n [class.mj-isa-card__field-value--bool-yes]=\"field.IsBooleanTrue\"\n [class.mj-isa-card__field-value--bool-no]=\"field.IsBooleanFalse\">\n {{ field.Value }}\n </span>\n </div>\n }\n </div>\n\n <!-- Expand/Collapse for extra fields -->\n @if (ExtraFields.length > 0) {\n <div class=\"mj-isa-card__expand-row\">\n <button class=\"mj-isa-card__expand-btn\" (click)=\"ToggleExpand()\">\n @if (!Expanded) {\n Show {{ ExtraFields.length }} more field{{ ExtraFields.length > 1 ? 's' : '' }}\n <i class=\"fa-solid fa-chevron-down mj-isa-card__expand-chevron\"></i>\n } @else {\n Show fewer fields\n <i class=\"fa-solid fa-chevron-up mj-isa-card__expand-chevron\"></i>\n }\n </button>\n </div>\n\n @if (Expanded) {\n <div class=\"mj-isa-card__extra-fields\">\n @for (field of ExtraFields; track field.Label) {\n <div class=\"mj-isa-card__field\">\n <span class=\"mj-isa-card__field-label\">{{ field.Label }}</span>\n <span class=\"mj-isa-card__field-value\"\n [class.mj-isa-card__field-value--bool-yes]=\"field.IsBooleanTrue\"\n [class.mj-isa-card__field-value--bool-no]=\"field.IsBooleanFalse\">\n {{ field.Value }}\n </span>\n </div>\n }\n </div>\n }\n }\n }\n\n <!-- Nested sub-cards for IS-A children (e.g., Gold Members inside Members) -->\n @if (Children.length > 0 && !IsLoading) {\n <div class=\"mj-isa-card__children\">\n @for (child of Children; track child.EntityName) {\n <mj-isa-related-card\n [EntityName]=\"child.EntityName\"\n [PrimaryKey]=\"PrimaryKey\"\n [CurrentRecordName]=\"CurrentRecordName\"\n [Relationship]=\"'child'\"\n [Depth]=\"Depth + 1\"\n [Children]=\"child.Children\"\n (Navigate)=\"Navigate.emit($event)\">\n </mj-isa-related-card>\n }\n </div>\n }\n</div>\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-base-forms",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.31.0",
|
|
4
4
|
"description": "MemberJunction: Generic Angular form components for rendering and editing entity records. Provides configurable toolbar, modern form fields (PrimeNG unstyled), collapsible panels with IS-A inheritance support, and event-driven navigation. Zero Explorer dependencies - usable in any Angular application.",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -36,15 +36,15 @@
|
|
|
36
36
|
"primeng": "21.1.1"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@memberjunction/core": "5.
|
|
40
|
-
"@memberjunction/core-entities": "5.
|
|
41
|
-
"@memberjunction/global": "5.
|
|
42
|
-
"@memberjunction/ng-base-types": "5.
|
|
43
|
-
"@memberjunction/ng-list-management": "5.
|
|
44
|
-
"@memberjunction/ng-notifications": "5.
|
|
45
|
-
"@memberjunction/ng-record-changes": "5.
|
|
46
|
-
"@memberjunction/ng-record-tags": "5.
|
|
47
|
-
"@memberjunction/ng-entity-viewer": "5.
|
|
39
|
+
"@memberjunction/core": "5.31.0",
|
|
40
|
+
"@memberjunction/core-entities": "5.31.0",
|
|
41
|
+
"@memberjunction/global": "5.31.0",
|
|
42
|
+
"@memberjunction/ng-base-types": "5.31.0",
|
|
43
|
+
"@memberjunction/ng-list-management": "5.31.0",
|
|
44
|
+
"@memberjunction/ng-notifications": "5.31.0",
|
|
45
|
+
"@memberjunction/ng-record-changes": "5.31.0",
|
|
46
|
+
"@memberjunction/ng-record-tags": "5.31.0",
|
|
47
|
+
"@memberjunction/ng-entity-viewer": "5.31.0",
|
|
48
48
|
"rxjs": "^7.8.2",
|
|
49
49
|
"tslib": "^2.8.1"
|
|
50
50
|
},
|