@memberjunction/ng-entity-viewer 6.2.0-edge.1 → 6.2.0-edge.2

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 (25) hide show
  1. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts +0 -4
  2. package/dist/lib/entity-data-grid/entity-data-grid.component.d.ts.map +1 -1
  3. package/dist/lib/entity-data-grid/entity-data-grid.component.js +3 -23
  4. package/dist/lib/entity-data-grid/entity-data-grid.component.js.map +1 -1
  5. package/dist/lib/entity-viewer/entity-viewer.component.d.ts +7 -0
  6. package/dist/lib/entity-viewer/entity-viewer.component.d.ts.map +1 -1
  7. package/dist/lib/entity-viewer/entity-viewer.component.js +25 -1
  8. package/dist/lib/entity-viewer/entity-viewer.component.js.map +1 -1
  9. package/dist/lib/utils/export-column.util.d.ts +14 -0
  10. package/dist/lib/utils/export-column.util.d.ts.map +1 -0
  11. package/dist/lib/utils/export-column.util.js +34 -0
  12. package/dist/lib/utils/export-column.util.js.map +1 -0
  13. package/dist/lib/view-types/renderers/timeline-view-renderer.component.d.ts +2 -0
  14. package/dist/lib/view-types/renderers/timeline-view-renderer.component.d.ts.map +1 -1
  15. package/dist/lib/view-types/renderers/timeline-view-renderer.component.js +11 -2
  16. package/dist/lib/view-types/renderers/timeline-view-renderer.component.js.map +1 -1
  17. package/dist/lib/view-workspace/view-workspace.component.d.ts +2 -1
  18. package/dist/lib/view-workspace/view-workspace.component.d.ts.map +1 -1
  19. package/dist/lib/view-workspace/view-workspace.component.js +10 -4
  20. package/dist/lib/view-workspace/view-workspace.component.js.map +1 -1
  21. package/dist/public-api.d.ts +1 -0
  22. package/dist/public-api.d.ts.map +1 -1
  23. package/dist/public-api.js +1 -0
  24. package/dist/public-api.js.map +1 -1
  25. package/package.json +21 -21
@@ -0,0 +1,14 @@
1
+ import type { ColumnDataType } from '@memberjunction/export-engine';
2
+ /**
3
+ * The export column type for a field's SQL type: how the export engine formats that column.
4
+ *
5
+ * Shared by the grid's export and every host's fallback export (the view workspace, Explorer's view
6
+ * resource), so a view exports the same column the same way whichever view type is showing. A SQL
7
+ * `date` is a calendar day (`dateonly`: `YYYY-MM-DD` in CSV and JSON, a date cell on the stored day in
8
+ * Excel), as distinct from a timestamp (`date`: an instant). Untyped, a calendar day exported as a full
9
+ * ISO timestamp from Cards, Map and Timeline while the grid exported the day.
10
+ *
11
+ * @param sqlType The field's SQL type (`EntityFieldInfo.Type`); absent maps to `string`
12
+ */
13
+ export declare function ExportColumnTypeForSQLType(sqlType?: string | null): ColumnDataType;
14
+ //# sourceMappingURL=export-column.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-column.util.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/export-column.util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAoBlF"}
@@ -0,0 +1,34 @@
1
+ import { IsDateOnlySQLType } from '@memberjunction/core';
2
+ /**
3
+ * The export column type for a field's SQL type: how the export engine formats that column.
4
+ *
5
+ * Shared by the grid's export and every host's fallback export (the view workspace, Explorer's view
6
+ * resource), so a view exports the same column the same way whichever view type is showing. A SQL
7
+ * `date` is a calendar day (`dateonly`: `YYYY-MM-DD` in CSV and JSON, a date cell on the stored day in
8
+ * Excel), as distinct from a timestamp (`date`: an instant). Untyped, a calendar day exported as a full
9
+ * ISO timestamp from Cards, Map and Timeline while the grid exported the day.
10
+ *
11
+ * @param sqlType The field's SQL type (`EntityFieldInfo.Type`); absent maps to `string`
12
+ */
13
+ export function ExportColumnTypeForSQLType(sqlType) {
14
+ if (!sqlType)
15
+ return 'string';
16
+ const type = sqlType.toLowerCase();
17
+ if (type.includes('int') || type.includes('decimal') || type.includes('float') || type.includes('numeric')) {
18
+ return 'number';
19
+ }
20
+ if (IsDateOnlySQLType(type)) {
21
+ return 'dateonly';
22
+ }
23
+ if (type.includes('date') || type.includes('time')) {
24
+ return 'date';
25
+ }
26
+ if (type.includes('bit') || type.includes('bool')) {
27
+ return 'boolean';
28
+ }
29
+ if (type.includes('money') || type.includes('currency')) {
30
+ return 'currency';
31
+ }
32
+ return 'string';
33
+ }
34
+ //# sourceMappingURL=export-column.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-column.util.js","sourceRoot":"","sources":["../../../src/lib/utils/export-column.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAuB;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3G,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { IsDateOnlySQLType } from '@memberjunction/core';\nimport type { ColumnDataType } from '@memberjunction/export-engine';\n\n/**\n * The export column type for a field's SQL type: how the export engine formats that column.\n *\n * Shared by the grid's export and every host's fallback export (the view workspace, Explorer's view\n * resource), so a view exports the same column the same way whichever view type is showing. A SQL\n * `date` is a calendar day (`dateonly`: `YYYY-MM-DD` in CSV and JSON, a date cell on the stored day in\n * Excel), as distinct from a timestamp (`date`: an instant). Untyped, a calendar day exported as a full\n * ISO timestamp from Cards, Map and Timeline while the grid exported the day.\n *\n * @param sqlType The field's SQL type (`EntityFieldInfo.Type`); absent maps to `string`\n */\nexport function ExportColumnTypeForSQLType(sqlType?: string | null): ColumnDataType {\n if (!sqlType) return 'string';\n\n const type = sqlType.toLowerCase();\n if (type.includes('int') || type.includes('decimal') || type.includes('float') || type.includes('numeric')) {\n return 'number';\n }\n if (IsDateOnlySQLType(type)) {\n return 'dateonly';\n }\n if (type.includes('date') || type.includes('time')) {\n return 'date';\n }\n if (type.includes('bit') || type.includes('bool')) {\n return 'boolean';\n }\n if (type.includes('money') || type.includes('currency')) {\n return 'currency';\n }\n return 'string';\n}\n"]}
@@ -152,6 +152,8 @@ export declare class TimelineViewRendererComponent extends BaseAngularComponent
152
152
  * when there is no entity or no selected date field.
153
153
  */
154
154
  private updateTimelineGroups;
