@memberjunction/ng-base-forms 6.1.0-edge.5 → 6.1.0-edge.7

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.
Files changed (65) hide show
  1. package/dist/lib/base-form-component.d.ts +23 -0
  2. package/dist/lib/base-form-component.d.ts.map +1 -1
  3. package/dist/lib/base-form-component.js +56 -13
  4. package/dist/lib/base-form-component.js.map +1 -1
  5. package/dist/lib/chrome/form-chrome-rail-pref.d.ts +22 -0
  6. package/dist/lib/chrome/form-chrome-rail-pref.d.ts.map +1 -1
  7. package/dist/lib/chrome/form-chrome-rail-pref.js +29 -0
  8. package/dist/lib/chrome/form-chrome-rail-pref.js.map +1 -1
  9. package/dist/lib/chrome/form-chrome.d.ts +19 -0
  10. package/dist/lib/chrome/form-chrome.d.ts.map +1 -1
  11. package/dist/lib/chrome/form-chrome.js +26 -0
  12. package/dist/lib/chrome/form-chrome.js.map +1 -1
  13. package/dist/lib/container/record-form-container.component.d.ts +52 -2
  14. package/dist/lib/container/record-form-container.component.d.ts.map +1 -1
  15. package/dist/lib/container/record-form-container.component.js +485 -161
  16. package/dist/lib/container/record-form-container.component.js.map +1 -1
  17. package/dist/lib/explorer-entity-data-grid.component.d.ts +36 -0
  18. package/dist/lib/explorer-entity-data-grid.component.d.ts.map +1 -1
  19. package/dist/lib/explorer-entity-data-grid.component.js +112 -3
  20. package/dist/lib/explorer-entity-data-grid.component.js.map +1 -1
  21. package/dist/lib/field/form-field.component.d.ts +128 -0
  22. package/dist/lib/field/form-field.component.d.ts.map +1 -1
  23. package/dist/lib/field/form-field.component.js +871 -306
  24. package/dist/lib/field/form-field.component.js.map +1 -1
  25. package/dist/lib/isa-related-panel/isa-related-card.component.d.ts.map +1 -1
  26. package/dist/lib/isa-related-panel/isa-related-card.component.js +7 -1
  27. package/dist/lib/isa-related-panel/isa-related-card.component.js.map +1 -1
  28. package/dist/lib/overlays/base-form-overlay.d.ts.map +1 -1
  29. package/dist/lib/overlays/base-form-overlay.js +3 -1
  30. package/dist/lib/overlays/base-form-overlay.js.map +1 -1
  31. package/dist/lib/overlays/form-slide-in.component.js +10 -11
  32. package/dist/lib/overlays/form-slide-in.component.js.map +1 -1
  33. package/dist/lib/panel/collapsible-panel.component.d.ts +94 -3
  34. package/dist/lib/panel/collapsible-panel.component.d.ts.map +1 -1
  35. package/dist/lib/panel/collapsible-panel.component.js +278 -37
  36. package/dist/lib/panel/collapsible-panel.component.js.map +1 -1
  37. package/dist/lib/panel-slot/base-form-panel.d.ts +12 -0
  38. package/dist/lib/panel-slot/base-form-panel.d.ts.map +1 -1
  39. package/dist/lib/panel-slot/base-form-panel.js.map +1 -1
  40. package/dist/lib/related-grid-height.d.ts +48 -11
  41. package/dist/lib/related-grid-height.d.ts.map +1 -1
  42. package/dist/lib/related-grid-height.js +53 -12
  43. package/dist/lib/related-grid-height.js.map +1 -1
  44. package/dist/lib/section-indicators/form-section-indicator-coordinator.service.d.ts +80 -0
  45. package/dist/lib/section-indicators/form-section-indicator-coordinator.service.d.ts.map +1 -0
  46. package/dist/lib/section-indicators/form-section-indicator-coordinator.service.js +99 -0
  47. package/dist/lib/section-indicators/form-section-indicator-coordinator.service.js.map +1 -0
  48. package/dist/lib/section-indicators/form-section-indicators.d.ts +97 -0
  49. package/dist/lib/section-indicators/form-section-indicators.d.ts.map +1 -0
  50. package/dist/lib/section-indicators/form-section-indicators.js +132 -0
  51. package/dist/lib/section-indicators/form-section-indicators.js.map +1 -0
  52. package/dist/lib/section-manager/section-manager.component.js +2 -2
  53. package/dist/lib/section-manager/section-manager.component.js.map +1 -1
  54. package/dist/lib/toolbar/form-toolbar.component.d.ts +9 -1
  55. package/dist/lib/toolbar/form-toolbar.component.d.ts.map +1 -1
  56. package/dist/lib/toolbar/form-toolbar.component.js +14 -6
  57. package/dist/lib/toolbar/form-toolbar.component.js.map +1 -1
  58. package/dist/lib/types/form-types.d.ts +8 -0
  59. package/dist/lib/types/form-types.d.ts.map +1 -1
  60. package/dist/lib/types/form-types.js.map +1 -1
  61. package/dist/public-api.d.ts +2 -0
  62. package/dist/public-api.d.ts.map +1 -1
  63. package/dist/public-api.js +3 -0
  64. package/dist/public-api.js.map +1 -1
  65. package/package.json +25 -27
@@ -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;AAqCD,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\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
+ {"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":"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"}
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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"}