@memberjunction/ng-base-forms 6.1.0-edge.4 → 6.1.0-edge.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/chrome/form-chrome-rail-pref.d.ts +22 -0
- package/dist/lib/chrome/form-chrome-rail-pref.d.ts.map +1 -1
- package/dist/lib/chrome/form-chrome-rail-pref.js +29 -0
- package/dist/lib/chrome/form-chrome-rail-pref.js.map +1 -1
- package/dist/lib/chrome/form-chrome.d.ts +19 -0
- package/dist/lib/chrome/form-chrome.d.ts.map +1 -1
- package/dist/lib/chrome/form-chrome.js +26 -0
- package/dist/lib/chrome/form-chrome.js.map +1 -1
- package/dist/lib/container/record-form-container.component.d.ts +52 -2
- package/dist/lib/container/record-form-container.component.d.ts.map +1 -1
- package/dist/lib/container/record-form-container.component.js +485 -161
- package/dist/lib/container/record-form-container.component.js.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.d.ts +36 -0
- package/dist/lib/explorer-entity-data-grid.component.d.ts.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.js +112 -3
- package/dist/lib/explorer-entity-data-grid.component.js.map +1 -1
- package/dist/lib/field/form-field.component.d.ts +59 -0
- package/dist/lib/field/form-field.component.d.ts.map +1 -1
- package/dist/lib/field/form-field.component.js +710 -294
- package/dist/lib/field/form-field.component.js.map +1 -1
- package/dist/lib/overlays/base-form-overlay.d.ts.map +1 -1
- package/dist/lib/overlays/base-form-overlay.js +3 -1
- package/dist/lib/overlays/base-form-overlay.js.map +1 -1
- package/dist/lib/overlays/form-slide-in.component.js +10 -11
- package/dist/lib/overlays/form-slide-in.component.js.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.d.ts +84 -3
- package/dist/lib/panel/collapsible-panel.component.d.ts.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.js +253 -37
- package/dist/lib/panel/collapsible-panel.component.js.map +1 -1
- package/dist/lib/panel-slot/base-form-panel.d.ts +12 -0
- package/dist/lib/panel-slot/base-form-panel.d.ts.map +1 -1
- package/dist/lib/panel-slot/base-form-panel.js.map +1 -1
- package/dist/lib/related-grid-height.d.ts +48 -11
- package/dist/lib/related-grid-height.d.ts.map +1 -1
- package/dist/lib/related-grid-height.js +53 -12
- package/dist/lib/related-grid-height.js.map +1 -1
- package/dist/lib/section-indicators/form-section-indicator-coordinator.service.d.ts +80 -0
- package/dist/lib/section-indicators/form-section-indicator-coordinator.service.d.ts.map +1 -0
- package/dist/lib/section-indicators/form-section-indicator-coordinator.service.js +99 -0
- package/dist/lib/section-indicators/form-section-indicator-coordinator.service.js.map +1 -0
- package/dist/lib/section-indicators/form-section-indicators.d.ts +97 -0
- package/dist/lib/section-indicators/form-section-indicators.d.ts.map +1 -0
- package/dist/lib/section-indicators/form-section-indicators.js +132 -0
- package/dist/lib/section-indicators/form-section-indicators.js.map +1 -0
- package/dist/lib/section-manager/section-manager.component.js +2 -2
- package/dist/lib/section-manager/section-manager.component.js.map +1 -1
- package/dist/lib/toolbar/form-toolbar.component.js +4 -4
- package/dist/lib/toolbar/form-toolbar.component.js.map +1 -1
- package/dist/public-api.d.ts +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +25 -27
|
@@ -6,6 +6,28 @@ export declare const FORM_CHROME_RAIL_WIDTH_MAX = 360;
|
|
|
6
6
|
export declare const FORM_CHROME_RAIL_COLLAPSED_PX = 36;
|
|
7
7
|
/** UserInfoEngine key: `mj.formChrome.<entity>.railPinned`. */
|
|
8
8
|
export declare function FormChromeRailPinnedKey(entityName: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* The rail key a contribution asked to lead on for an UNSAVED record, or null.
|
|
11
|
+
*
|
|
12
|
+
* Sits beside `ShouldPersistChromeActiveGroup` because it answers the other half of the same
|
|
13
|
+
* question: that one says a new record must not restore a stored position, this one says where it
|
|
14
|
+
* should go instead. Without it a new record opens on the lead group, which is usually a summary --
|
|
15
|
+
* and a summary of a record with no data is a page of blanks to look past.
|
|
16
|
+
*
|
|
17
|
+
* Highest `Priority` wins when several contributions on one entity declare it, matching how every
|
|
18
|
+
* other conflict between registrations is settled. Null when none does, which leaves the existing
|
|
19
|
+
* behaviour exactly as it was -- this is opt-in per form, not a change to the default.
|
|
20
|
+
*
|
|
21
|
+
* Pure so it can be tested without standing up a container: the caller supplies the registrations
|
|
22
|
+
* and the key-derivation it already uses for the rail.
|
|
23
|
+
*/
|
|
24
|
+
export declare function UnsavedLeadGroupKey<TMeta extends {
|
|
25
|
+
entity?: string;
|
|
26
|
+
leadsWhenUnsaved?: boolean;
|
|
27
|
+
}>(entityName: string | null | undefined, registrations: ReadonlyArray<{
|
|
28
|
+
Priority?: number;
|
|
29
|
+
Metadata?: TMeta;
|
|
30
|
+
}>, railKeyOf: (meta: TMeta) => string | null): string | null;
|
|
9
31
|
/**
|
|
10
32
|
* Left-nav `activeGroup` is stored per entity. Unsaved (new) records must
|
|
11
33
|
* neither restore nor write it — they should open on the first first-class
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-chrome-rail-pref.d.ts","sourceRoot":"","sources":["../../../src/lib/chrome/form-chrome-rail-pref.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,+DAA+D;AAC/D,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGlE;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE3F;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAQ9E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,GAAG,GAAG,CAErE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAG5E;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
1
|
+
{"version":3,"file":"form-chrome-rail-pref.d.ts","sourceRoot":"","sources":["../../../src/lib/chrome/form-chrome-rail-pref.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,+DAA+D;AAC/D,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGlE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,SAAS;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC7F,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,aAAa,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,EACrE,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,GAAG,IAAI,GAC1C,MAAM,GAAG,IAAI,CAUf;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE3F;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAQ9E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,GAAG,GAAG,CAErE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAG5E;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -9,6 +9,35 @@ export function FormChromeRailPinnedKey(entityName) {
|
|
|
9
9
|
const name = (entityName ?? 'entity').trim().toLowerCase();
|
|
10
10
|
return `mj.formChrome.${name}.railPinned`;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* The rail key a contribution asked to lead on for an UNSAVED record, or null.
|
|
14
|
+
*
|
|
15
|
+
* Sits beside `ShouldPersistChromeActiveGroup` because it answers the other half of the same
|
|
16
|
+
* question: that one says a new record must not restore a stored position, this one says where it
|
|
17
|
+
* should go instead. Without it a new record opens on the lead group, which is usually a summary --
|
|
18
|
+
* and a summary of a record with no data is a page of blanks to look past.
|
|
19
|
+
*
|
|
20
|
+
* Highest `Priority` wins when several contributions on one entity declare it, matching how every
|
|
21
|
+
* other conflict between registrations is settled. Null when none does, which leaves the existing
|
|
22
|
+
* behaviour exactly as it was -- this is opt-in per form, not a change to the default.
|
|
23
|
+
*
|
|
24
|
+
* Pure so it can be tested without standing up a container: the caller supplies the registrations
|
|
25
|
+
* and the key-derivation it already uses for the rail.
|
|
26
|
+
*/
|
|
27
|
+
export function UnsavedLeadGroupKey(entityName, registrations, railKeyOf) {
|
|
28
|
+
if (!entityName)
|
|
29
|
+
return null;
|
|
30
|
+
const ordered = [...registrations].sort((a, b) => (b.Priority ?? 0) - (a.Priority ?? 0));
|
|
31
|
+
for (const reg of ordered) {
|
|
32
|
+
const meta = reg.Metadata;
|
|
33
|
+
if (!meta || meta.entity !== entityName || meta.leadsWhenUnsaved !== true)
|
|
34
|
+
continue;
|
|
35
|
+
const key = railKeyOf(meta);
|
|
36
|
+
if (key)
|
|
37
|
+
return key;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
12
41
|
/**
|
|
13
42
|
* Left-nav `activeGroup` is stored per entity. Unsaved (new) records must
|
|
14
43
|
* neither restore nor write it — they should open on the first first-class
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-chrome-rail-pref.js","sourceRoot":"","sources":["../../../src/lib/chrome/form-chrome-rail-pref.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAEpD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEhD,+DAA+D;AAC/D,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACtD,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3D,OAAO,iBAAiB,IAAI,aAAa,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAAmC;IAC9E,OAAO,OAAO,KAAK,IAAI,CAAC;AAC5B,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACrD,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3D,OAAO,iBAAiB,IAAI,YAAY,CAAC;AAC7C,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,GAA8B;IACjE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,+BAA+B,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAe;IACtD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAChE,OAAO,IAAI,CAAC,GAAG,CACX,0BAA0B,EAC1B,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CACvD,CAAC;AACN,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,GAA8B;IAChE,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,8BAA8B,CAAC;IAC5E,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,EAAU;IAChD,OAAO,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC","sourcesContent":["/** Default for a user who has never touched the rail on this entity. */\nexport const FORM_CHROME_RAIL_PINNED_DEFAULT = true;\n\nexport const FORM_CHROME_RAIL_WIDTH_DEFAULT = 200;\nexport const FORM_CHROME_RAIL_WIDTH_MIN = 160;\nexport const FORM_CHROME_RAIL_WIDTH_MAX = 360;\nexport const FORM_CHROME_RAIL_COLLAPSED_PX = 36;\n\n/** UserInfoEngine key: `mj.formChrome.<entity>.railPinned`. */\nexport function FormChromeRailPinnedKey(entityName: string): string {\n const name = (entityName ?? 'entity').trim().toLowerCase();\n return `mj.formChrome.${name}.railPinned`;\n}\n\n/**\n * Left-nav `activeGroup` is stored per entity. Unsaved (new) records must\n * neither restore nor write it — they should open on the first first-class\n * group (Details) instead of the last related section from another record.\n */\nexport function ShouldPersistChromeActiveGroup(isSaved: boolean | null | undefined): boolean {\n return isSaved === true;\n}\n\n/** UserInfoEngine key: `mj.formChrome.<entity>.railWidth`. */\nexport function FormChromeRailWidthKey(entityName: string): string {\n const name = (entityName ?? 'entity').trim().toLowerCase();\n return `mj.formChrome.${name}.railWidth`;\n}\n\n/** Missing / unknown values stay pinned so existing forms do not jump. */\nexport function ParseRailPinnedSetting(raw: string | undefined | null): boolean {\n if (raw === '0' || raw === 'false') {\n return false;\n }\n if (raw === '1' || raw === 'true') {\n return true;\n }\n return FORM_CHROME_RAIL_PINNED_DEFAULT;\n}\n\nexport function SerializeRailPinnedSetting(pinned: boolean): '1' | '0' {\n return pinned ? '1' : '0';\n}\n\nexport function ClampRailWidth(px: number): number {\n if (!Number.isFinite(px)) return FORM_CHROME_RAIL_WIDTH_DEFAULT;\n return Math.min(\n FORM_CHROME_RAIL_WIDTH_MAX,\n Math.max(FORM_CHROME_RAIL_WIDTH_MIN, Math.round(px)),\n );\n}\n\n/** Missing / junk values fall back to the default expanded width. */\nexport function ParseRailWidthSetting(raw: string | undefined | null): number {\n if (raw == null || raw.trim() === '') return FORM_CHROME_RAIL_WIDTH_DEFAULT;\n return ClampRailWidth(Number(raw));\n}\n\nexport function SerializeRailWidthSetting(px: number): string {\n return String(ClampRailWidth(px));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"form-chrome-rail-pref.js","sourceRoot":"","sources":["../../../src/lib/chrome/form-chrome-rail-pref.ts"],"names":[],"mappings":"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","sourcesContent":["/** Default for a user who has never touched the rail on this entity. */\nexport const FORM_CHROME_RAIL_PINNED_DEFAULT = true;\n\nexport const FORM_CHROME_RAIL_WIDTH_DEFAULT = 200;\nexport const FORM_CHROME_RAIL_WIDTH_MIN = 160;\nexport const FORM_CHROME_RAIL_WIDTH_MAX = 360;\nexport const FORM_CHROME_RAIL_COLLAPSED_PX = 36;\n\n/** UserInfoEngine key: `mj.formChrome.<entity>.railPinned`. */\nexport function FormChromeRailPinnedKey(entityName: string): string {\n const name = (entityName ?? 'entity').trim().toLowerCase();\n return `mj.formChrome.${name}.railPinned`;\n}\n\n/**\n * The rail key a contribution asked to lead on for an UNSAVED record, or null.\n *\n * Sits beside `ShouldPersistChromeActiveGroup` because it answers the other half of the same\n * question: that one says a new record must not restore a stored position, this one says where it\n * should go instead. Without it a new record opens on the lead group, which is usually a summary --\n * and a summary of a record with no data is a page of blanks to look past.\n *\n * Highest `Priority` wins when several contributions on one entity declare it, matching how every\n * other conflict between registrations is settled. Null when none does, which leaves the existing\n * behaviour exactly as it was -- this is opt-in per form, not a change to the default.\n *\n * Pure so it can be tested without standing up a container: the caller supplies the registrations\n * and the key-derivation it already uses for the rail.\n */\nexport function UnsavedLeadGroupKey<TMeta extends { entity?: string; leadsWhenUnsaved?: boolean }>(\n entityName: string | null | undefined,\n registrations: ReadonlyArray<{ Priority?: number; Metadata?: TMeta }>,\n railKeyOf: (meta: TMeta) => string | null,\n): string | null {\n if (!entityName) return null;\n const ordered = [...registrations].sort((a, b) => (b.Priority ?? 0) - (a.Priority ?? 0));\n for (const reg of ordered) {\n const meta = reg.Metadata;\n if (!meta || meta.entity !== entityName || meta.leadsWhenUnsaved !== true) continue;\n const key = railKeyOf(meta);\n if (key) return key;\n }\n return null;\n}\n\n/**\n * Left-nav `activeGroup` is stored per entity. Unsaved (new) records must\n * neither restore nor write it — they should open on the first first-class\n * group (Details) instead of the last related section from another record.\n */\nexport function ShouldPersistChromeActiveGroup(isSaved: boolean | null | undefined): boolean {\n return isSaved === true;\n}\n\n/** UserInfoEngine key: `mj.formChrome.<entity>.railWidth`. */\nexport function FormChromeRailWidthKey(entityName: string): string {\n const name = (entityName ?? 'entity').trim().toLowerCase();\n return `mj.formChrome.${name}.railWidth`;\n}\n\n/** Missing / unknown values stay pinned so existing forms do not jump. */\nexport function ParseRailPinnedSetting(raw: string | undefined | null): boolean {\n if (raw === '0' || raw === 'false') {\n return false;\n }\n if (raw === '1' || raw === 'true') {\n return true;\n }\n return FORM_CHROME_RAIL_PINNED_DEFAULT;\n}\n\nexport function SerializeRailPinnedSetting(pinned: boolean): '1' | '0' {\n return pinned ? '1' : '0';\n}\n\nexport function ClampRailWidth(px: number): number {\n if (!Number.isFinite(px)) return FORM_CHROME_RAIL_WIDTH_DEFAULT;\n return Math.min(\n FORM_CHROME_RAIL_WIDTH_MAX,\n Math.max(FORM_CHROME_RAIL_WIDTH_MIN, Math.round(px)),\n );\n}\n\n/** Missing / junk values fall back to the default expanded width. */\nexport function ParseRailWidthSetting(raw: string | undefined | null): number {\n if (raw == null || raw.trim() === '') return FORM_CHROME_RAIL_WIDTH_DEFAULT;\n return ClampRailWidth(Number(raw));\n}\n\nexport function SerializeRailWidthSetting(px: number): string {\n return String(ClampRailWidth(px));\n}\n"]}
|
|
@@ -49,6 +49,25 @@ export interface FormChromeSpec {
|
|
|
49
49
|
*/
|
|
50
50
|
TitleBySectionKey?: ReadonlyMap<string, string>;
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* True when `sectionKey` sits in the left-nav Details group — the one rail
|
|
54
|
+
* item that shows SEVERAL panels at once (every field panel, plus any
|
|
55
|
+
* contribution registered with `ChromeGroup: 'details'`). The container
|
|
56
|
+
* renders those panels as ONE card (`.mj-chrome-details`, with
|
|
57
|
+
* `-first` / `-last` on the visual edges): no per-section headers, one
|
|
58
|
+
* surface — otherwise the field rows float on the page background.
|
|
59
|
+
*/
|
|
60
|
+
export declare function IsDetailsSectionKey(spec: Pick<FormChromeSpec, 'Groups'>, sectionKey: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* The visual first and last of the Details panels currently shown. Panels are
|
|
63
|
+
* flex items sequenced by CSS `order` (the form's section display order), so
|
|
64
|
+
* DOM order is not enough — a user who reordered sections would get the card's
|
|
65
|
+
* rounded corners on the wrong panels. Ties keep DOM order (stable sort).
|
|
66
|
+
*/
|
|
67
|
+
export declare function DetailsCardEdges(keysInDomOrder: readonly string[], orderOf: (sectionKey: string) => number): {
|
|
68
|
+
First: string | null;
|
|
69
|
+
Last: string | null;
|
|
70
|
+
};
|
|
52
71
|
export interface FormChromePanelSnapshot {
|
|
53
72
|
SectionKey: string;
|
|
54
73
|
SectionName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-chrome.d.ts","sourceRoot":"","sources":["../../../src/lib/chrome/form-chrome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD,eAAO,MAAM,2BAA2B,mBAAmB,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEhF;AAED,iEAAiE;AACjE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAKrF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;IACjC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,wBAAwB,EAAE,cAKtC,CAAC"}
|
|
1
|
+
{"version":3,"file":"form-chrome.d.ts","sourceRoot":"","sources":["../../../src/lib/chrome/form-chrome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD,eAAO,MAAM,2BAA2B,mBAAmB,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEhF;AAED,iEAAiE;AACjE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAKrF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;IACjC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGrG;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC5B,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GACxC;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAM/C;AAED,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,wBAAwB,EAAE,cAKtC,CAAC"}
|
|
@@ -28,6 +28,32 @@ export function HumanizeEntityTitle(name) {
|
|
|
28
28
|
const match = trimmed.match(/^[A-Za-z][A-Za-z0-9_]*:\s+(.+)$/);
|
|
29
29
|
return match?.[1]?.trim() || trimmed;
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* True when `sectionKey` sits in the left-nav Details group — the one rail
|
|
33
|
+
* item that shows SEVERAL panels at once (every field panel, plus any
|
|
34
|
+
* contribution registered with `ChromeGroup: 'details'`). The container
|
|
35
|
+
* renders those panels as ONE card (`.mj-chrome-details`, with
|
|
36
|
+
* `-first` / `-last` on the visual edges): no per-section headers, one
|
|
37
|
+
* surface — otherwise the field rows float on the page background.
|
|
38
|
+
*/
|
|
39
|
+
export function IsDetailsSectionKey(spec, sectionKey) {
|
|
40
|
+
const details = spec.Groups.find((g) => g.Key === DETAILS_SECTION_KEY);
|
|
41
|
+
return !!details && details.SectionKeys.includes(sectionKey);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The visual first and last of the Details panels currently shown. Panels are
|
|
45
|
+
* flex items sequenced by CSS `order` (the form's section display order), so
|
|
46
|
+
* DOM order is not enough — a user who reordered sections would get the card's
|
|
47
|
+
* rounded corners on the wrong panels. Ties keep DOM order (stable sort).
|
|
48
|
+
*/
|
|
49
|
+
export function DetailsCardEdges(keysInDomOrder, orderOf) {
|
|
50
|
+
if (keysInDomOrder.length === 0)
|
|
51
|
+
return { First: null, Last: null };
|
|
52
|
+
const sorted = keysInDomOrder
|
|
53
|
+
.map((key, index) => ({ key, index, order: orderOf(key) }))
|
|
54
|
+
.sort((a, b) => (a.order - b.order) || (a.index - b.index));
|
|
55
|
+
return { First: sorted[0].key, Last: sorted[sorted.length - 1].key };
|
|
56
|
+
}
|
|
31
57
|
export const DEFAULT_FORM_CHROME_SPEC = {
|
|
32
58
|
Layout: 'accordion',
|
|
33
59
|
Groups: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-chrome.js","sourceRoot":"","sources":["../../../src/lib/chrome/form-chrome.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiC;IACnE,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,WAAW,CAAC;AACnD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,WAAoB;IACxE,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,GAAG,KAAK,2BAA2B,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,IAAI,KAAK,iBAAiB,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC/D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;AACzC,CAAC;
|
|
1
|
+
{"version":3,"file":"form-chrome.js","sourceRoot":"","sources":["../../../src/lib/chrome/form-chrome.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiC;IACnE,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,WAAW,CAAC;AACnD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,WAAoB;IACxE,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,GAAG,KAAK,2BAA2B,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,IAAI,KAAK,iBAAiB,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC/D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;AACzC,CAAC;AA8BD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAoC,EAAE,UAAkB;IACxF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;IACvE,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC5B,cAAiC,EACjC,OAAuC;IAEvC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpE,MAAM,MAAM,GAAG,cAAc;SACxB,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC1D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACzE,CAAC;AASD,MAAM,CAAC,MAAM,wBAAwB,GAAmB;IACpD,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,IAAI,GAAG,EAAE;IACvB,eAAe,EAAE,EAAE;CACtB,CAAC","sourcesContent":["/**\n * Form chrome — how the container arranges sections (accordion vs left-nav,\n * first-class vs More). Complements form contributions (what is on the form).\n *\n * @see plans/form-chrome-policy.md\n */\nimport type { FormRole } from '@memberjunction/core';\n\nexport const MORE_SECTION_KEY = '__mj_form_more';\n\n/** Field panels (default / inherited) collapse into this one left-nav item. */\nexport const DETAILS_SECTION_KEY = '__mj_form_details';\n\nexport const SYSTEM_METADATA_SECTION_KEY = 'systemMetadata';\n\n/**\n * Expand-all / collapse-all only apply to stacked accordion panels.\n * Left-nav and right-nav show one section at a time, so those buttons\n * would be noise.\n */\nexport function IsAccordionFormChrome(layout: string | null | undefined): boolean {\n return (layout ?? 'accordion') === 'accordion';\n}\n\n/** Audit / timestamp leftover sections always fold into More. */\nexport function IsAlwaysMoreSection(sectionKey: string, sectionName?: string): boolean {\n const key = (sectionKey ?? '').trim().toLowerCase();\n if (key === SYSTEM_METADATA_SECTION_KEY.toLowerCase()) return true;\n const name = (sectionName ?? '').trim().toLowerCase();\n return name === 'system metadata';\n}\n\n/**\n * Drop a schema entity-name prefix (`MJ_BizApps_Common: Contact Methods` →\n * `Contact Methods`). DisplayName is the long-term source of truth; this keeps\n * already-baked SectionName strings readable until CodeGen reruns.\n */\nexport function HumanizeEntityTitle(name: string): string {\n const trimmed = (name ?? '').trim();\n const match = trimmed.match(/^[A-Za-z][A-Za-z0-9_]*:\\s+(.+)$/);\n return match?.[1]?.trim() || trimmed;\n}\n\nexport interface FormChromeGroup {\n Key: string;\n Title: string;\n Icon: string;\n SectionKeys: string[];\n /** True when this group is the More bucket (Detail related grids). */\n IsMore: boolean;\n /**\n * Primary contribution that owns its own rail item and sorts in the\n * lead band (before Details). Overview is the usual case.\n */\n IsLead?: boolean;\n}\n\nexport interface FormChromeSpec {\n Layout: 'accordion' | 'left-nav';\n Groups: FormChromeGroup[];\n /** SectionKey → role for related-entity panels. Field panels are omitted. */\n RelatedRoles: ReadonlyMap<string, FormRole>;\n MoreSectionKeys: string[];\n /**\n * L3 admin Title overlays, keyed by section key or contribution key.\n * First-class group titles are already rewritten; More items and\n * accordion headers read this map so the same override reaches both.\n */\n TitleBySectionKey?: ReadonlyMap<string, string>;\n}\n\n/**\n * True when `sectionKey` sits in the left-nav Details group — the one rail\n * item that shows SEVERAL panels at once (every field panel, plus any\n * contribution registered with `ChromeGroup: 'details'`). The container\n * renders those panels as ONE card (`.mj-chrome-details`, with\n * `-first` / `-last` on the visual edges): no per-section headers, one\n * surface — otherwise the field rows float on the page background.\n */\nexport function IsDetailsSectionKey(spec: Pick<FormChromeSpec, 'Groups'>, sectionKey: string): boolean {\n const details = spec.Groups.find((g) => g.Key === DETAILS_SECTION_KEY);\n return !!details && details.SectionKeys.includes(sectionKey);\n}\n\n/**\n * The visual first and last of the Details panels currently shown. Panels are\n * flex items sequenced by CSS `order` (the form's section display order), so\n * DOM order is not enough — a user who reordered sections would get the card's\n * rounded corners on the wrong panels. Ties keep DOM order (stable sort).\n */\nexport function DetailsCardEdges(\n keysInDomOrder: readonly string[],\n orderOf: (sectionKey: string) => number,\n): { First: string | null; Last: string | null } {\n if (keysInDomOrder.length === 0) return { First: null, Last: null };\n const sorted = keysInDomOrder\n .map((key, index) => ({ key, index, order: orderOf(key) }))\n .sort((a, b) => (a.order - b.order) || (a.index - b.index));\n return { First: sorted[0].key, Last: sorted[sorted.length - 1].key };\n}\n\nexport interface FormChromePanelSnapshot {\n SectionKey: string;\n SectionName: string;\n Variant: string;\n Icon?: string;\n}\n\nexport const DEFAULT_FORM_CHROME_SPEC: FormChromeSpec = {\n Layout: 'accordion',\n Groups: [],\n RelatedRoles: new Map(),\n MoreSectionKeys: [],\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventEmitter, QueryList, AfterContentInit, OnDestroy } from '@angular/core';
|
|
1
|
+
import { EventEmitter, QueryList, AfterContentInit, DoCheck, OnDestroy } from '@angular/core';
|
|
2
2
|
import { BaseEntity, EntityInfo } from '@memberjunction/core';
|
|
3
3
|
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
4
|
import { FormToolbarConfig } from '../types/toolbar-config';
|
|
@@ -12,6 +12,7 @@ import { BaseFormComponent } from '../base-form-component';
|
|
|
12
12
|
import { RestoreVersionEvent } from '@memberjunction/ng-record-changes';
|
|
13
13
|
import { ListManagementResult } from '@memberjunction/ng-list-management';
|
|
14
14
|
import type { FormChromeGroup } from '../chrome/form-chrome';
|
|
15
|
+
import { type FormSectionIndicators } from '../section-indicators/form-section-indicators';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
/**
|
|
17
18
|
* Display shape for the variant picker. Kept minimal so the Generic
|
|
@@ -54,17 +55,22 @@ export interface VariantPickerItem {
|
|
|
54
55
|
* </mj-record-form-container>
|
|
55
56
|
* ```
|
|
56
57
|
*/
|
|
57
|
-
export declare class MjRecordFormContainerComponent extends BaseAngularComponent implements AfterContentInit, OnDestroy {
|
|
58
|
+
export declare class MjRecordFormContainerComponent extends BaseAngularComponent implements AfterContentInit, DoCheck, OnDestroy {
|
|
58
59
|
private cdr;
|
|
59
60
|
private ngZone;
|
|
60
61
|
private notificationService;
|
|
61
62
|
private chrome;
|
|
63
|
+
private sectionIndicators;
|
|
62
64
|
private slots;
|
|
63
65
|
private recordRefresh;
|
|
64
66
|
private host;
|
|
65
67
|
private destroy$;
|
|
66
68
|
private panelNavReset$;
|
|
67
69
|
private chromeResolveTimer;
|
|
70
|
+
/** Last values `ngDoCheck` resolved the rail for — see that method. */
|
|
71
|
+
private lastRailEditMode;
|
|
72
|
+
private lastRailShowEmptyFields;
|
|
73
|
+
private lastRailSearchFilter;
|
|
68
74
|
private chromeRules;
|
|
69
75
|
private chromeRulesForEntityId;
|
|
70
76
|
/** Reference to the record changes drawer (when visible) for triggering refresh after save */
|
|
@@ -274,8 +280,50 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
274
280
|
*/
|
|
275
281
|
private get chromeRailOrder();
|
|
276
282
|
ngAfterContentInit(): void;
|
|
283
|
+
/**
|
|
284
|
+
* Edit mode and Show Empty Fields both flip `mj-panel-empty` on a panel whose
|
|
285
|
+
* fields are all blank (see `MjFormFieldComponent.ShouldHideField`), and
|
|
286
|
+
* `domPanelSnapshots()` drops those panels from the rail. The panel itself
|
|
287
|
+
* recomputes live, but the rail is only resolved on structural changes — so
|
|
288
|
+
* without this the nav entry never comes back on switching to edit.
|
|
289
|
+
*
|
|
290
|
+
* Watched here rather than in `OnEditModeChange` because the toolbar is not
|
|
291
|
+
* the only writer: `SaveRecord()` and `CancelEdit()` call `EndEditMode()` on
|
|
292
|
+
* the form component directly, bypassing that handler entirely.
|
|
293
|
+
*/
|
|
294
|
+
ngDoCheck(): void;
|
|
277
295
|
ngOnDestroy(): void;
|
|
278
296
|
OnMoreFolderToggle(): void;
|
|
297
|
+
/**
|
|
298
|
+
* Unsaved-edit / invalid-field / warning counts for a rail group — summed over the
|
|
299
|
+
* section keys it fronts, since one group (notably `Details`) fronts many panels.
|
|
300
|
+
* Read live from each panel through {@link FormSectionIndicatorCoordinator}, so the
|
|
301
|
+
* rail can never disagree with the fields' own dot and underline.
|
|
302
|
+
*/
|
|
303
|
+
ChromeGroupIndicators(group: FormChromeGroup): FormSectionIndicators;
|
|
304
|
+
/**
|
|
305
|
+
* Whole-form totals — what the COLLAPSED rail spine shows, since no individual
|
|
306
|
+
* rail item is visible there. Summed over the RAIL GROUPS (first-class + More), not
|
|
307
|
+
* over every registered panel: a panel the chrome dropped from the rail (System
|
|
308
|
+
* Metadata in left-nav, a claimed baked grid) is not something the user can reach
|
|
309
|
+
* from the rail, so the spine must add up to exactly what the expanded rail shows.
|
|
310
|
+
* Includes form-level validation failures no section claims, so a rejected save
|
|
311
|
+
* never leaves the user with a clean-looking rail.
|
|
312
|
+
*/
|
|
313
|
+
get FormIndicators(): FormSectionIndicators;
|
|
314
|
+
/** Failures no registered section claims — kept visible on the spine total. */
|
|
315
|
+
get UnroutedValidationErrorCount(): number;
|
|
316
|
+
private unroutedValidationErrors;
|
|
317
|
+
/**
|
|
318
|
+
* One sentence for the persistent polite live region. The badges themselves are
|
|
319
|
+
* plain indicators (`role="img"`): they are inserted together with their text, which
|
|
320
|
+
* screen readers announce unreliably, and one edit can add three at once. A single
|
|
321
|
+
* region that exists from the start and changes its text announces once, reliably.
|
|
322
|
+
*/
|
|
323
|
+
get FormIndicatorsAnnouncement(): string;
|
|
324
|
+
RailDirtyTitle(count: number, where: string): string;
|
|
325
|
+
RailErrorTitle(count: number, where: string): string;
|
|
326
|
+
RailWarningTitle(count: number, where: string): string;
|
|
279
327
|
ChromeGroupRowCount(group: FormChromeGroup): number | undefined;
|
|
280
328
|
OnChromeGroupActivate(groupKey: string): void;
|
|
281
329
|
OnChromeRailExpand(): void;
|
|
@@ -326,6 +374,8 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
326
374
|
private buildRelatedSchemaMap;
|
|
327
375
|
private buildInboundRelationshipCounts;
|
|
328
376
|
private chromePrefKey;
|
|
377
|
+
/** Delegates to the pure decision in `form-chrome-rail-pref`, supplying this form's registrations. */
|
|
378
|
+
private UnsavedLeadGroupKey;
|
|
329
379
|
private RestoreChromePrefs;
|
|
330
380
|
private PersistChromePrefs;
|
|
331
381
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-form-container.component.d.ts","sourceRoot":"","sources":["../../../src/lib/container/record-form-container.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACqB,YAAY,EAErB,SAAS,EAAE,gBAAgB,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"record-form-container.component.d.ts","sourceRoot":"","sources":["../../../src/lib/container/record-form-container.component.ts"],"names":[],"mappings":"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"}
|