155
+ /** Whether the named field of the current entity is a SQL `date` column (a calendar day). */
156
+ private isDateOnlyField;
155
157
  /**
156
158
  * Find the best field to use as the event title: the entity's NameField, then a
157
159
  * `DefaultInView` string field matching a common name pattern, then the first string field.
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-view-renderer.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/view-types/renderers/timeline-view-renderer.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timeline-view-renderer.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/view-types/renderers/timeline-view-renderer.component.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Component, Input, Output, EventEmitter, ChangeDetectorRef, ViewEncapsulation, inject, } from '@angular/core';
2
- import { EntityFieldTSType } from '@memberjunction/core';
2
+ import { EntityFieldTSType, IsDateOnlySQLType } from '@memberjunction/core';
3
3
  import { UUIDsEqual } from '@memberjunction/global';
4
4
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
5
5
  import { TimelineGroup, } from '@memberjunction/ng-timeline';
@@ -335,6 +335,9 @@ export class TimelineViewRendererComponent extends BaseAngularComponent {
335
335
  group.DateFieldName = this.SelectedTimelineDateField;
336
336
  group.IdFieldName = 'ID';
337
337
  group.GroupLabel = this._entity.Name;
338
+ // The records are plain `simple` rows with no EntityInfo of their own: the group needs the
339
+ // entity's metadata to know a SQL `date` field is a calendar day, not an instant.
340
+ group.EntityInfo = this._entity;
338
341
  const descField = this.findDescriptionField();
339
342
  if (descField) {
340
343
  group.DescriptionFieldName = descField;
@@ -348,13 +351,19 @@ export class TimelineViewRendererComponent extends BaseAngularComponent {
348
351
  collapsible: true,
349
352
  defaultExpanded: false,
350
353
  showDate: true,
351
- dateFormat: 'MMM d, yyyy h:mm a',
354
+ // A calendar day has no time: "12:00 AM" on it would be invented.
355
+ dateFormat: this.isDateOnlyField(this.SelectedTimelineDateField) ? 'MMM d, yyyy' : 'MMM d, yyyy h:mm a',
352
356
  ...(imageField
353
357
  ? { imageField, imagePosition: 'left', imageSize: 'small' }
354
358
  : {}),
355
359
  };
356
360
  this.TimelineGroups = [group];
357
361
  }
362
+ /** Whether the named field of the current entity is a SQL `date` column (a calendar day). */
363
+ isDateOnlyField(fieldName) {
364
+ const field = this._entity?.Fields.find((f) => f.Name.toLowerCase() === fieldName.toLowerCase());
365
+ return IsDateOnlySQLType(field?.Type);
366
+ }
358
367
  /**
359
368
  * Find the best field to use as the event title: the entity's NameField, then a
360
369
  * `DefaultInView` string field matching a common name pattern, then the first string field.
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-view-renderer.component.js","sourceRoot":"","sources":["../../../../src/lib/view-types/renderers/timeline-view-renderer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EACjB,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAA+B,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EACL,aAAa,GAId,MAAM,6BAA6B,CAAC;;;;;;;IAgE3B,+BAA+B;IAAA,YAAkC;IAAA,iBAAO;;;IAAzC,cAAkC;IAAlC,yDAAkC;;;IAO7D,kCAA6B;IAAA,YAA6B;IAAA,iBAAS;;;IAA3D,qCAAoB;IAAC,cAA6B;IAA7B,gDAA6B;;;;IAL9D,kCAG6D;IAA3D,yMAAU,gDAA+C,KAAC;IAC1D,kHAEC;IACH,iBAAS;;;IALP,wDAAmC;IAEnC,cAEC;IAFD,yCAEC;;;;IA2BP,uCASmD;IAAjD,iOAAmB,mCAA4B,KAAC;IAClD,iBAAc;;;IAFZ,AADA,AADA,AADA,AADA,AADA,AADA,AADA,8CAAyB,gDACe,qFACqC,4CACzC,mDACO,6BACf,iCACI,mDACW;;;IAI7C,oCAIkE;;AAxFxE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAwKH,MAAM,OAAO,6BACX,SAAQ,oBAAoB;IAG5B,2CAA2C;IAC3C,yDAAyD;IACzD,2CAA2C;IAEnC,OAAO,GAAsB,IAAI,CAAC;IAC1C,uGAAuG;IACvG,IACI,MAAM,CAAC,KAAwB;QACjC,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,QAAQ,GAA8B,EAAE,CAAC;IACjD,8FAA8F;IAC9F,IACI,OAAO,CAAC,KAAgC;QAC1C,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,2FAA2F;IAClF,gBAAgB,GAAkB,IAAI,CAAC;IAEhD,6FAA6F;IACpF,UAAU,GAAkB,IAAI,CAAC;IAElC,OAAO,GAAuB,EAAE,CAAC;IACzC;;;;OAIG;IACH,IACI,MAAM,CAAC,KAAyB;QAClC,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,2CAA2C;IAC3C,wBAAwB;IACxB,2CAA2C;IAE3C,mFAAmF;IACzE,cAAc,GAAG,IAAI,YAAY,EAAW,CAAC;IAEvD,iFAAiF;IACvE,YAAY,GAAG,IAAI,YAAY,EAAW,CAAC;IAErD,yFAAyF;IAC/E,aAAa,GAAG,IAAI,YAAY,EAAsB,CAAC;IAEjE,2CAA2C;IAC3C,wCAAwC;IACxC,2CAA2C;IAE3C,kFAAkF;IAC3E,aAAa,GAAG,KAAK,CAAC;IAE7B,iEAAiE;IAC1D,mBAAmB,GAAsB,EAAE,CAAC;IAEnD,+DAA+D;IACxD,yBAAyB,GAAkB,IAAI,CAAC;IAEvD,2DAA2D;IACpD,cAAc,GAA6C,EAAE,CAAC;IAErE;;;OAGG;IACI,sBAAsB,GAAsB,MAAM,CAAC;IAE1D,sDAAsD;IAC/C,uBAAuB,GAAwB,OAAO,CAAC;IAE9D;;;OAGG;IACI,wBAAwB,GAAwB,UAAU,CAAC;IAE1D,YAAY,GAAG,KAAK,CAAC;IACrB,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAExC,2CAA2C;IAC3C,YAAY;IACZ,2CAA2C;IAE3C,QAAQ;QACN,0FAA0F;QAC1F,yFAAyF;QACzF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,2CAA2C;IAC3C,WAAW;IACX,2CAA2C;IAE3C,kEAAkE;IAClE,IAAI,4BAA4B;QAC9B,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC9F,OAAO,KAAK,EAAE,iBAAiB,IAAI,IAAI,CAAC,yBAAyB,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACH,IAAI,uBAAuB;QACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,2CAA2C;IAC3C,0CAA0C;IAC1C,2CAA2C;IAE3C,4FAA4F;IAC5F,yBAAyB;QACvB,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;QACzG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,mGAAmG;IACnG,uBAAuB;QACrB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACtF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,4FAA4F;IAC5F,oBAAoB,CAAC,SAAiB;QACpC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAC;YAC3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,kCAAkC;IAClC,2CAA2C;IAE3C;;;;OAIG;IACH,oBAAoB,CAAC,KAA0B;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAA6C,CAAC;QACzE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,mBAAmB;IACnB,2CAA2C;IAE3C;;;;OAIG;IACK,kBAAkB;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAC,WAAW,IAAI,UAAU,CAAC;QAC5D,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC;QACpD,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,eAAe,IAAI,OAAO,CAAC;IAC9D,CAAC;IAED,8EAA8E;IACtE,gBAAgB;QACtB,IAAI,CAAC,OAAO,GAAG;YACb,aAAa,EAAE,IAAI,CAAC,yBAAyB,IAAI,SAAS;YAC1D,WAAW,EAAE,IAAI,CAAC,wBAAwB;YAC1C,SAAS,EAAE,IAAI,CAAC,sBAAsB;YACtC,eAAe,EAAE,IAAI,CAAC,uBAAuB;SAC9C,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,2CAA2C;IAC3C,gDAAgD;IAChD,2CAA2C;IAE3C;;;;OAIG;IACK,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC1F,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACtE,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACK,wBAAwB,CAAC,UAA6B;QAC5D,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClG,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACK,6BAA6B;QACnC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAChG,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,WAAW,CAAC,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAED,2CAA2C;IAC3C,0CAA0C;IAC1C,2CAA2C;IAE3C;;;;OAIG;IACK,oBAAoB;QAC1B,gGAAgG;QAChG,+FAA+F;QAC/F,+FAA+F;QAC/F,kGAAkG;QAClG,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEzC,MAAM,KAAK,GAAG,IAAI,aAAa,EAA2B,CAAC;QAC3D,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QAC/B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;QACpC,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC;QAClC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC;QACrD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACzC,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,iBAAiB,GAAG,aAAa,CAAC;QAC1C,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,KAAK,CAAC,UAAU,GAAG;YACjB,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,KAAK;YACtB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,oBAAoB;YAChC,GAAG,CAAC,UAAU;gBACZ,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,MAAe,EAAE,SAAS,EAAE,OAAgB,EAAE;gBAC7E,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QACrC,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAC/F,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE1C,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3D,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/E,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;IAED,2EAA2E;IACnE,oBAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACvF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAC5E,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7E,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,iBAAiB,CAAC,YAAoB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;YACrC,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,IAAI,KAAK,YAAY;YACvB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAC9B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACzE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAC/D,OAAO,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC;IAClC,CAAC;IAED,iGAAiG;IACzF,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM,CAC3E,CAAC;QACF,OAAO,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC;IAC7B,CAAC;iSA/ZU,6BAA6B,yBAA7B,6BAA6B;6DAA7B,6BAA6B;YA9JpC,AAFF,8BAAkC,aAEI;YAClC,uBAAyC;YAGvC,AAFF,gGAAwC,4EAEK;YAU/C,iBAAM;YAIJ,AADF,8BAAyC,gBAI6D;YADlG,0GAAS,+BAA2B,IAAC;YAErC,oBAAoH;YAExH,AADE,iBAAS,EACL;YAIJ,AADF,8BAAkC,gBAIkH;YADhJ,0GAAS,6BAAyB,IAAC;YAEnC,qBAA6H;YAGnI,AADE,AADE,iBAAS,EACL,EACF;YAcJ,AAZF,yGAAqB,sFAYZ;;YA/CL,eAWC;YAXD,wGAWC;YAQC,eAAiG;YAAjG,mHAAiG;YAC9F,cAA4G;YAA5G,qHAA4G;YAS/G,eAA+I;YAA/I,iKAA+I;YAC5I,cAAqH;YAArH,8HAAqH;YAK9H,cAkBC;YAlBD,6CAkBC;;;iFAuGQ,6BAA6B;cAvKzC,SAAS;6BACI,KAAK,YACP,2BAA2B,iBACtB,iBAAiB,CAAC,IAAI,YAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DT;;kBAgHA,KAAK;;kBAeL,KAAK;;kBAWL,KAAK;;kBAGL,KAAK;;kBAQL,KAAK;;kBAiBL,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kFAtEI,6BAA6B;AAka1C;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,4EAA4E;IAC5E,KAAK,6BAA6B,CAAC;AACrC,CAAC","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectorRef,\n OnInit,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { EntityInfo, EntityFieldInfo, EntityFieldTSType } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport {\n TimelineGroup,\n TimeSegmentGrouping,\n TimelineSortOrder,\n AfterEventClickArgs,\n} from '@memberjunction/ng-timeline';\nimport { TimelineOrientation } from '../../types';\nimport { IViewRenderer } from '../view-type.contracts';\n\n/**\n * The persisted configuration shape for the Timeline view type.\n *\n * This is the `config` payload the host hands to the renderer on mount and that the\n * renderer emits back (in full) via {@link TimelineViewRendererComponent.configChanged}\n * whenever the user changes any of the timeline chrome controls. The host treats it as an\n * opaque blob — only this renderer (and an eventual prop-sheet) understands its keys — and\n * persists it per `MJ: View Types` row.\n *\n * All fields are optional: on first mount the renderer falls back to sensible defaults\n * (first available date field, vertical orientation, descending sort, monthly segments).\n */\nexport interface TimelineViewConfig {\n /** The entity date-field used to place records on the timeline (e.g. `__mj_CreatedAt`). */\n dateFieldName?: string;\n /** Vertical (alternating) vs. horizontal (single-row) timeline layout. */\n orientation?: TimelineOrientation;\n /** Newest-first (`desc`) vs. oldest-first (`asc`) event ordering. */\n sortOrder?: TimelineSortOrder;\n /** How events are bucketed into collapsible segments (day/week/month/...). */\n segmentGrouping?: TimeSegmentGrouping;\n}\n\n/**\n * TimelineViewRendererComponent\n * -----------------------------\n * The Timeline **view type** as a self-contained {@link IViewRenderer} plug-in. Where the\n * Timeline view used to be hard-wired into the generic `mj-entity-viewer` host (which owned\n * the date-field detection, the record→{@link TimelineGroup} transformation, and the\n * date-field / orientation / sort chrome), this component now OWNS all of it. The host simply\n * dynamic-mounts this renderer when Timeline is the active view type and feeds it the standard\n * renderer inputs (`entity` / `records` / `selectedRecordId` / `filterText` / `config`).\n *\n * It renders a small chrome header row (date-field selector + orientation toggle + sort toggle)\n * above a flex-filling `<mj-timeline>`, exactly reproducing the host's previous timeline chrome\n * and bindings. Because the host only mounts this plug-in when Timeline is active, the chrome\n * always renders — no extra `EffectiveViewMode === 'timeline'` guard is needed.\n *\n * **What was absorbed from the host** (`EntityViewerComponent`): `detectDateFields()`,\n * `sortDateFieldsByPriority()`, `AvailableDateFields`/`HasDateFields`, `configureTimeline()`,\n * `updateTimelineGroups()` (+ `findTitleField`/`findDescriptionField`/`findSubtitleField`),\n * `ToggleTimelineOrientation()`, `ToggleTimelineSortOrder()`, `SetTimelineDateField()`,\n * `SelectedDateFieldDisplayName`, `OnTimelineEventClick()`, and the `TimelineSelectedEventID`\n * composite-key→raw-id derivation.\n *\n * Inputs use the camelCase names mandated by the {@link IViewRenderer} contract (the host binds\n * them by those exact names) rather than MJ's usual PascalCase for public members.\n */\n@Component({\n standalone: false,\n selector: 'mj-timeline-view-renderer',\n encapsulation: ViewEncapsulation.None,\n template: `\n <!-- Chrome row: date-field selector + orientation toggle + sort toggle.\n Always rendered — this plug-in only mounts when Timeline is the active view. -->\n <div class=\"timeline-view-chrome\">\n <!-- Date Field Selector -->\n <div class=\"timeline-date-selector\">\n <i class=\"fa-solid fa-calendar-days\"></i>\n @if (AvailableDateFields.length === 1) {\n <span class=\"date-field-label\">{{ SelectedDateFieldDisplayName }}</span>\n } @else if (AvailableDateFields.length > 1) {\n <select\n class=\"date-field-select\"\n [value]=\"SelectedTimelineDateField\"\n (change)=\"SetTimelineDateField($any($event.target).value)\">\n @for (field of AvailableDateFields; track field.Name) {\n <option [value]=\"field.Name\">{{ field.DisplayNameOrName }}</option>\n }\n </select>\n }\n </div>\n\n <!-- Orientation Toggle -->\n <div class=\"timeline-orientation-toggle\">\n <button\n class=\"toggle-btn\"\n (click)=\"ToggleTimelineOrientation()\"\n [title]=\"TimelineOrientationState === 'vertical' ? 'Switch to Horizontal' : 'Switch to Vertical'\">\n <i [class]=\"TimelineOrientationState === 'vertical' ? 'fa-solid fa-ellipsis-vertical' : 'fa-solid fa-ellipsis'\"></i>\n </button>\n </div>\n\n <!-- Sort Order Toggle -->\n <div class=\"timeline-sort-toggle\">\n <button\n class=\"toggle-btn\"\n (click)=\"ToggleTimelineSortOrder()\"\n [title]=\"TimelineSortOrderState === 'desc' ? 'Showing Newest First (click for Oldest First)' : 'Showing Oldest First (click for Newest First)'\">\n <i [class]=\"TimelineSortOrderState === 'desc' ? 'fa-solid fa-arrow-down-wide-short' : 'fa-solid fa-arrow-up-wide-short'\"></i>\n </button>\n </div>\n </div>\n\n @if (HasDateFields) {\n <mj-timeline\n [groups]=\"TimelineGroups\"\n [orientation]=\"TimelineOrientationState\"\n [layout]=\"TimelineOrientationState === 'vertical' ? 'alternating' : 'single'\"\n [sortOrder]=\"TimelineSortOrderState\"\n [segmentGrouping]=\"TimelineSegmentGrouping\"\n [segmentsCollapsible]=\"true\"\n [segmentsDefaultExpanded]=\"true\"\n [selectedEventId]=\"TimelineSelectedEventID\"\n (afterEventClick)=\"OnTimelineEventClick($event)\">\n </mj-timeline>\n } @else {\n <mj-empty-state\n class=\"timeline-view-empty-fill\"\n Variant=\"warning\"\n Icon=\"fa-solid fa-calendar-xmark\"\n Title=\"This entity has no date fields to plot on a timeline.\" />\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .timeline-view-chrome {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n flex: 0 0 auto;\n }\n\n .timeline-view-renderer mj-timeline,\n :host mj-timeline {\n flex: 1 1 auto;\n min-height: 0;\n }\n\n /* Timeline Date Field Selector */\n .timeline-date-selector {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .timeline-date-selector i {\n color: var(--mj-text-disabled);\n }\n\n .date-field-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .date-field-select {\n padding: 4px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s ease;\n }\n\n .date-field-select:hover {\n border-color: var(--mj-border-strong);\n }\n\n .date-field-select:focus {\n border-color: var(--mj-brand-primary);\n }\n\n /* Orientation / Sort toggles */\n .timeline-orientation-toggle,\n .timeline-sort-toggle {\n display: flex;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n padding: 2px;\n }\n\n .toggle-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n transition: all 0.15s ease;\n }\n\n .toggle-btn:hover {\n color: var(--mj-text-secondary);\n }\n\n .toggle-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n }\n\n /* Flex-fill so the empty-state placeholder occupies the timeline area\n (the host centers its content but does not grow to fill the parent). */\n .timeline-view-empty-fill {\n flex: 1 1 auto;\n }\n `,\n ],\n})\nexport class TimelineViewRendererComponent\n extends BaseAngularComponent\n implements IViewRenderer<TimelineViewConfig>, OnInit\n{\n // ========================================\n // IViewRenderer inputs (camelCase per the host contract)\n // ========================================\n\n private _entity: EntityInfo | null = null;\n /** The entity whose records are being rendered. Re-detects date fields + rebuilds groups on change. */\n @Input()\n set entity(value: EntityInfo | null) {\n const changed = !UUIDsEqual(value?.ID, this._entity?.ID);\n this._entity = value;\n if (changed) {\n this.detectDateFields();\n this.cdr.detectChanges();\n }\n }\n get entity(): EntityInfo | null {\n return this._entity;\n }\n\n private _records: Record<string, unknown>[] = [];\n /** The records to render (already loaded/filtered by the host). Rebuilds groups on change. */\n @Input()\n set records(value: Record<string, unknown>[]) {\n this._records = value ?? [];\n this.updateTimelineGroups();\n this.cdr.detectChanges();\n }\n get records(): Record<string, unknown>[] {\n return this._records;\n }\n\n /** Primary-key string of the currently selected record, if any (composite-key encoded). */\n @Input() selectedRecordId: string | null = null;\n\n /** Active filter text — accepted for contract uniformity; the host pre-filters `records`. */\n @Input() filterText: string | null = null;\n\n private _config: TimelineViewConfig = {};\n /**\n * This view's persisted configuration. Seeding the chrome controls from it is deferred to\n * {@link applyConfigToState}, called both here (for late updates) and in {@link ngOnInit}\n * (for the initial mount, where the host sets `config` via `setInput` before init runs).\n */\n @Input()\n set config(value: TimelineViewConfig) {\n this._config = value ?? {};\n if (this._initialized) {\n this.applyConfigToState();\n this.cdr.detectChanges();\n }\n }\n get config(): TimelineViewConfig {\n return this._config;\n }\n\n // ========================================\n // IViewRenderer outputs\n // ========================================\n\n /** Emitted when a timeline event is clicked — payload is the RAW record object. */\n @Output() recordSelected = new EventEmitter<unknown>();\n\n /** Emitted when a record should be opened — payload is the RAW record object. */\n @Output() recordOpened = new EventEmitter<unknown>();\n\n /** Emitted (with the FULL updated config) whenever the user changes a chrome control. */\n @Output() configChanged = new EventEmitter<TimelineViewConfig>();\n\n // ========================================\n // RENDER STATE (absorbed from the host)\n // ========================================\n\n /** Whether the current entity has any date fields available for timeline view. */\n public HasDateFields = false;\n\n /** Available date fields from the entity, sorted by priority. */\n public AvailableDateFields: EntityFieldInfo[] = [];\n\n /** The currently selected date field name for the timeline. */\n public SelectedTimelineDateField: string | null = null;\n\n /** The built timeline groups handed to `<mj-timeline>`. */\n public TimelineGroups: TimelineGroup<Record<string, unknown>>[] = [];\n\n /**\n * Timeline sort order. Named `…State` (not `TimelineSortOrder`) to avoid colliding with the\n * imported {@link TimelineSortOrder} type symbol used in the template / signatures.\n */\n public TimelineSortOrderState: TimelineSortOrder = 'desc';\n\n /** Timeline segment grouping (day/week/month/...). */\n public TimelineSegmentGrouping: TimeSegmentGrouping = 'month';\n\n /**\n * Timeline orientation. Named `…State` to avoid colliding with the imported\n * {@link TimelineOrientation} type symbol.\n */\n public TimelineOrientationState: TimelineOrientation = 'vertical';\n\n private _initialized = false;\n private cdr = inject(ChangeDetectorRef);\n\n // ========================================\n // LIFECYCLE\n // ========================================\n\n ngOnInit(): void {\n // The host sets entity/records/config via setInput BEFORE ngOnInit, so detection may have\n // already run. Apply the seeded config now (controls + defaults), then (re)build groups.\n this._initialized = true;\n this.applyConfigToState();\n this.detectDateFields();\n this.cdr.detectChanges();\n }\n\n // ========================================\n // COMPUTED\n // ========================================\n\n /** Display name of the currently selected timeline date field. */\n get SelectedDateFieldDisplayName(): string {\n if (!this.SelectedTimelineDateField) {\n return '';\n }\n const field = this.AvailableDateFields.find((f) => f.Name === this.SelectedTimelineDateField);\n return field?.DisplayNameOrName || this.SelectedTimelineDateField;\n }\n\n /**\n * The raw ID value derived from {@link selectedRecordId} for timeline selection. The host\n * passes the selection in composite-key format (`ID|abc-123` or `ID=abc-123`), but the\n * timeline stores just the raw ID value — so strip the field-name prefix.\n */\n get TimelineSelectedEventID(): string | null {\n if (!this.selectedRecordId) {\n return null;\n }\n if (this.selectedRecordId.includes('|')) {\n const parts = this.selectedRecordId.split('|');\n return parts.length > 1 ? parts[1] : this.selectedRecordId;\n }\n if (this.selectedRecordId.includes('=')) {\n const parts = this.selectedRecordId.split('=');\n return parts.length > 1 ? parts[1] : this.selectedRecordId;\n }\n return this.selectedRecordId;\n }\n\n // ========================================\n // CHROME ACTIONS (absorbed from the host)\n // ========================================\n\n /** Toggle timeline orientation between vertical and horizontal, then persist via config. */\n ToggleTimelineOrientation(): void {\n this.TimelineOrientationState = this.TimelineOrientationState === 'vertical' ? 'horizontal' : 'vertical';\n this.emitConfigChange();\n this.cdr.detectChanges();\n }\n\n /** Toggle timeline sort order between newest-first (desc) and oldest-first (asc), then persist. */\n ToggleTimelineSortOrder(): void {\n this.TimelineSortOrderState = this.TimelineSortOrderState === 'desc' ? 'asc' : 'desc';\n this.emitConfigChange();\n this.cdr.detectChanges();\n }\n\n /** Change the date field used for the timeline, rebuild groups, then persist via config. */\n SetTimelineDateField(fieldName: string): void {\n if (this.AvailableDateFields.some((f) => f.Name === fieldName)) {\n this.SelectedTimelineDateField = fieldName;\n this.updateTimelineGroups();\n this.emitConfigChange();\n this.cdr.detectChanges();\n }\n }\n\n // ========================================\n // TIMELINE EVENT → RECORD MAPPING\n // ========================================\n\n /**\n * Handle a timeline event click. Maps the {@link AfterEventClickArgs} to the underlying raw\n * record (`event.event.entity`) and emits it on {@link recordSelected}. The host's dynamic\n * handler builds the composite key from the raw record, so we emit the record object as-is.\n */\n OnTimelineEventClick(event: AfterEventClickArgs): void {\n const record = event.event.entity as Record<string, unknown> | undefined;\n if (record) {\n this.recordSelected.emit(record);\n }\n }\n\n // ========================================\n // CONFIG <-> STATE\n // ========================================\n\n /**\n * Seed the chrome control state from {@link config}, applying sensible defaults where the\n * config is silent (vertical orientation, descending sort, monthly segments). The selected\n * date field is resolved against the currently-available date fields in {@link detectDateFields}.\n */\n private applyConfigToState(): void {\n const c = this._config;\n this.TimelineOrientationState = c.orientation ?? 'vertical';\n this.TimelineSortOrderState = c.sortOrder ?? 'desc';\n this.TimelineSegmentGrouping = c.segmentGrouping ?? 'month';\n }\n\n /** Emit the FULL current config object so the host can persist the change. */\n private emitConfigChange(): void {\n this._config = {\n dateFieldName: this.SelectedTimelineDateField ?? undefined,\n orientation: this.TimelineOrientationState,\n sortOrder: this.TimelineSortOrderState,\n segmentGrouping: this.TimelineSegmentGrouping,\n };\n this.configChanged.emit(this._config);\n }\n\n // ========================================\n // DATE-FIELD DETECTION (absorbed from the host)\n // ========================================\n\n /**\n * Detect the entity's date fields and configure the timeline. Resolves the selected date\n * field (preferring the configured one, falling back to the highest-priority available field)\n * and rebuilds the groups. No-ops to an empty state when the entity has no date fields.\n */\n private detectDateFields(): void {\n if (!this._entity) {\n this.HasDateFields = false;\n this.AvailableDateFields = [];\n this.TimelineGroups = [];\n return;\n }\n\n const dateFields = this._entity.Fields.filter((f) => f.TSType === EntityFieldTSType.Date);\n if (dateFields.length === 0) {\n this.HasDateFields = false;\n this.AvailableDateFields = [];\n this.TimelineGroups = [];\n return;\n }\n\n this.AvailableDateFields = this.sortDateFieldsByPriority(dateFields);\n this.HasDateFields = true;\n this.SelectedTimelineDateField = this.getEffectiveTimelineDateField();\n this.updateTimelineGroups();\n }\n\n /**\n * Sort date fields by priority: `DefaultInView` fields first (by Sequence), then the rest\n * (by Sequence).\n */\n private sortDateFieldsByPriority(dateFields: EntityFieldInfo[]): EntityFieldInfo[] {\n const defaultInView = dateFields.filter((f) => f.DefaultInView).sort((a, b) => a.Sequence - b.Sequence);\n const others = dateFields.filter((f) => !f.DefaultInView).sort((a, b) => a.Sequence - b.Sequence);\n return [...defaultInView, ...others];\n }\n\n /**\n * Resolve which date field to use: the configured `dateFieldName` when it's still a valid\n * available field, otherwise the first (highest-priority) available date field.\n */\n private getEffectiveTimelineDateField(): string {\n if (this._config.dateFieldName) {\n const configField = this.AvailableDateFields.find((f) => f.Name === this._config.dateFieldName);\n if (configField) {\n return configField.Name;\n }\n }\n return this.AvailableDateFields[0].Name;\n }\n\n // ========================================\n // GROUP BUILDING (absorbed from the host)\n // ========================================\n\n /**\n * Build the single {@link TimelineGroup} for the current entity + records + selected date\n * field, mirroring the host's previous `updateTimelineGroups()`. No-ops to an empty state\n * when there is no entity or no selected date field.\n */\n private updateTimelineGroups(): void {\n // Emit NO group until there is an entity, a resolved date field, AND records. Emitting an empty\n // group (records not loaded yet) makes the inner <mj-timeline> run its first refresh with zero\n // events and mark itself loaded; the later records-populated update can then be dropped by its\n // concurrent-refresh / already-loaded guards, leaving \"No events to display\". Waiting for records\n // means its first real load happens with data.\n if (!this._entity || !this.SelectedTimelineDateField || this._records.length === 0) {\n this.TimelineGroups = [];\n return;\n }\n\n const titleField = this.findTitleField();\n\n const group = new TimelineGroup<Record<string, unknown>>();\n group.DataSourceType = 'array';\n group.EntityObjects = this._records;\n group.TitleFieldName = titleField;\n group.DateFieldName = this.SelectedTimelineDateField;\n group.IdFieldName = 'ID';\n group.GroupLabel = this._entity.Name;\n\n const descField = this.findDescriptionField();\n if (descField) {\n group.DescriptionFieldName = descField;\n }\n\n const subtitleField = this.findSubtitleField(titleField);\n if (subtitleField) {\n group.SubtitleFieldName = subtitleField;\n }\n\n const imageField = this.findImageField();\n group.CardConfig = {\n collapsible: true,\n defaultExpanded: false,\n showDate: true,\n dateFormat: 'MMM d, yyyy h:mm a',\n ...(imageField\n ? { imageField, imagePosition: 'left' as const, imageSize: 'small' as const }\n : {}),\n };\n\n this.TimelineGroups = [group];\n }\n\n /**\n * Find the best field to use as the event title: the entity's NameField, then a\n * `DefaultInView` string field matching a common name pattern, then the first string field.\n */\n private findTitleField(): string {\n if (!this._entity) {\n return 'ID';\n }\n if (this._entity.NameField) {\n return this._entity.NameField.Name;\n }\n\n const stringFields = this._entity.Fields.filter(\n (f) => f.TSType === EntityFieldTSType.String && f.DefaultInView && !f.Name.startsWith('__mj_'),\n ).sort((a, b) => a.Sequence - b.Sequence);\n\n const namePatterns = ['name', 'title', 'subject', 'label'];\n for (const pattern of namePatterns) {\n const match = stringFields.find((f) => f.Name.toLowerCase().includes(pattern));\n if (match) {\n return match.Name;\n }\n }\n\n return stringFields.length > 0 ? stringFields[0].Name : 'ID';\n }\n\n /** Find a suitable description field by common naming pattern, or null. */\n private findDescriptionField(): string | null {\n if (!this._entity) {\n return null;\n }\n const descPatterns = ['description', 'notes', 'summary', 'content', 'body', 'details'];\n const textFields = this._entity.Fields.filter(\n (f) => f.TSType === EntityFieldTSType.String && !f.Name.startsWith('__mj_'),\n );\n for (const pattern of descPatterns) {\n const match = textFields.find((f) => f.Name.toLowerCase().includes(pattern));\n if (match) {\n return match.Name;\n }\n }\n return null;\n }\n\n /**\n * Find a suitable subtitle field (different from the title): a `DefaultInView` string field\n * matching a classification pattern (status/type/category/...), else the first other string\n * field, else null.\n */\n private findSubtitleField(excludeField: string): string | null {\n if (!this._entity) {\n return null;\n }\n const patterns = ['status', 'type', 'category', 'state', 'priority'];\n const fields = this._entity.Fields.filter(\n (f) =>\n f.TSType === EntityFieldTSType.String &&\n f.DefaultInView &&\n f.Name !== excludeField &&\n !f.Name.startsWith('__mj_'),\n ).sort((a, b) => a.Sequence - b.Sequence);\n\n for (const pattern of patterns) {\n const match = fields.find((f) => f.Name.toLowerCase().includes(pattern));\n if (match) {\n return match.Name;\n }\n }\n\n const firstOther = fields.find((f) => f.Name !== excludeField);\n return firstOther?.Name || null;\n }\n\n /** Image field (ExtendedType='Image') so timeline cards crop a thumbnail, same as grid/cards. */\n private findImageField(): string | null {\n if (!this._entity) {\n return null;\n }\n const match = this._entity.Fields.find(\n (f) => f.ExtendedType === 'Image' && f.TSType === EntityFieldTSType.String,\n );\n return match?.Name ?? null;\n }\n}\n\n/**\n * Tree-shaking guard. Force-references the component class so bundlers don't drop this module\n * when it's only mounted dynamically via the view-type descriptor's `RendererComponent`.\n */\nexport function LoadTimelineViewRenderer(): void {\n // no-op; presence prevents tree-shaking of the dynamically-mounted renderer\n void TimelineViewRendererComponent;\n}\n"]}
1
+ {"version":3,"file":"timeline-view-renderer.component.js","sourceRoot":"","sources":["../../../../src/lib/view-types/renderers/timeline-view-renderer.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectorRef,\n OnInit,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { EntityInfo, EntityFieldInfo, EntityFieldTSType, IsDateOnlySQLType } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport {\n TimelineGroup,\n TimeSegmentGrouping,\n TimelineSortOrder,\n AfterEventClickArgs,\n} from '@memberjunction/ng-timeline';\nimport { TimelineOrientation } from '../../types';\nimport { IViewRenderer } from '../view-type.contracts';\n\n/**\n * The persisted configuration shape for the Timeline view type.\n *\n * This is the `config` payload the host hands to the renderer on mount and that the\n * renderer emits back (in full) via {@link TimelineViewRendererComponent.configChanged}\n * whenever the user changes any of the timeline chrome controls. The host treats it as an\n * opaque blob — only this renderer (and an eventual prop-sheet) understands its keys — and\n * persists it per `MJ: View Types` row.\n *\n * All fields are optional: on first mount the renderer falls back to sensible defaults\n * (first available date field, vertical orientation, descending sort, monthly segments).\n */\nexport interface TimelineViewConfig {\n /** The entity date-field used to place records on the timeline (e.g. `__mj_CreatedAt`). */\n dateFieldName?: string;\n /** Vertical (alternating) vs. horizontal (single-row) timeline layout. */\n orientation?: TimelineOrientation;\n /** Newest-first (`desc`) vs. oldest-first (`asc`) event ordering. */\n sortOrder?: TimelineSortOrder;\n /** How events are bucketed into collapsible segments (day/week/month/...). */\n segmentGrouping?: TimeSegmentGrouping;\n}\n\n/**\n * TimelineViewRendererComponent\n * -----------------------------\n * The Timeline **view type** as a self-contained {@link IViewRenderer} plug-in. Where the\n * Timeline view used to be hard-wired into the generic `mj-entity-viewer` host (which owned\n * the date-field detection, the record→{@link TimelineGroup} transformation, and the\n * date-field / orientation / sort chrome), this component now OWNS all of it. The host simply\n * dynamic-mounts this renderer when Timeline is the active view type and feeds it the standard\n * renderer inputs (`entity` / `records` / `selectedRecordId` / `filterText` / `config`).\n *\n * It renders a small chrome header row (date-field selector + orientation toggle + sort toggle)\n * above a flex-filling `<mj-timeline>`, exactly reproducing the host's previous timeline chrome\n * and bindings. Because the host only mounts this plug-in when Timeline is active, the chrome\n * always renders — no extra `EffectiveViewMode === 'timeline'` guard is needed.\n *\n * **What was absorbed from the host** (`EntityViewerComponent`): `detectDateFields()`,\n * `sortDateFieldsByPriority()`, `AvailableDateFields`/`HasDateFields`, `configureTimeline()`,\n * `updateTimelineGroups()` (+ `findTitleField`/`findDescriptionField`/`findSubtitleField`),\n * `ToggleTimelineOrientation()`, `ToggleTimelineSortOrder()`, `SetTimelineDateField()`,\n * `SelectedDateFieldDisplayName`, `OnTimelineEventClick()`, and the `TimelineSelectedEventID`\n * composite-key→raw-id derivation.\n *\n * Inputs use the camelCase names mandated by the {@link IViewRenderer} contract (the host binds\n * them by those exact names) rather than MJ's usual PascalCase for public members.\n */\n@Component({\n standalone: false,\n selector: 'mj-timeline-view-renderer',\n encapsulation: ViewEncapsulation.None,\n template: `\n <!-- Chrome row: date-field selector + orientation toggle + sort toggle.\n Always rendered — this plug-in only mounts when Timeline is the active view. -->\n <div class=\"timeline-view-chrome\">\n <!-- Date Field Selector -->\n <div class=\"timeline-date-selector\">\n <i class=\"fa-solid fa-calendar-days\"></i>\n @if (AvailableDateFields.length === 1) {\n <span class=\"date-field-label\">{{ SelectedDateFieldDisplayName }}</span>\n } @else if (AvailableDateFields.length > 1) {\n <select\n class=\"date-field-select\"\n [value]=\"SelectedTimelineDateField\"\n (change)=\"SetTimelineDateField($any($event.target).value)\">\n @for (field of AvailableDateFields; track field.Name) {\n <option [value]=\"field.Name\">{{ field.DisplayNameOrName }}</option>\n }\n </select>\n }\n </div>\n\n <!-- Orientation Toggle -->\n <div class=\"timeline-orientation-toggle\">\n <button\n class=\"toggle-btn\"\n (click)=\"ToggleTimelineOrientation()\"\n [title]=\"TimelineOrientationState === 'vertical' ? 'Switch to Horizontal' : 'Switch to Vertical'\">\n <i [class]=\"TimelineOrientationState === 'vertical' ? 'fa-solid fa-ellipsis-vertical' : 'fa-solid fa-ellipsis'\"></i>\n </button>\n </div>\n\n <!-- Sort Order Toggle -->\n <div class=\"timeline-sort-toggle\">\n <button\n class=\"toggle-btn\"\n (click)=\"ToggleTimelineSortOrder()\"\n [title]=\"TimelineSortOrderState === 'desc' ? 'Showing Newest First (click for Oldest First)' : 'Showing Oldest First (click for Newest First)'\">\n <i [class]=\"TimelineSortOrderState === 'desc' ? 'fa-solid fa-arrow-down-wide-short' : 'fa-solid fa-arrow-up-wide-short'\"></i>\n </button>\n </div>\n </div>\n\n @if (HasDateFields) {\n <mj-timeline\n [groups]=\"TimelineGroups\"\n [orientation]=\"TimelineOrientationState\"\n [layout]=\"TimelineOrientationState === 'vertical' ? 'alternating' : 'single'\"\n [sortOrder]=\"TimelineSortOrderState\"\n [segmentGrouping]=\"TimelineSegmentGrouping\"\n [segmentsCollapsible]=\"true\"\n [segmentsDefaultExpanded]=\"true\"\n [selectedEventId]=\"TimelineSelectedEventID\"\n (afterEventClick)=\"OnTimelineEventClick($event)\">\n </mj-timeline>\n } @else {\n <mj-empty-state\n class=\"timeline-view-empty-fill\"\n Variant=\"warning\"\n Icon=\"fa-solid fa-calendar-xmark\"\n Title=\"This entity has no date fields to plot on a timeline.\" />\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .timeline-view-chrome {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n flex: 0 0 auto;\n }\n\n .timeline-view-renderer mj-timeline,\n :host mj-timeline {\n flex: 1 1 auto;\n min-height: 0;\n }\n\n /* Timeline Date Field Selector */\n .timeline-date-selector {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .timeline-date-selector i {\n color: var(--mj-text-disabled);\n }\n\n .date-field-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n }\n\n .date-field-select {\n padding: 4px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s ease;\n }\n\n .date-field-select:hover {\n border-color: var(--mj-border-strong);\n }\n\n .date-field-select:focus {\n border-color: var(--mj-brand-primary);\n }\n\n /* Orientation / Sort toggles */\n .timeline-orientation-toggle,\n .timeline-sort-toggle {\n display: flex;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n padding: 2px;\n }\n\n .toggle-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n transition: all 0.15s ease;\n }\n\n .toggle-btn:hover {\n color: var(--mj-text-secondary);\n }\n\n .toggle-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n }\n\n /* Flex-fill so the empty-state placeholder occupies the timeline area\n (the host centers its content but does not grow to fill the parent). */\n .timeline-view-empty-fill {\n flex: 1 1 auto;\n }\n `,\n ],\n})\nexport class TimelineViewRendererComponent\n extends BaseAngularComponent\n implements IViewRenderer<TimelineViewConfig>, OnInit\n{\n // ========================================\n // IViewRenderer inputs (camelCase per the host contract)\n // ========================================\n\n private _entity: EntityInfo | null = null;\n /** The entity whose records are being rendered. Re-detects date fields + rebuilds groups on change. */\n @Input()\n set entity(value: EntityInfo | null) {\n const changed = !UUIDsEqual(value?.ID, this._entity?.ID);\n this._entity = value;\n if (changed) {\n this.detectDateFields();\n this.cdr.detectChanges();\n }\n }\n get entity(): EntityInfo | null {\n return this._entity;\n }\n\n private _records: Record<string, unknown>[] = [];\n /** The records to render (already loaded/filtered by the host). Rebuilds groups on change. */\n @Input()\n set records(value: Record<string, unknown>[]) {\n this._records = value ?? [];\n this.updateTimelineGroups();\n this.cdr.detectChanges();\n }\n get records(): Record<string, unknown>[] {\n return this._records;\n }\n\n /** Primary-key string of the currently selected record, if any (composite-key encoded). */\n @Input() selectedRecordId: string | null = null;\n\n /** Active filter text — accepted for contract uniformity; the host pre-filters `records`. */\n @Input() filterText: string | null = null;\n\n private _config: TimelineViewConfig = {};\n /**\n * This view's persisted configuration. Seeding the chrome controls from it is deferred to\n * {@link applyConfigToState}, called both here (for late updates) and in {@link ngOnInit}\n * (for the initial mount, where the host sets `config` via `setInput` before init runs).\n */\n @Input()\n set config(value: TimelineViewConfig) {\n this._config = value ?? {};\n if (this._initialized) {\n this.applyConfigToState();\n this.cdr.detectChanges();\n }\n }\n get config(): TimelineViewConfig {\n return this._config;\n }\n\n // ========================================\n // IViewRenderer outputs\n // ========================================\n\n /** Emitted when a timeline event is clicked — payload is the RAW record object. */\n @Output() recordSelected = new EventEmitter<unknown>();\n\n /** Emitted when a record should be opened — payload is the RAW record object. */\n @Output() recordOpened = new EventEmitter<unknown>();\n\n /** Emitted (with the FULL updated config) whenever the user changes a chrome control. */\n @Output() configChanged = new EventEmitter<TimelineViewConfig>();\n\n // ========================================\n // RENDER STATE (absorbed from the host)\n // ========================================\n\n /** Whether the current entity has any date fields available for timeline view. */\n public HasDateFields = false;\n\n /** Available date fields from the entity, sorted by priority. */\n public AvailableDateFields: EntityFieldInfo[] = [];\n\n /** The currently selected date field name for the timeline. */\n public SelectedTimelineDateField: string | null = null;\n\n /** The built timeline groups handed to `<mj-timeline>`. */\n public TimelineGroups: TimelineGroup<Record<string, unknown>>[] = [];\n\n /**\n * Timeline sort order. Named `…State` (not `TimelineSortOrder`) to avoid colliding with the\n * imported {@link TimelineSortOrder} type symbol used in the template / signatures.\n */\n public TimelineSortOrderState: TimelineSortOrder = 'desc';\n\n /** Timeline segment grouping (day/week/month/...). */\n public TimelineSegmentGrouping: TimeSegmentGrouping = 'month';\n\n /**\n * Timeline orientation. Named `…State` to avoid colliding with the imported\n * {@link TimelineOrientation} type symbol.\n */\n public TimelineOrientationState: TimelineOrientation = 'vertical';\n\n private _initialized = false;\n private cdr = inject(ChangeDetectorRef);\n\n // ========================================\n // LIFECYCLE\n // ========================================\n\n ngOnInit(): void {\n // The host sets entity/records/config via setInput BEFORE ngOnInit, so detection may have\n // already run. Apply the seeded config now (controls + defaults), then (re)build groups.\n this._initialized = true;\n this.applyConfigToState();\n this.detectDateFields();\n this.cdr.detectChanges();\n }\n\n // ========================================\n // COMPUTED\n // ========================================\n\n /** Display name of the currently selected timeline date field. */\n get SelectedDateFieldDisplayName(): string {\n if (!this.SelectedTimelineDateField) {\n return '';\n }\n const field = this.AvailableDateFields.find((f) => f.Name === this.SelectedTimelineDateField);\n return field?.DisplayNameOrName || this.SelectedTimelineDateField;\n }\n\n /**\n * The raw ID value derived from {@link selectedRecordId} for timeline selection. The host\n * passes the selection in composite-key format (`ID|abc-123` or `ID=abc-123`), but the\n * timeline stores just the raw ID value — so strip the field-name prefix.\n */\n get TimelineSelectedEventID(): string | null {\n if (!this.selectedRecordId) {\n return null;\n }\n if (this.selectedRecordId.includes('|')) {\n const parts = this.selectedRecordId.split('|');\n return parts.length > 1 ? parts[1] : this.selectedRecordId;\n }\n if (this.selectedRecordId.includes('=')) {\n const parts = this.selectedRecordId.split('=');\n return parts.length > 1 ? parts[1] : this.selectedRecordId;\n }\n return this.selectedRecordId;\n }\n\n // ========================================\n // CHROME ACTIONS (absorbed from the host)\n // ========================================\n\n /** Toggle timeline orientation between vertical and horizontal, then persist via config. */\n ToggleTimelineOrientation(): void {\n this.TimelineOrientationState = this.TimelineOrientationState === 'vertical' ? 'horizontal' : 'vertical';\n this.emitConfigChange();\n this.cdr.detectChanges();\n }\n\n /** Toggle timeline sort order between newest-first (desc) and oldest-first (asc), then persist. */\n ToggleTimelineSortOrder(): void {\n this.TimelineSortOrderState = this.TimelineSortOrderState === 'desc' ? 'asc' : 'desc';\n this.emitConfigChange();\n this.cdr.detectChanges();\n }\n\n /** Change the date field used for the timeline, rebuild groups, then persist via config. */\n SetTimelineDateField(fieldName: string): void {\n if (this.AvailableDateFields.some((f) => f.Name === fieldName)) {\n this.SelectedTimelineDateField = fieldName;\n this.updateTimelineGroups();\n this.emitConfigChange();\n this.cdr.detectChanges();\n }\n }\n\n // ========================================\n // TIMELINE EVENT → RECORD MAPPING\n // ========================================\n\n /**\n * Handle a timeline event click. Maps the {@link AfterEventClickArgs} to the underlying raw\n * record (`event.event.entity`) and emits it on {@link recordSelected}. The host's dynamic\n * handler builds the composite key from the raw record, so we emit the record object as-is.\n */\n OnTimelineEventClick(event: AfterEventClickArgs): void {\n const record = event.event.entity as Record<string, unknown> | undefined;\n if (record) {\n this.recordSelected.emit(record);\n }\n }\n\n // ========================================\n // CONFIG <-> STATE\n // ========================================\n\n /**\n * Seed the chrome control state from {@link config}, applying sensible defaults where the\n * config is silent (vertical orientation, descending sort, monthly segments). The selected\n * date field is resolved against the currently-available date fields in {@link detectDateFields}.\n */\n private applyConfigToState(): void {\n const c = this._config;\n this.TimelineOrientationState = c.orientation ?? 'vertical';\n this.TimelineSortOrderState = c.sortOrder ?? 'desc';\n this.TimelineSegmentGrouping = c.segmentGrouping ?? 'month';\n }\n\n /** Emit the FULL current config object so the host can persist the change. */\n private emitConfigChange(): void {\n this._config = {\n dateFieldName: this.SelectedTimelineDateField ?? undefined,\n orientation: this.TimelineOrientationState,\n sortOrder: this.TimelineSortOrderState,\n segmentGrouping: this.TimelineSegmentGrouping,\n };\n this.configChanged.emit(this._config);\n }\n\n // ========================================\n // DATE-FIELD DETECTION (absorbed from the host)\n // ========================================\n\n /**\n * Detect the entity's date fields and configure the timeline. Resolves the selected date\n * field (preferring the configured one, falling back to the highest-priority available field)\n * and rebuilds the groups. No-ops to an empty state when the entity has no date fields.\n */\n private detectDateFields(): void {\n if (!this._entity) {\n this.HasDateFields = false;\n this.AvailableDateFields = [];\n this.TimelineGroups = [];\n return;\n }\n\n const dateFields = this._entity.Fields.filter((f) => f.TSType === EntityFieldTSType.Date);\n if (dateFields.length === 0) {\n this.HasDateFields = false;\n this.AvailableDateFields = [];\n this.TimelineGroups = [];\n return;\n }\n\n this.AvailableDateFields = this.sortDateFieldsByPriority(dateFields);\n this.HasDateFields = true;\n this.SelectedTimelineDateField = this.getEffectiveTimelineDateField();\n this.updateTimelineGroups();\n }\n\n /**\n * Sort date fields by priority: `DefaultInView` fields first (by Sequence), then the rest\n * (by Sequence).\n */\n private sortDateFieldsByPriority(dateFields: EntityFieldInfo[]): EntityFieldInfo[] {\n const defaultInView = dateFields.filter((f) => f.DefaultInView).sort((a, b) => a.Sequence - b.Sequence);\n const others = dateFields.filter((f) => !f.DefaultInView).sort((a, b) => a.Sequence - b.Sequence);\n return [...defaultInView, ...others];\n }\n\n /**\n * Resolve which date field to use: the configured `dateFieldName` when it's still a valid\n * available field, otherwise the first (highest-priority) available date field.\n */\n private getEffectiveTimelineDateField(): string {\n if (this._config.dateFieldName) {\n const configField = this.AvailableDateFields.find((f) => f.Name === this._config.dateFieldName);\n if (configField) {\n return configField.Name;\n }\n }\n return this.AvailableDateFields[0].Name;\n }\n\n // ========================================\n // GROUP BUILDING (absorbed from the host)\n // ========================================\n\n /**\n * Build the single {@link TimelineGroup} for the current entity + records + selected date\n * field, mirroring the host's previous `updateTimelineGroups()`. No-ops to an empty state\n * when there is no entity or no selected date field.\n */\n private updateTimelineGroups(): void {\n // Emit NO group until there is an entity, a resolved date field, AND records. Emitting an empty\n // group (records not loaded yet) makes the inner <mj-timeline> run its first refresh with zero\n // events and mark itself loaded; the later records-populated update can then be dropped by its\n // concurrent-refresh / already-loaded guards, leaving \"No events to display\". Waiting for records\n // means its first real load happens with data.\n if (!this._entity || !this.SelectedTimelineDateField || this._records.length === 0) {\n this.TimelineGroups = [];\n return;\n }\n\n const titleField = this.findTitleField();\n\n const group = new TimelineGroup<Record<string, unknown>>();\n group.DataSourceType = 'array';\n group.EntityObjects = this._records;\n group.TitleFieldName = titleField;\n group.DateFieldName = this.SelectedTimelineDateField;\n group.IdFieldName = 'ID';\n group.GroupLabel = this._entity.Name;\n // The records are plain `simple` rows with no EntityInfo of their own: the group needs the\n // entity's metadata to know a SQL `date` field is a calendar day, not an instant.\n group.EntityInfo = this._entity;\n\n const descField = this.findDescriptionField();\n if (descField) {\n group.DescriptionFieldName = descField;\n }\n\n const subtitleField = this.findSubtitleField(titleField);\n if (subtitleField) {\n group.SubtitleFieldName = subtitleField;\n }\n\n const imageField = this.findImageField();\n group.CardConfig = {\n collapsible: true,\n defaultExpanded: false,\n showDate: true,\n // A calendar day has no time: \"12:00 AM\" on it would be invented.\n dateFormat: this.isDateOnlyField(this.SelectedTimelineDateField) ? 'MMM d, yyyy' : 'MMM d, yyyy h:mm a',\n ...(imageField\n ? { imageField, imagePosition: 'left' as const, imageSize: 'small' as const }\n : {}),\n };\n\n this.TimelineGroups = [group];\n }\n\n /** Whether the named field of the current entity is a SQL `date` column (a calendar day). */\n private isDateOnlyField(fieldName: string): boolean {\n const field = this._entity?.Fields.find((f) => f.Name.toLowerCase() === fieldName.toLowerCase());\n return IsDateOnlySQLType(field?.Type);\n }\n\n /**\n * Find the best field to use as the event title: the entity's NameField, then a\n * `DefaultInView` string field matching a common name pattern, then the first string field.\n */\n private findTitleField(): string {\n if (!this._entity) {\n return 'ID';\n }\n if (this._entity.NameField) {\n return this._entity.NameField.Name;\n }\n\n const stringFields = this._entity.Fields.filter(\n (f) => f.TSType === EntityFieldTSType.String && f.DefaultInView && !f.Name.startsWith('__mj_'),\n ).sort((a, b) => a.Sequence - b.Sequence);\n\n const namePatterns = ['name', 'title', 'subject', 'label'];\n for (const pattern of namePatterns) {\n const match = stringFields.find((f) => f.Name.toLowerCase().includes(pattern));\n if (match) {\n return match.Name;\n }\n }\n\n return stringFields.length > 0 ? stringFields[0].Name : 'ID';\n }\n\n /** Find a suitable description field by common naming pattern, or null. */\n private findDescriptionField(): string | null {\n if (!this._entity) {\n return null;\n }\n const descPatterns = ['description', 'notes', 'summary', 'content', 'body', 'details'];\n const textFields = this._entity.Fields.filter(\n (f) => f.TSType === EntityFieldTSType.String && !f.Name.startsWith('__mj_'),\n );\n for (const pattern of descPatterns) {\n const match = textFields.find((f) => f.Name.toLowerCase().includes(pattern));\n if (match) {\n return match.Name;\n }\n }\n return null;\n }\n\n /**\n * Find a suitable subtitle field (different from the title): a `DefaultInView` string field\n * matching a classification pattern (status/type/category/...), else the first other string\n * field, else null.\n */\n private findSubtitleField(excludeField: string): string | null {\n if (!this._entity) {\n return null;\n }\n const patterns = ['status', 'type', 'category', 'state', 'priority'];\n const fields = this._entity.Fields.filter(\n (f) =>\n f.TSType === EntityFieldTSType.String &&\n f.DefaultInView &&\n f.Name !== excludeField &&\n !f.Name.startsWith('__mj_'),\n ).sort((a, b) => a.Sequence - b.Sequence);\n\n for (const pattern of patterns) {\n const match = fields.find((f) => f.Name.toLowerCase().includes(pattern));\n if (match) {\n return match.Name;\n }\n }\n\n const firstOther = fields.find((f) => f.Name !== excludeField);\n return firstOther?.Name || null;\n }\n\n /** Image field (ExtendedType='Image') so timeline cards crop a thumbnail, same as grid/cards. */\n private findImageField(): string | null {\n if (!this._entity) {\n return null;\n }\n const match = this._entity.Fields.find(\n (f) => f.ExtendedType === 'Image' && f.TSType === EntityFieldTSType.String,\n );\n return match?.Name ?? null;\n }\n}\n\n/**\n * Tree-shaking guard. Force-references the component class so bundlers don't drop this module\n * when it's only mounted dynamically via the view-type descriptor's `RendererComponent`.\n */\nexport function LoadTimelineViewRenderer(): void {\n // no-op; presence prevents tree-shaking of the dynamically-mounted renderer\n void TimelineViewRendererComponent;\n}\n"]}
@@ -409,7 +409,8 @@ export declare class ViewWorkspaceComponent extends BaseAngularComponent impleme
409
409
  * Timeline export the columns a grid of this view would show: saved settings are sorted by
410
410
  * `orderIndex`, headed by the user's rename, resolved to the entity's field spelling (the export
411
411
  * engine reads each row by that key), and dropped when the field no longer exists; fields the
412
- * user is denied read access to are left out.
412
+ * user is denied read access to are left out. Each column carries the type the grid gives it, so a
413
+ * date-only field exports as its day (`YYYY-MM-DD`) here as it does from the grid.
413
414
  */
414
415
  private buildExportColumns;
415
416
  private buildExportFileName;
@@ -1 +1 @@
1
- {"version":3,"file":"view-workspace.component.d.ts","sourceRoot":"","sources":["../../../src/lib/view-workspace/view-workspace.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-workspace.component.d.ts","sourceRoot":"","sources":["../../../src/lib/view-workspace/view-workspace.component.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
3
  import { LogError } from '@memberjunction/core';
4
4
  import { UUIDsEqual } from '@memberjunction/global';
5
5
  import { UserInfoEngine } from '@memberjunction/core-entities';
6
+ import { ExportColumnTypeForSQLType } from '../utils/export-column.util';
6
7
  import { MJNotificationService } from '@memberjunction/ng-notifications';
7
8
  import { EntityViewerComponent } from '../entity-viewer/entity-viewer.component';
8
9
  import { ViewSelectorComponent } from '../view-selector/view-selector.component';
@@ -611,7 +612,8 @@ export class ViewWorkspaceComponent extends BaseAngularComponent {
611
612
  * Timeline export the columns a grid of this view would show: saved settings are sorted by
612
613
  * `orderIndex`, headed by the user's rename, resolved to the entity's field spelling (the export
613
614
  * engine reads each row by that key), and dropped when the field no longer exists; fields the
614
- * user is denied read access to are left out.
615
+ * user is denied read access to are left out. Each column carries the type the grid gives it, so a
616
+ * date-only field exports as its day (`YYYY-MM-DD`) here as it does from the grid.
615
617
  */
616
618
  buildExportColumns() {
617
619
  const entity = this._entity;
@@ -634,7 +636,11 @@ export class ViewWorkspaceComponent extends BaseAngularComponent {
634
636
  for (const c of sorted) {
635
637
  const field = entity.Fields.find(f => f.Name.toLowerCase() === c.Name.toLowerCase());
636
638
  if (field && readable(field)) {
637
- columns.push({ name: field.Name, displayName: c.userDisplayName || c.DisplayName || field.DisplayNameOrName });
639
+ columns.push({
640
+ name: field.Name,
641
+ displayName: c.userDisplayName || c.DisplayName || field.DisplayNameOrName,
642
+ dataType: ExportColumnTypeForSQLType(field.Type),
643
+ });
638
644
  }
639
645
  }
640
646
  if (columns.length > 0) {
@@ -643,7 +649,7 @@ export class ViewWorkspaceComponent extends BaseAngularComponent {
643
649
  }
644
650
  return entity.Fields
645
651
  .filter(f => !f.IsVirtual && readable(f))
646
- .map(f => ({ name: f.Name, displayName: f.DisplayNameOrName }));
652
+ .map(f => ({ name: f.Name, displayName: f.DisplayNameOrName, dataType: ExportColumnTypeForSQLType(f.Type) }));
647
653
  }
648
654
  buildExportFileName() {
649
655
  const viewName = this.CurrentViewEntity?.Name || 'Data';
@@ -1796,5 +1802,5 @@ export class ViewWorkspaceComponent extends BaseAngularComponent {
1796
1802
  type: ViewChild,
1797
1803
  args: [ViewConfigPanelComponent]
1798
1804
  }] }); })();
1799
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ViewWorkspaceComponent, { className: "ViewWorkspaceComponent", filePath: "src/lib/view-workspace/view-workspace.component.ts", lineNumber: 132 }); })();
1805
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ViewWorkspaceComponent, { className: "ViewWorkspaceComponent", filePath: "src/lib/view-workspace/view-workspace.component.ts", lineNumber: 133 }); })();
1800
1806
  //# sourceMappingURL=view-workspace.component.js.map