@memberjunction/ng-dashboards 6.1.2 → 6.2.0-edge.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +6 -1
  2. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  3. package/dist/AI/components/vectors/vector-management-resource.component.js +99 -45
  4. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  5. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +4 -0
  6. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  7. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +16 -6
  8. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  9. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +4 -0
  10. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  11. package/dist/DataExplorer/data-explorer-dashboard.component.js +14 -4
  12. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  13. package/dist/DataExplorer/services/explorer-state.service.js +2 -2
  14. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  15. package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
  16. package/dist/DevTools/graphql-console.component.js +2 -0
  17. package/dist/DevTools/graphql-console.component.js.map +1 -1
  18. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  19. package/dist/Integration/components/connections/connections.component.js +2 -0
  20. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  21. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +4 -12
  22. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
  23. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +39 -78
  24. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  25. package/dist/Lists/components/lists-browse-resource.component.d.ts +3 -0
  26. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  27. package/dist/Lists/components/lists-browse-resource.component.js +7 -6
  28. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  29. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +3 -0
  30. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  31. package/dist/Lists/components/lists-my-lists-resource.component.js +7 -6
  32. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  33. package/dist/PredictiveStudio/at-risk.view-models.d.ts +41 -3
  34. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +1 -1
  35. package/dist/PredictiveStudio/at-risk.view-models.js +99 -6
  36. package/dist/PredictiveStudio/at-risk.view-models.js.map +1 -1
  37. package/dist/PredictiveStudio/components/ps-catalog.component.d.ts +4 -1
  38. package/dist/PredictiveStudio/components/ps-catalog.component.d.ts.map +1 -1
  39. package/dist/PredictiveStudio/components/ps-catalog.component.js +61 -37
  40. package/dist/PredictiveStudio/components/ps-catalog.component.js.map +1 -1
  41. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +12 -0
  42. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  43. package/dist/PredictiveStudio/components/ps-experiments.component.js +426 -184
  44. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  45. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +84 -0
  46. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -0
  47. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +1397 -0
  48. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -0
  49. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +66 -34
  50. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  51. package/dist/PredictiveStudio/components/ps-pipelines.component.js +2456 -743
  52. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  53. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +194 -0
  54. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -0
  55. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +1902 -0
  56. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -0
  57. package/dist/PredictiveStudio/components/ps-production.component.d.ts +17 -1
  58. package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
  59. package/dist/PredictiveStudio/components/ps-production.component.js +653 -372
  60. package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
  61. package/dist/PredictiveStudio/components/ps-registry.component.d.ts +21 -61
  62. package/dist/PredictiveStudio/components/ps-registry.component.d.ts.map +1 -1
  63. package/dist/PredictiveStudio/components/ps-registry.component.js +214 -681
  64. package/dist/PredictiveStudio/components/ps-registry.component.js.map +1 -1
  65. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +49 -0
  66. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +1 -0
  67. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +658 -0
  68. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +1 -0
  69. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +42 -0
  70. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -0
  71. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +90 -0
  72. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -0
  73. package/dist/PredictiveStudio/predictive-studio.view-models.d.ts +14 -2
  74. package/dist/PredictiveStudio/predictive-studio.view-models.d.ts.map +1 -1
  75. package/dist/PredictiveStudio/predictive-studio.view-models.js +41 -5
  76. package/dist/PredictiveStudio/predictive-studio.view-models.js.map +1 -1
  77. package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts +9 -1
  78. package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts.map +1 -1
  79. package/dist/PredictiveStudio/resources/ps-models-resource.component.js +178 -65
  80. package/dist/PredictiveStudio/resources/ps-models-resource.component.js.map +1 -1
  81. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +9 -1
  82. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  83. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +307 -369
  84. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  85. package/dist/PredictiveStudio/resources/ps-resource-base.js +1 -1
  86. package/dist/PredictiveStudio/resources/ps-resource-base.js.map +1 -1
  87. package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts +17 -1
  88. package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts.map +1 -1
  89. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +309 -138
  90. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  91. package/dist/VersionHistory/components/graph-resource.component.d.ts +1 -0
  92. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  93. package/dist/VersionHistory/components/graph-resource.component.js +6 -5
  94. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  95. package/dist/predictive-studio-dashboards.module.d.ts +10 -8
  96. package/dist/predictive-studio-dashboards.module.d.ts.map +1 -1
  97. package/dist/predictive-studio-dashboards.module.js +13 -3
  98. package/dist/predictive-studio-dashboards.module.js.map +1 -1
  99. package/package.json +64 -63
@@ -147,6 +147,10 @@ export declare class NavigationPanelComponent extends BaseAngularComponent imple
147
147
  * Get icon for a favorite item based on its type and entity
148
148
  */
149
149
  getFavoriteIcon(favorite: FavoriteItem): string;
150
+ /**
151
+ * Get user-friendly display name for an entity.
152
+ */
153
+ getEntityDisplayName(entityName?: string): string;
150
154
  static ɵfac: i0.ɵɵFactoryDeclaration<NavigationPanelComponent, never>;
151
155
  static ɵcmp: i0.ɵɵComponentDeclaration<NavigationPanelComponent, "mj-explorer-navigation-panel", never, { "entities": { "alias": "entities"; "required": false; }; "selectedEntityName": { "alias": "selectedEntityName"; "required": false; }; "favorites": { "alias": "favorites"; "required": false; }; "recentItems": { "alias": "recentItems"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; "allowedEntityNames": { "alias": "allowedEntityNames"; "required": false; }; "appEntityGroups": { "alias": "appEntityGroups"; "required": false; }; "applicationIdFilter": { "alias": "applicationIdFilter"; "required": false; }; "favoritesSectionExpanded": { "alias": "favoritesSectionExpanded"; "required": false; }; "recentSectionExpanded": { "alias": "recentSectionExpanded"; "required": false; }; "entitiesSectionExpanded": { "alias": "entitiesSectionExpanded"; "required": false; }; "viewsSectionExpanded": { "alias": "viewsSectionExpanded"; "required": false; }; }, { "entitySelected": "entitySelected"; "toggleCollapse": "toggleCollapse"; "sectionToggled": "sectionToggled"; "openRecord": "openRecord"; "selectRecord": "selectRecord"; "expandAndFocus": "expandAndFocus"; "appGroupToggled": "appGroupToggled"; }, never, never, false, never>;
152
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/DataExplorer/components/navigation-panel/navigation-panel.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/DataExplorer/components/navigation-panel/navigation-panel.component.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,7 @@ function NavigationPanelComponent_Conditional_3_Conditional_4_For_2_Template(rf,
43
43
  } if (rf & 2) {
44
44
  const favorite_r4 = ctx.$implicit;
45
45
  const ctx_r1 = i0.ɵɵnextContext(3);
46
- i0.ɵɵproperty("title", favorite_r4.entityName ? favorite_r4.entityName + " - " + favorite_r4.displayName : favorite_r4.displayName);
46
+ i0.ɵɵproperty("title", favorite_r4.entityName ? ctx_r1.getEntityDisplayName(favorite_r4.entityName) + " - " + favorite_r4.displayName : favorite_r4.displayName);
47
47
  i0.ɵɵadvance();
48
48
  i0.ɵɵclassMap(ctx_r1.getFavoriteIcon(favorite_r4));
49
49
  i0.ɵɵadvance(2);
@@ -60,7 +60,7 @@ function NavigationPanelComponent_Conditional_3_Conditional_4_For_4_Template(rf,
60
60
  } if (rf & 2) {
61
61
  const favorite_r6 = ctx.$implicit;
62
62
  const ctx_r1 = i0.ɵɵnextContext(3);
63
- i0.ɵɵproperty("title", favorite_r6.entityName ? favorite_r6.entityName + " - " + favorite_r6.displayName : favorite_r6.displayName);
63
+ i0.ɵɵproperty("title", favorite_r6.entityName ? ctx_r1.getEntityDisplayName(favorite_r6.entityName) + " - " + favorite_r6.displayName : favorite_r6.displayName);
64
64
  i0.ɵɵadvance();
65
65
  i0.ɵɵclassMap(ctx_r1.getFavoriteIcon(favorite_r6));
66
66
  i0.ɵɵadvance(2);
@@ -115,7 +115,7 @@ function NavigationPanelComponent_Conditional_3_Conditional_8_For_2_Template(rf,
115
115
  } if (rf & 2) {
116
116
  const item_r8 = ctx.$implicit;
117
117
  const ctx_r1 = i0.ɵɵnextContext(3);
118
- i0.ɵɵproperty("title", item_r8.entityName + " - " + item_r8.displayName);
118
+ i0.ɵɵproperty("title", ctx_r1.getEntityDisplayName(item_r8.entityName) + " - " + item_r8.displayName);
119
119
  i0.ɵɵadvance();
120
120
  i0.ɵɵclassMap(ctx_r1.getRecentItemIcon(item_r8));
121
121
  i0.ɵɵadvance(3);
@@ -289,7 +289,7 @@ export class NavigationPanelComponent extends BaseAngularComponent {
289
289
  treeLeafConfig = {
290
290
  EntityName: 'MJ: Entities',
291
291
  ParentField: '', // Using JunctionConfig for M2M relationship
292
- DisplayField: 'Name',
292
+ DisplayField: 'DisplayName',
293
293
  IDField: 'ID',
294
294
  IconField: 'Icon',
295
295
  JunctionConfig: {
@@ -297,7 +297,7 @@ export class NavigationPanelComponent extends BaseAngularComponent {
297
297
  BranchForeignKey: 'ApplicationID',
298
298
  LeafForeignKey: 'EntityID'
299
299
  },
300
- OrderBy: 'Name'
300
+ OrderBy: 'DisplayName, Name'
301
301
  };
302
302
  entityTree;
303
303
  /** Selected entity ID for tree highlighting */
@@ -579,6 +579,16 @@ export class NavigationPanelComponent extends BaseAngularComponent {
579
579
  }
580
580
  return 'fa-solid fa-file-alt';
581
581
  }
582
+ /**
583
+ * Get user-friendly display name for an entity.
584
+ */
585
+ getEntityDisplayName(entityName) {
586
+ if (!entityName) {
587
+ return '';
588
+ }
589
+ const entityInfo = this.metadata.Entities.find(e => e.Name.toLowerCase() === entityName.toLowerCase());
590
+ return entityInfo?.DisplayNameOrName || entityName;
591
+ }
582
592
  static ɵfac = function NavigationPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NavigationPanelComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
583
593
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NavigationPanelComponent, selectors: [["mj-explorer-navigation-panel"]], viewQuery: function NavigationPanelComponent_Query(rf, ctx) { if (rf & 1) {
584
594
  i0.ɵɵviewQuery(_c0, 5);
@@ -604,7 +614,7 @@ export class NavigationPanelComponent extends BaseAngularComponent {
604
614
  }
605
615
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NavigationPanelComponent, [{
606
616
  type: Component,
607
- args: [{ standalone: false, selector: 'mj-explorer-navigation-panel', template: "<div class=\"navigation-panel-container\" [class.collapsed]=\"collapsed\">\n <!-- Collapse Toggle -->\n <button class=\"collapse-toggle\" (click)=\"onToggleCollapse()\" [title]=\"collapsed ? 'Expand' : 'Collapse'\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"collapsed\" [class.fa-chevron-left]=\"!collapsed\"></i>\n </button>\n\n @if (!collapsed) {\n <div class=\"panel-content\">\n <!-- Favorites Section -->\n <mj-accordion-panel class=\"nav-accordion\" Size=\"sm\"\n [Expanded]=\"favoritesSectionExpanded\" (ExpandedChange)=\"onSectionToggle('favorites')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-star section-icon\"></i>\n <span class=\"section-title\">Favorites</span>\n @if (favoriteRecords.length + favoriteEntities.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ favoriteRecords.length + favoriteEntities.length }}</span>\n }\n </ng-template>\n\n @if (favoriteRecords.length + favoriteEntities.length === 0) {\n <mj-empty-state class=\"empty-section\" Size=\"compact\"\n Icon=\"\" Title=\"No favorites yet\" />\n } @else {\n <div class=\"nav-scroll\">\n @for (favorite of favoriteEntities; track favorite.entityName) {\n <div class=\"nav-item\" (click)=\"onFavoriteClick(favorite)\" [title]=\"favorite.entityName ? favorite.entityName + ' - ' + favorite.displayName : favorite.displayName\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n <span class=\"nav-item-label\">{{ favorite.displayName }}</span>\n </div>\n }\n @for (favorite of favoriteRecords; track favorite.entityName + '|' + favorite.compositeKeyString) {\n <div class=\"nav-item\" (click)=\"onFavoriteClick(favorite)\" [title]=\"favorite.entityName ? favorite.entityName + ' - ' + favorite.displayName : favorite.displayName\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n <span class=\"nav-item-label\">{{ favorite.displayName }}</span>\n </div>\n }\n </div>\n }\n </mj-accordion-panel>\n\n <!-- Recent Items Section -->\n <mj-accordion-panel class=\"nav-accordion\" Size=\"sm\"\n [Expanded]=\"recentSectionExpanded\" (ExpandedChange)=\"onSectionToggle('recent')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-clock section-icon\"></i>\n <span class=\"section-title\">Recent</span>\n @if (filteredRecentItems.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ filteredRecentItems.length }}</span>\n }\n </ng-template>\n\n @if (filteredRecentItems.length === 0) {\n <mj-empty-state class=\"empty-section\" Size=\"compact\"\n Icon=\"\" Title=\"No recent items\" />\n } @else {\n <div class=\"nav-scroll\">\n @for (item of filteredRecentItems; track item.entityName + '|' + item.compositeKeyString) {\n <div class=\"nav-item\" (click)=\"onRecentClick(item)\" [title]=\"item.entityName + ' - ' + item.displayName\">\n <i [class]=\"getRecentItemIcon(item)\"></i>\n <div class=\"nav-item-content\">\n <span class=\"nav-item-label\">{{ item.displayName }}</span>\n <span class=\"nav-item-meta\">{{ formatTimestamp(item.timestamp) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </mj-accordion-panel>\n\n <!-- Entities Section (ng-tree) \u2014 Fill so the tree owns the leftover rail height -->\n <mj-accordion-panel class=\"nav-accordion nav-accordion--entities\" Size=\"sm\" [Fill]=\"true\" [FlushBody]=\"true\"\n [Expanded]=\"entitiesSectionExpanded\" (ExpandedChange)=\"onSectionToggle('entities')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-database section-icon\"></i>\n <span class=\"section-title\">Entities</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ entities.length }}</span>\n </ng-template>\n\n <div class=\"entity-tree-container\">\n <!-- Entity Search -->\n <div class=\"entity-search\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search entities...\"\n [(ngModel)]=\"entitySearchTerm\"\n (ngModelChange)=\"onEntitySearchChanged()\"\n />\n @if (entitySearchTerm) {\n <button class=\"clear-search\" (click)=\"clearEntitySearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n\n <!-- Entity Tree -->\n <mj-tree\n #entityTree\n [BranchConfig]=\"treeBranchConfig\"\n [LeafConfig]=\"treeLeafConfig\"\n [SelectionMode]=\"'single'\"\n [SelectableTypes]=\"'leaf'\"\n [SelectedIDs]=\"selectedEntityIds\"\n [ShowIcons]=\"true\"\n [ShowExpandCollapseAll]=\"false\"\n [AnimateExpandCollapse]=\"true\"\n [EmptyMessage]=\"entitySearchTerm ? 'No matches for: ' + entitySearchTerm : 'No entities available'\"\n [EmptyIcon]=\"'fa-solid fa-database'\"\n (SelectionChange)=\"onTreeEntitySelected($event)\">\n </mj-tree>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <!-- Collapsed State - Show Icons Only -->\n <div class=\"collapsed-icons\">\n <button class=\"icon-btn\" title=\"Favorites\" (click)=\"onCollapsedIconClick('favorites')\">\n <i class=\"fa-solid fa-star\"></i>\n @if (favoriteRecords.length + favoriteEntities.length > 0) {\n <span class=\"collapsed-badge\">{{ favoriteRecords.length + favoriteEntities.length }}</span>\n }\n </button>\n <button class=\"icon-btn\" title=\"Recent\" (click)=\"onCollapsedIconClick('recent')\">\n <i class=\"fa-solid fa-clock\"></i>\n @if (filteredRecentItems.length > 0) {\n <span class=\"collapsed-badge\">{{ filteredRecentItems.length }}</span>\n }\n </button>\n <button class=\"icon-btn\" title=\"Entities\" (click)=\"onCollapsedIconClick('entities')\">\n <i class=\"fa-solid fa-database\"></i>\n <span class=\"collapsed-badge\">{{ entities.length }}</span>\n </button>\n </div>\n }\n</div>\n", styles: [".navigation-panel-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0; /* Critical for nested flex scrolling */\n position: relative;\n background: var(--mj-bg-surface);\n box-shadow: 1px 0 3px rgba(0, 0, 0, 0.05);\n}\n.navigation-panel-container.collapsed {\n align-items: center;\n padding-top: 48px;\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.panel-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.collapse-toggle {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 28px;\n height: 28px;\n border: none;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-secondary);\n transition: all 0.15s ease;\n z-index: 10;\n}\n.collapse-toggle:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.collapsed .collapse-toggle {\n right: auto;\n left: 50%;\n transform: translateX(-50%);\n background: transparent;\n}\n.collapsed .collapse-toggle:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.panel-content {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n padding: 48px 8px 8px 8px;\n min-height: 0; /* Allow flex children to shrink below content size */\n}\n\n/* The Favorites/Recent accordions sit at natural height; the Entities accordion\n uses [Fill] so it claims the leftover rail height (see .nav-accordion--entities). */\n.nav-accordion {\n flex-shrink: 0;\n}\n\n/* Section label inside the accordion title slot. The accordion title row already\n provides the flex layout + 8px gap, so the icon needs no extra right-margin. */\n.section-icon {\n width: 18px;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.section-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.8px;\n color: var(--mj-text-muted);\n}\n\n/* Capped, scrollable list body for Favorites / Recent. */\n.nav-scroll {\n max-height: 200px;\n overflow-y: auto;\n min-height: 0;\n}\n.nav-scroll::-webkit-scrollbar {\n width: 6px;\n}\n.nav-scroll::-webkit-scrollbar-track {\n background: transparent;\n}\n.nav-scroll::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n/* Entities: the Fill accordion's body is a flex:1 region; this container fills it\n so the search box stays pinned and the tree scrolls internally. FlushBody gives\n us the padding budget back, applied here. */\n.entity-tree-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n padding: 10px 10px 6px 10px;\n}\n\n.entity-tree-container mj-tree {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n.empty-section {\n padding: 20px 16px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-style: italic;\n}\n\n.nav-item {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n gap: 10px;\n margin-bottom: 2px;\n}\n.nav-item:hover {\n background: var(--mj-bg-surface-card);\n}\n.nav-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.nav-item.selected i {\n color: var(--mj-brand-primary);\n}\n.nav-item.selected .nav-item-label {\n font-weight: 600;\n}\n.nav-item i {\n width: 18px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n text-align: center;\n}\n\n.nav-item-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.nav-item-label {\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-item-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.entity-search {\n position: relative;\n margin-bottom: 12px;\n flex-shrink: 0;\n}\n\n.search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.search-input {\n width: 100%;\n padding: 10px 36px 10px 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n background: var(--mj-bg-surface-card);\n transition: all 0.15s ease;\n}\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n.search-input::placeholder {\n color: var(--mj-text-muted);\n}\n\n.clear-search {\n position: absolute;\n right: 6px;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n border: none;\n background: transparent;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n}\n.clear-search:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n}\n\n.entity-list {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n padding-right: 4px;\n}\n.entity-list::-webkit-scrollbar {\n width: 6px;\n}\n.entity-list::-webkit-scrollbar-track {\n background: transparent;\n}\n.entity-list::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n.entity-list::-webkit-scrollbar-thumb:hover {\n background: var(--mj-border-strong);\n}\n\n.entity-list-inner {\n /* Inner container grows naturally based on content */\n /* Does not scroll - parent .entity-list handles scrolling */\n}\n\n.entity-item .nav-item-label {\n flex: 1;\n}\n\n/* ============================================\n NAV PANEL APPLICATION GROUPS\n ============================================ */\n\n.nav-app-group {\n margin-bottom: 2px;\n}\n\n.nav-app-group-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.12s;\n user-select: none;\n}\n\n.nav-app-group-header:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.nav-app-group-icon {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 16px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.nav-app-group-name {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-secondary);\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-app-group-count {\n font-size: 10px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-card);\n padding: 1px 6px;\n border-radius: 8px;\n}\n\n.nav-app-group-chevron {\n font-size: 9px;\n color: var(--mj-text-muted);\n transition: transform 0.15s;\n}\n\n.nav-app-group-chevron.expanded {\n transform: rotate(90deg);\n}\n\n.nav-app-group-entities {\n padding-left: 8px;\n}\n\n.nav-app-group-entities .nav-item {\n padding: 8px 10px 8px 16px;\n}\n\n.collapsed-icons {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding-top: 16px;\n}\n\n.icon-btn {\n width: 36px;\n height: 36px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-secondary);\n transition: all 0.15s ease;\n position: relative;\n}\n.icon-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n.icon-btn i {\n font-size: 16px;\n}\n\n.collapsed-badge {\n position: absolute;\n top: 2px;\n right: 2px;\n min-width: 16px;\n height: 16px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 4px;\n}\n"] }]
617
+ args: [{ standalone: false, selector: 'mj-explorer-navigation-panel', template: "<div class=\"navigation-panel-container\" [class.collapsed]=\"collapsed\">\n <!-- Collapse Toggle -->\n <button class=\"collapse-toggle\" (click)=\"onToggleCollapse()\" [title]=\"collapsed ? 'Expand' : 'Collapse'\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"collapsed\" [class.fa-chevron-left]=\"!collapsed\"></i>\n </button>\n\n @if (!collapsed) {\n <div class=\"panel-content\">\n <!-- Favorites Section -->\n <mj-accordion-panel class=\"nav-accordion\" Size=\"sm\"\n [Expanded]=\"favoritesSectionExpanded\" (ExpandedChange)=\"onSectionToggle('favorites')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-star section-icon\"></i>\n <span class=\"section-title\">Favorites</span>\n @if (favoriteRecords.length + favoriteEntities.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ favoriteRecords.length + favoriteEntities.length }}</span>\n }\n </ng-template>\n\n @if (favoriteRecords.length + favoriteEntities.length === 0) {\n <mj-empty-state class=\"empty-section\" Size=\"compact\"\n Icon=\"\" Title=\"No favorites yet\" />\n } @else {\n <div class=\"nav-scroll\">\n @for (favorite of favoriteEntities; track favorite.entityName) {\n <div class=\"nav-item\" (click)=\"onFavoriteClick(favorite)\" [title]=\"favorite.entityName ? getEntityDisplayName(favorite.entityName) + ' - ' + favorite.displayName : favorite.displayName\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n <span class=\"nav-item-label\">{{ favorite.displayName }}</span>\n </div>\n }\n @for (favorite of favoriteRecords; track favorite.entityName + '|' + favorite.compositeKeyString) {\n <div class=\"nav-item\" (click)=\"onFavoriteClick(favorite)\" [title]=\"favorite.entityName ? getEntityDisplayName(favorite.entityName) + ' - ' + favorite.displayName : favorite.displayName\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n <span class=\"nav-item-label\">{{ favorite.displayName }}</span>\n </div>\n }\n </div>\n }\n </mj-accordion-panel>\n\n <!-- Recent Items Section -->\n <mj-accordion-panel class=\"nav-accordion\" Size=\"sm\"\n [Expanded]=\"recentSectionExpanded\" (ExpandedChange)=\"onSectionToggle('recent')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-clock section-icon\"></i>\n <span class=\"section-title\">Recent</span>\n @if (filteredRecentItems.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ filteredRecentItems.length }}</span>\n }\n </ng-template>\n\n @if (filteredRecentItems.length === 0) {\n <mj-empty-state class=\"empty-section\" Size=\"compact\"\n Icon=\"\" Title=\"No recent items\" />\n } @else {\n <div class=\"nav-scroll\">\n @for (item of filteredRecentItems; track item.entityName + '|' + item.compositeKeyString) {\n <div class=\"nav-item\" (click)=\"onRecentClick(item)\" [title]=\"getEntityDisplayName(item.entityName) + ' - ' + item.displayName\">\n <i [class]=\"getRecentItemIcon(item)\"></i>\n <div class=\"nav-item-content\">\n <span class=\"nav-item-label\">{{ item.displayName }}</span>\n <span class=\"nav-item-meta\">{{ formatTimestamp(item.timestamp) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </mj-accordion-panel>\n\n <!-- Entities Section (ng-tree) \u2014 Fill so the tree owns the leftover rail height -->\n <mj-accordion-panel class=\"nav-accordion nav-accordion--entities\" Size=\"sm\" [Fill]=\"true\" [FlushBody]=\"true\"\n [Expanded]=\"entitiesSectionExpanded\" (ExpandedChange)=\"onSectionToggle('entities')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-database section-icon\"></i>\n <span class=\"section-title\">Entities</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ entities.length }}</span>\n </ng-template>\n\n <div class=\"entity-tree-container\">\n <!-- Entity Search -->\n <div class=\"entity-search\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search entities...\"\n [(ngModel)]=\"entitySearchTerm\"\n (ngModelChange)=\"onEntitySearchChanged()\"\n />\n @if (entitySearchTerm) {\n <button class=\"clear-search\" (click)=\"clearEntitySearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n\n <!-- Entity Tree -->\n <mj-tree\n #entityTree\n [BranchConfig]=\"treeBranchConfig\"\n [LeafConfig]=\"treeLeafConfig\"\n [SelectionMode]=\"'single'\"\n [SelectableTypes]=\"'leaf'\"\n [SelectedIDs]=\"selectedEntityIds\"\n [ShowIcons]=\"true\"\n [ShowExpandCollapseAll]=\"false\"\n [AnimateExpandCollapse]=\"true\"\n [EmptyMessage]=\"entitySearchTerm ? 'No matches for: ' + entitySearchTerm : 'No entities available'\"\n [EmptyIcon]=\"'fa-solid fa-database'\"\n (SelectionChange)=\"onTreeEntitySelected($event)\">\n </mj-tree>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <!-- Collapsed State - Show Icons Only -->\n <div class=\"collapsed-icons\">\n <button class=\"icon-btn\" title=\"Favorites\" (click)=\"onCollapsedIconClick('favorites')\">\n <i class=\"fa-solid fa-star\"></i>\n @if (favoriteRecords.length + favoriteEntities.length > 0) {\n <span class=\"collapsed-badge\">{{ favoriteRecords.length + favoriteEntities.length }}</span>\n }\n </button>\n <button class=\"icon-btn\" title=\"Recent\" (click)=\"onCollapsedIconClick('recent')\">\n <i class=\"fa-solid fa-clock\"></i>\n @if (filteredRecentItems.length > 0) {\n <span class=\"collapsed-badge\">{{ filteredRecentItems.length }}</span>\n }\n </button>\n <button class=\"icon-btn\" title=\"Entities\" (click)=\"onCollapsedIconClick('entities')\">\n <i class=\"fa-solid fa-database\"></i>\n <span class=\"collapsed-badge\">{{ entities.length }}</span>\n </button>\n </div>\n }\n</div>\n", styles: [".navigation-panel-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0; /* Critical for nested flex scrolling */\n position: relative;\n background: var(--mj-bg-surface);\n box-shadow: 1px 0 3px rgba(0, 0, 0, 0.05);\n}\n.navigation-panel-container.collapsed {\n align-items: center;\n padding-top: 48px;\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.panel-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.collapse-toggle {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 28px;\n height: 28px;\n border: none;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-secondary);\n transition: all 0.15s ease;\n z-index: 10;\n}\n.collapse-toggle:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.collapsed .collapse-toggle {\n right: auto;\n left: 50%;\n transform: translateX(-50%);\n background: transparent;\n}\n.collapsed .collapse-toggle:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.panel-content {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n padding: 48px 8px 8px 8px;\n min-height: 0; /* Allow flex children to shrink below content size */\n}\n\n/* The Favorites/Recent accordions sit at natural height; the Entities accordion\n uses [Fill] so it claims the leftover rail height (see .nav-accordion--entities). */\n.nav-accordion {\n flex-shrink: 0;\n}\n\n/* Section label inside the accordion title slot. The accordion title row already\n provides the flex layout + 8px gap, so the icon needs no extra right-margin. */\n.section-icon {\n width: 18px;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.section-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.8px;\n color: var(--mj-text-muted);\n}\n\n/* Capped, scrollable list body for Favorites / Recent. */\n.nav-scroll {\n max-height: 200px;\n overflow-y: auto;\n min-height: 0;\n}\n.nav-scroll::-webkit-scrollbar {\n width: 6px;\n}\n.nav-scroll::-webkit-scrollbar-track {\n background: transparent;\n}\n.nav-scroll::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n/* Entities: the Fill accordion's body is a flex:1 region; this container fills it\n so the search box stays pinned and the tree scrolls internally. FlushBody gives\n us the padding budget back, applied here. */\n.entity-tree-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n padding: 10px 10px 6px 10px;\n}\n\n.entity-tree-container mj-tree {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n.empty-section {\n padding: 20px 16px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-style: italic;\n}\n\n.nav-item {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n gap: 10px;\n margin-bottom: 2px;\n}\n.nav-item:hover {\n background: var(--mj-bg-surface-card);\n}\n.nav-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.nav-item.selected i {\n color: var(--mj-brand-primary);\n}\n.nav-item.selected .nav-item-label {\n font-weight: 600;\n}\n.nav-item i {\n width: 18px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n text-align: center;\n}\n\n.nav-item-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.nav-item-label {\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-item-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.entity-search {\n position: relative;\n margin-bottom: 12px;\n flex-shrink: 0;\n}\n\n.search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.search-input {\n width: 100%;\n padding: 10px 36px 10px 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 13px;\n background: var(--mj-bg-surface-card);\n transition: all 0.15s ease;\n}\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n.search-input::placeholder {\n color: var(--mj-text-muted);\n}\n\n.clear-search {\n position: absolute;\n right: 6px;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n border: none;\n background: transparent;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n}\n.clear-search:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-muted);\n}\n\n.entity-list {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n padding-right: 4px;\n}\n.entity-list::-webkit-scrollbar {\n width: 6px;\n}\n.entity-list::-webkit-scrollbar-track {\n background: transparent;\n}\n.entity-list::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n.entity-list::-webkit-scrollbar-thumb:hover {\n background: var(--mj-border-strong);\n}\n\n.entity-list-inner {\n /* Inner container grows naturally based on content */\n /* Does not scroll - parent .entity-list handles scrolling */\n}\n\n.entity-item .nav-item-label {\n flex: 1;\n}\n\n/* ============================================\n NAV PANEL APPLICATION GROUPS\n ============================================ */\n\n.nav-app-group {\n margin-bottom: 2px;\n}\n\n.nav-app-group-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.12s;\n user-select: none;\n}\n\n.nav-app-group-header:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.nav-app-group-icon {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 16px;\n text-align: center;\n flex-shrink: 0;\n}\n\n.nav-app-group-name {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-secondary);\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-app-group-count {\n font-size: 10px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-card);\n padding: 1px 6px;\n border-radius: 8px;\n}\n\n.nav-app-group-chevron {\n font-size: 9px;\n color: var(--mj-text-muted);\n transition: transform 0.15s;\n}\n\n.nav-app-group-chevron.expanded {\n transform: rotate(90deg);\n}\n\n.nav-app-group-entities {\n padding-left: 8px;\n}\n\n.nav-app-group-entities .nav-item {\n padding: 8px 10px 8px 16px;\n}\n\n.collapsed-icons {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding-top: 16px;\n}\n\n.icon-btn {\n width: 36px;\n height: 36px;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-secondary);\n transition: all 0.15s ease;\n position: relative;\n}\n.icon-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n.icon-btn i {\n font-size: 16px;\n}\n\n.collapsed-badge {\n position: absolute;\n top: 2px;\n right: 2px;\n min-width: 16px;\n height: 16px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 4px;\n}\n"] }]
608
618
  }], () => [{ type: i0.ChangeDetectorRef }], { entities: [{
609
619
  type: Input
610
620
  }], selectedEntityName: [{
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-panel.component.js","sourceRoot":"","sources":["../../../../src/DataExplorer/components/navigation-panel/navigation-panel.component.ts","../../../../src/DataExplorer/components/navigation-panel/navigation-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, Input, Output, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { EntityInfo, CompositeKey } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { TreeBranchConfig, TreeLeafConfig, TreeNode, TreeComponent } from '@memberjunction/ng-trees';\nimport { RecentItem, FavoriteItem, AppEntityGroup } from '../../models/explorer-state.interface';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n/**\n * Event emitted when a record should be opened in a full tab\n */\nexport interface OpenRecordEvent {\n entityName: string;\n compositeKey: CompositeKey;\n}\n\n/**\n * Event emitted when a record should be selected within Data Explorer (not full tab)\n */\nexport interface SelectRecordEvent {\n entityName: string;\n recordId: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-explorer-navigation-panel',\n templateUrl: './navigation-panel.component.html',\n styleUrls: ['./navigation-panel.component.css']\n})\nexport class NavigationPanelComponent extends BaseAngularComponent implements OnChanges, OnInit, OnDestroy {\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n @Input() entities: EntityInfo[] = [];\n @Input() selectedEntityName: string | null = null;\n @Input() favorites: FavoriteItem[] = [];\n @Input() recentItems: RecentItem[] = [];\n @Input() collapsed = false;\n /**\n * Optional set of allowed entity names for filtering favorites/recents.\n * If provided, only items matching these entities will be shown.\n */\n @Input() allowedEntityNames: Set<string> | null = null;\n /** Application-based entity groups from the parent dashboard */\n @Input() appEntityGroups: AppEntityGroup[] = [];\n /** Optional application ID filter for the tree */\n @Input() applicationIdFilter: string | null = null;\n\n // Section expansion states\n @Input() favoritesSectionExpanded = true;\n @Input() recentSectionExpanded = true;\n @Input() entitiesSectionExpanded = true;\n @Input() viewsSectionExpanded = true;\n\n @Output() entitySelected = new EventEmitter<EntityInfo>();\n @Output() toggleCollapse = new EventEmitter<void>();\n @Output() sectionToggled = new EventEmitter<'favorites' | 'recent' | 'entities' | 'views'>();\n @Output() openRecord = new EventEmitter<OpenRecordEvent>();\n /** Emitted when a record should be selected within Data Explorer (navigate to entity + select record) */\n @Output() selectRecord = new EventEmitter<SelectRecordEvent>();\n /** Emitted when a collapsed icon is clicked - expands panel and focuses section */\n @Output() expandAndFocus = new EventEmitter<'favorites' | 'recent' | 'entities'>();\n /** Emitted when a nav panel app group is toggled */\n @Output() appGroupToggled = new EventEmitter<string>();\n\n private get metadata() { return this.ProviderToUse; }\n\n // Tree configuration for entity list\n public treeBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: Applications',\n DisplayField: 'Name',\n IDField: 'ID',\n IconField: 'Icon',\n OrderBy: 'Name'\n };\n\n public treeLeafConfig: TreeLeafConfig = {\n EntityName: 'MJ: Entities',\n ParentField: '', // Using JunctionConfig for M2M relationship\n DisplayField: 'Name',\n IDField: 'ID',\n IconField: 'Icon',\n JunctionConfig: {\n EntityName: 'MJ: Application Entities',\n BranchForeignKey: 'ApplicationID',\n LeafForeignKey: 'EntityID'\n },\n OrderBy: 'Name'\n };\n\n @ViewChild('entityTree') entityTree?: TreeComponent;\n\n /** Selected entity ID for tree highlighting */\n public selectedEntityIds: string[] = [];\n\n /** Search term for filtering the entity tree */\n public entitySearchTerm = '';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedEntityName']) {\n this.updateSelectedEntityKey();\n }\n if (changes['applicationIdFilter']) {\n this.updateTreeBranchFilter();\n }\n if (changes['recentItems']) {\n this.timestampLabelCache.clear();\n }\n }\n\n ngOnInit(): void {\n this.timestampRefreshHandle = setInterval(() => {\n if (this.timestampLabelCache.size === 0) return;\n this.timestampLabelCache.clear();\n this.cdr.markForCheck();\n }, 30000);\n }\n\n ngOnDestroy(): void {\n if (this.timestampRefreshHandle !== undefined) {\n clearInterval(this.timestampRefreshHandle);\n this.timestampRefreshHandle = undefined;\n }\n }\n\n /**\n * Update the selected entity IDs for tree highlighting when selected entity changes\n */\n private updateSelectedEntityKey(): void {\n if (this.selectedEntityName) {\n const entity = this.metadata.Entities.find(e => e.Name === this.selectedEntityName);\n if (entity) {\n this.selectedEntityIds = [entity.ID];\n return;\n }\n }\n this.selectedEntityIds = [];\n }\n\n /**\n * Update the tree's branch filter when application filter changes\n */\n private updateTreeBranchFilter(): void {\n if (this.applicationIdFilter) {\n this.treeBranchConfig = {\n ...this.treeBranchConfig,\n ExtraFilter: `ID='${this.applicationIdFilter}'`\n };\n } else {\n this.treeBranchConfig = {\n ...this.treeBranchConfig,\n ExtraFilter: undefined\n };\n }\n }\n\n /**\n * Filter the entity tree when search term changes\n */\n onEntitySearchChanged(): void {\n if (this.entityTree) {\n this.entityTree.FilterNodes(this.entitySearchTerm, {\n searchBranches: true,\n searchLeaves: true,\n caseSensitive: false\n });\n }\n }\n\n /**\n * Clear the entity search\n */\n clearEntitySearch(): void {\n this.entitySearchTerm = '';\n this.onEntitySearchChanged();\n }\n\n /**\n * Handle tree selection change - map TreeNode to EntityInfo and emit\n */\n onTreeEntitySelected(nodes: TreeNode[]): void {\n if (!nodes || nodes.length === 0) return;\n const node = nodes[0];\n if (node.Type !== 'leaf') return;\n\n // Find the EntityInfo by ID from the node\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, node.ID));\n if (entity) {\n this.entitySelected.emit(entity);\n }\n }\n\n /**\n * Get recent items filtered by allowed entities (if filter is active)\n */\n get filteredRecentItems(): RecentItem[] {\n if (!this.allowedEntityNames) {\n return this.recentItems;\n }\n return this.recentItems.filter(r => this.allowedEntityNames!.has(r.entityName));\n }\n\n /**\n * Get favorites filtered to records only (respecting entity filter)\n */\n get favoriteRecords(): FavoriteItem[] {\n const records = this.favorites.filter(f => f.type === 'record');\n if (!this.allowedEntityNames) {\n return records;\n }\n return records.filter(f => f.entityName && this.allowedEntityNames!.has(f.entityName));\n }\n\n /**\n * Get favorites filtered to entities only (respecting entity filter)\n */\n get favoriteEntities(): FavoriteItem[] {\n const entities = this.favorites.filter(f => f.type === 'entity');\n if (!this.allowedEntityNames) {\n return entities;\n }\n return entities.filter(f => f.entityName && this.allowedEntityNames!.has(f.entityName));\n }\n\n /**\n * Handle entity click\n */\n onEntityClick(entity: EntityInfo): void {\n this.entitySelected.emit(entity);\n }\n\n /**\n * Handle favorite click - navigates to entity and selects record within Data Explorer\n */\n onFavoriteClick(favorite: FavoriteItem): void {\n if (favorite.type === 'entity' && favorite.entityName) {\n const entity = this.entities.find(e => e.Name === favorite.entityName);\n if (entity) {\n this.entitySelected.emit(entity);\n }\n } else if (favorite.type === 'record' && favorite.entityName && favorite.compositeKeyString) {\n // Extract record ID from the composite key string\n // Format is \"FieldName|Value\" or \"FieldName|Value||FieldName2|Value2\"\n const compositeKey = new CompositeKey();\n compositeKey.LoadFromConcatenatedString(favorite.compositeKeyString);\n const recordId = compositeKey.KeyValuePairs[0]?.Value?.toString() || '';\n\n // Navigate to entity and select record within Data Explorer (not full tab)\n this.selectRecord.emit({\n entityName: favorite.entityName,\n recordId\n });\n }\n }\n\n /**\n * Handle recent item click - navigates to entity and selects record within Data Explorer\n */\n onRecentClick(item: RecentItem): void {\n // Extract record ID from the composite key string\n const compositeKey = new CompositeKey();\n compositeKey.LoadFromConcatenatedString(item.compositeKeyString);\n const recordId = compositeKey.KeyValuePairs[0]?.Value?.toString() || '';\n\n // Navigate to entity and select record within Data Explorer (not full tab)\n this.selectRecord.emit({\n entityName: item.entityName,\n recordId\n });\n }\n\n /**\n * Handle section header click\n */\n onSectionToggle(section: 'favorites' | 'recent' | 'entities' | 'views'): void {\n this.sectionToggled.emit(section);\n }\n\n /**\n * Handle collapse toggle\n */\n onToggleCollapse(): void {\n this.toggleCollapse.emit();\n }\n\n /**\n * Handle collapsed icon click - expands panel and focuses section\n */\n onCollapsedIconClick(section: 'favorites' | 'recent' | 'entities'): void {\n this.expandAndFocus.emit(section);\n }\n\n /**\n * Check if entity is selected\n */\n isEntitySelected(entity: EntityInfo): boolean {\n return entity.Name === this.selectedEntityName;\n }\n\n /**\n * Get icon for entity\n */\n getEntityIcon(entity: EntityInfo): string {\n const icon = entity.Icon;\n if (!icon) {\n return 'fa-solid fa-table';\n }\n // If icon already has fa- prefix, use it as-is\n if (icon.startsWith('fa-') || icon.startsWith('fa ')) {\n // Ensure it has a style prefix (fa-solid, fa-regular, etc.)\n if (icon.startsWith('fa-solid') || icon.startsWith('fa-regular') ||\n icon.startsWith('fa-light') || icon.startsWith('fa-brands') ||\n icon.startsWith('fa ')) {\n return icon;\n }\n // It's just \"fa-something\", add fa-solid prefix\n return `fa-solid ${icon}`;\n }\n // Check if it's just an icon name like \"table\" or \"users\"\n return `fa-solid fa-${icon}`;\n }\n\n /**\n * Cache of formatted relative-time labels keyed by timestamp epoch ms.\n * Stable within a change-detection cycle (avoids NG0100 from `now`-dependent\n * values shifting between dirty-check and verify passes). Cleared on a coarse\n * interval so the displayed label still updates over time.\n */\n private timestampLabelCache = new Map<number, string>();\n private timestampRefreshHandle?: ReturnType<typeof setInterval>;\n\n /**\n * Format recent item timestamp. Cached per-timestamp so the same value is\n * returned across change-detection passes within a single tick — recomputed\n * on a 30-second interval (see `ngOnInit`).\n */\n formatTimestamp(timestamp: Date): string {\n const epoch = new Date(timestamp).getTime();\n const cached = this.timestampLabelCache.get(epoch);\n if (cached !== undefined) {\n return cached;\n }\n const label = this.computeRelativeLabel(epoch);\n this.timestampLabelCache.set(epoch, label);\n return label;\n }\n\n private computeRelativeLabel(epoch: number): string {\n const diffMs = Date.now() - epoch;\n const diffMins = Math.floor(diffMs / 60000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 7) return `${diffDays}d ago`;\n\n return new Date(epoch).toLocaleDateString();\n }\n\n /**\n * Get icon for a recent item based on its entity\n */\n getRecentItemIcon(item: RecentItem): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === item.entityName);\n if (entityInfo) {\n return this.getEntityIcon(entityInfo);\n }\n return 'fa-solid fa-file-alt';\n }\n\n /**\n * Get icon for a favorite item based on its type and entity\n */\n getFavoriteIcon(favorite: FavoriteItem): string {\n if (favorite.type === 'view') {\n return 'fa-solid fa-filter';\n }\n\n // For entity and record types, look up the entity icon\n if (favorite.entityName) {\n const entityInfo = this.metadata.Entities.find(e => e.Name === favorite.entityName);\n if (entityInfo) {\n return this.getEntityIcon(entityInfo);\n }\n }\n\n // Fallback icons\n if (favorite.type === 'entity') {\n return 'fa-solid fa-table';\n }\n return 'fa-solid fa-file-alt';\n }\n}\n","<div class=\"navigation-panel-container\" [class.collapsed]=\"collapsed\">\n <!-- Collapse Toggle -->\n <button class=\"collapse-toggle\" (click)=\"onToggleCollapse()\" [title]=\"collapsed ? 'Expand' : 'Collapse'\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"collapsed\" [class.fa-chevron-left]=\"!collapsed\"></i>\n </button>\n\n @if (!collapsed) {\n <div class=\"panel-content\">\n <!-- Favorites Section -->\n <mj-accordion-panel class=\"nav-accordion\" Size=\"sm\"\n [Expanded]=\"favoritesSectionExpanded\" (ExpandedChange)=\"onSectionToggle('favorites')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-star section-icon\"></i>\n <span class=\"section-title\">Favorites</span>\n @if (favoriteRecords.length + favoriteEntities.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ favoriteRecords.length + favoriteEntities.length }}</span>\n }\n </ng-template>\n\n @if (favoriteRecords.length + favoriteEntities.length === 0) {\n <mj-empty-state class=\"empty-section\" Size=\"compact\"\n Icon=\"\" Title=\"No favorites yet\" />\n } @else {\n <div class=\"nav-scroll\">\n @for (favorite of favoriteEntities; track favorite.entityName) {\n <div class=\"nav-item\" (click)=\"onFavoriteClick(favorite)\" [title]=\"favorite.entityName ? favorite.entityName + ' - ' + favorite.displayName : favorite.displayName\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n <span class=\"nav-item-label\">{{ favorite.displayName }}</span>\n </div>\n }\n @for (favorite of favoriteRecords; track favorite.entityName + '|' + favorite.compositeKeyString) {\n <div class=\"nav-item\" (click)=\"onFavoriteClick(favorite)\" [title]=\"favorite.entityName ? favorite.entityName + ' - ' + favorite.displayName : favorite.displayName\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n <span class=\"nav-item-label\">{{ favorite.displayName }}</span>\n </div>\n }\n </div>\n }\n </mj-accordion-panel>\n\n <!-- Recent Items Section -->\n <mj-accordion-panel class=\"nav-accordion\" Size=\"sm\"\n [Expanded]=\"recentSectionExpanded\" (ExpandedChange)=\"onSectionToggle('recent')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-clock section-icon\"></i>\n <span class=\"section-title\">Recent</span>\n @if (filteredRecentItems.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ filteredRecentItems.length }}</span>\n }\n </ng-template>\n\n @if (filteredRecentItems.length === 0) {\n <mj-empty-state class=\"empty-section\" Size=\"compact\"\n Icon=\"\" Title=\"No recent items\" />\n } @else {\n <div class=\"nav-scroll\">\n @for (item of filteredRecentItems; track item.entityName + '|' + item.compositeKeyString) {\n <div class=\"nav-item\" (click)=\"onRecentClick(item)\" [title]=\"item.entityName + ' - ' + item.displayName\">\n <i [class]=\"getRecentItemIcon(item)\"></i>\n <div class=\"nav-item-content\">\n <span class=\"nav-item-label\">{{ item.displayName }}</span>\n <span class=\"nav-item-meta\">{{ formatTimestamp(item.timestamp) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </mj-accordion-panel>\n\n <!-- Entities Section (ng-tree) — Fill so the tree owns the leftover rail height -->\n <mj-accordion-panel class=\"nav-accordion nav-accordion--entities\" Size=\"sm\" [Fill]=\"true\" [FlushBody]=\"true\"\n [Expanded]=\"entitiesSectionExpanded\" (ExpandedChange)=\"onSectionToggle('entities')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-database section-icon\"></i>\n <span class=\"section-title\">Entities</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ entities.length }}</span>\n </ng-template>\n\n <div class=\"entity-tree-container\">\n <!-- Entity Search -->\n <div class=\"entity-search\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search entities...\"\n [(ngModel)]=\"entitySearchTerm\"\n (ngModelChange)=\"onEntitySearchChanged()\"\n />\n @if (entitySearchTerm) {\n <button class=\"clear-search\" (click)=\"clearEntitySearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n\n <!-- Entity Tree -->\n <mj-tree\n #entityTree\n [BranchConfig]=\"treeBranchConfig\"\n [LeafConfig]=\"treeLeafConfig\"\n [SelectionMode]=\"'single'\"\n [SelectableTypes]=\"'leaf'\"\n [SelectedIDs]=\"selectedEntityIds\"\n [ShowIcons]=\"true\"\n [ShowExpandCollapseAll]=\"false\"\n [AnimateExpandCollapse]=\"true\"\n [EmptyMessage]=\"entitySearchTerm ? 'No matches for: ' + entitySearchTerm : 'No entities available'\"\n [EmptyIcon]=\"'fa-solid fa-database'\"\n (SelectionChange)=\"onTreeEntitySelected($event)\">\n </mj-tree>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <!-- Collapsed State - Show Icons Only -->\n <div class=\"collapsed-icons\">\n <button class=\"icon-btn\" title=\"Favorites\" (click)=\"onCollapsedIconClick('favorites')\">\n <i class=\"fa-solid fa-star\"></i>\n @if (favoriteRecords.length + favoriteEntities.length > 0) {\n <span class=\"collapsed-badge\">{{ favoriteRecords.length + favoriteEntities.length }}</span>\n }\n </button>\n <button class=\"icon-btn\" title=\"Recent\" (click)=\"onCollapsedIconClick('recent')\">\n <i class=\"fa-solid fa-clock\"></i>\n @if (filteredRecentItems.length > 0) {\n <span class=\"collapsed-badge\">{{ filteredRecentItems.length }}</span>\n }\n </button>\n <button class=\"icon-btn\" title=\"Entities\" (click)=\"onCollapsedIconClick('entities')\">\n <i class=\"fa-solid fa-database\"></i>\n <span class=\"collapsed-badge\">{{ entities.length }}</span>\n </button>\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"navigation-panel.component.js","sourceRoot":"","sources":["../../../../src/DataExplorer/components/navigation-panel/navigation-panel.component.ts","../../../../src/DataExplorer/components/navigation-panel/navigation-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, Input, Output, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { EntityInfo, CompositeKey } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { TreeBranchConfig, TreeLeafConfig, TreeNode, TreeComponent } from '@memberjunction/ng-trees';\nimport { RecentItem, FavoriteItem, AppEntityGroup } from '../../models/explorer-state.interface';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n/**\n * Event emitted when a record should be opened in a full tab\n */\nexport interface OpenRecordEvent {\n entityName: string;\n compositeKey: CompositeKey;\n}\n\n/**\n * Event emitted when a record should be selected within Data Explorer (not full tab)\n */\nexport interface SelectRecordEvent {\n entityName: string;\n recordId: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-explorer-navigation-panel',\n templateUrl: './navigation-panel.component.html',\n styleUrls: ['./navigation-panel.component.css']\n})\nexport class NavigationPanelComponent extends BaseAngularComponent implements OnChanges, OnInit, OnDestroy {\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n @Input() entities: EntityInfo[] = [];\n @Input() selectedEntityName: string | null = null;\n @Input() favorites: FavoriteItem[] = [];\n @Input() recentItems: RecentItem[] = [];\n @Input() collapsed = false;\n /**\n * Optional set of allowed entity names for filtering favorites/recents.\n * If provided, only items matching these entities will be shown.\n */\n @Input() allowedEntityNames: Set<string> | null = null;\n /** Application-based entity groups from the parent dashboard */\n @Input() appEntityGroups: AppEntityGroup[] = [];\n /** Optional application ID filter for the tree */\n @Input() applicationIdFilter: string | null = null;\n\n // Section expansion states\n @Input() favoritesSectionExpanded = true;\n @Input() recentSectionExpanded = true;\n @Input() entitiesSectionExpanded = true;\n @Input() viewsSectionExpanded = true;\n\n @Output() entitySelected = new EventEmitter<EntityInfo>();\n @Output() toggleCollapse = new EventEmitter<void>();\n @Output() sectionToggled = new EventEmitter<'favorites' | 'recent' | 'entities' | 'views'>();\n @Output() openRecord = new EventEmitter<OpenRecordEvent>();\n /** Emitted when a record should be selected within Data Explorer (navigate to entity + select record) */\n @Output() selectRecord = new EventEmitter<SelectRecordEvent>();\n /** Emitted when a collapsed icon is clicked - expands panel and focuses section */\n @Output() expandAndFocus = new EventEmitter<'favorites' | 'recent' | 'entities'>();\n /** Emitted when a nav panel app group is toggled */\n @Output() appGroupToggled = new EventEmitter<string>();\n\n private get metadata() { return this.ProviderToUse; }\n\n // Tree configuration for entity list\n public treeBranchConfig: TreeBranchConfig = {\n EntityName: 'MJ: Applications',\n DisplayField: 'Name',\n IDField: 'ID',\n IconField: 'Icon',\n OrderBy: 'Name'\n };\n\n public treeLeafConfig: TreeLeafConfig = {\n EntityName: 'MJ: Entities',\n ParentField: '', // Using JunctionConfig for M2M relationship\n DisplayField: 'DisplayName',\n IDField: 'ID',\n IconField: 'Icon',\n JunctionConfig: {\n EntityName: 'MJ: Application Entities',\n BranchForeignKey: 'ApplicationID',\n LeafForeignKey: 'EntityID'\n },\n OrderBy: 'DisplayName, Name'\n };\n\n @ViewChild('entityTree') entityTree?: TreeComponent;\n\n /** Selected entity ID for tree highlighting */\n public selectedEntityIds: string[] = [];\n\n /** Search term for filtering the entity tree */\n public entitySearchTerm = '';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selectedEntityName']) {\n this.updateSelectedEntityKey();\n }\n if (changes['applicationIdFilter']) {\n this.updateTreeBranchFilter();\n }\n if (changes['recentItems']) {\n this.timestampLabelCache.clear();\n }\n }\n\n ngOnInit(): void {\n this.timestampRefreshHandle = setInterval(() => {\n if (this.timestampLabelCache.size === 0) return;\n this.timestampLabelCache.clear();\n this.cdr.markForCheck();\n }, 30000);\n }\n\n ngOnDestroy(): void {\n if (this.timestampRefreshHandle !== undefined) {\n clearInterval(this.timestampRefreshHandle);\n this.timestampRefreshHandle = undefined;\n }\n }\n\n /**\n * Update the selected entity IDs for tree highlighting when selected entity changes\n */\n private updateSelectedEntityKey(): void {\n if (this.selectedEntityName) {\n const entity = this.metadata.Entities.find(e => e.Name === this.selectedEntityName);\n if (entity) {\n this.selectedEntityIds = [entity.ID];\n return;\n }\n }\n this.selectedEntityIds = [];\n }\n\n /**\n * Update the tree's branch filter when application filter changes\n */\n private updateTreeBranchFilter(): void {\n if (this.applicationIdFilter) {\n this.treeBranchConfig = {\n ...this.treeBranchConfig,\n ExtraFilter: `ID='${this.applicationIdFilter}'`\n };\n } else {\n this.treeBranchConfig = {\n ...this.treeBranchConfig,\n ExtraFilter: undefined\n };\n }\n }\n\n /**\n * Filter the entity tree when search term changes\n */\n onEntitySearchChanged(): void {\n if (this.entityTree) {\n this.entityTree.FilterNodes(this.entitySearchTerm, {\n searchBranches: true,\n searchLeaves: true,\n caseSensitive: false\n });\n }\n }\n\n /**\n * Clear the entity search\n */\n clearEntitySearch(): void {\n this.entitySearchTerm = '';\n this.onEntitySearchChanged();\n }\n\n /**\n * Handle tree selection change - map TreeNode to EntityInfo and emit\n */\n onTreeEntitySelected(nodes: TreeNode[]): void {\n if (!nodes || nodes.length === 0) return;\n const node = nodes[0];\n if (node.Type !== 'leaf') return;\n\n // Find the EntityInfo by ID from the node\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, node.ID));\n if (entity) {\n this.entitySelected.emit(entity);\n }\n }\n\n /**\n * Get recent items filtered by allowed entities (if filter is active)\n */\n get filteredRecentItems(): RecentItem[] {\n if (!this.allowedEntityNames) {\n return this.recentItems;\n }\n return this.recentItems.filter(r => this.allowedEntityNames!.has(r.entityName));\n }\n\n /**\n * Get favorites filtered to records only (respecting entity filter)\n */\n get favoriteRecords(): FavoriteItem[] {\n const records = this.favorites.filter(f => f.type === 'record');\n if (!this.allowedEntityNames) {\n return records;\n }\n return records.filter(f => f.entityName && this.allowedEntityNames!.has(f.entityName));\n }\n\n /**\n * Get favorites filtered to entities only (respecting entity filter)\n */\n get favoriteEntities(): FavoriteItem[] {\n const entities = this.favorites.filter(f => f.type === 'entity');\n if (!this.allowedEntityNames) {\n return entities;\n }\n return entities.filter(f => f.entityName && this.allowedEntityNames!.has(f.entityName));\n }\n\n /**\n * Handle entity click\n */\n onEntityClick(entity: EntityInfo): void {\n this.entitySelected.emit(entity);\n }\n\n /**\n * Handle favorite click - navigates to entity and selects record within Data Explorer\n */\n onFavoriteClick(favorite: FavoriteItem): void {\n if (favorite.type === 'entity' && favorite.entityName) {\n const entity = this.entities.find(e => e.Name === favorite.entityName);\n if (entity) {\n this.entitySelected.emit(entity);\n }\n } else if (favorite.type === 'record' && favorite.entityName && favorite.compositeKeyString) {\n // Extract record ID from the composite key string\n // Format is \"FieldName|Value\" or \"FieldName|Value||FieldName2|Value2\"\n const compositeKey = new CompositeKey();\n compositeKey.LoadFromConcatenatedString(favorite.compositeKeyString);\n const recordId = compositeKey.KeyValuePairs[0]?.Value?.toString() || '';\n\n // Navigate to entity and select record within Data Explorer (not full tab)\n this.selectRecord.emit({\n entityName: favorite.entityName,\n recordId\n });\n }\n }\n\n /**\n * Handle recent item click - navigates to entity and selects record within Data Explorer\n */\n onRecentClick(item: RecentItem): void {\n // Extract record ID from the composite key string\n const compositeKey = new CompositeKey();\n compositeKey.LoadFromConcatenatedString(item.compositeKeyString);\n const recordId = compositeKey.KeyValuePairs[0]?.Value?.toString() || '';\n\n // Navigate to entity and select record within Data Explorer (not full tab)\n this.selectRecord.emit({\n entityName: item.entityName,\n recordId\n });\n }\n\n /**\n * Handle section header click\n */\n onSectionToggle(section: 'favorites' | 'recent' | 'entities' | 'views'): void {\n this.sectionToggled.emit(section);\n }\n\n /**\n * Handle collapse toggle\n */\n onToggleCollapse(): void {\n this.toggleCollapse.emit();\n }\n\n /**\n * Handle collapsed icon click - expands panel and focuses section\n */\n onCollapsedIconClick(section: 'favorites' | 'recent' | 'entities'): void {\n this.expandAndFocus.emit(section);\n }\n\n /**\n * Check if entity is selected\n */\n isEntitySelected(entity: EntityInfo): boolean {\n return entity.Name === this.selectedEntityName;\n }\n\n /**\n * Get icon for entity\n */\n getEntityIcon(entity: EntityInfo): string {\n const icon = entity.Icon;\n if (!icon) {\n return 'fa-solid fa-table';\n }\n // If icon already has fa- prefix, use it as-is\n if (icon.startsWith('fa-') || icon.startsWith('fa ')) {\n // Ensure it has a style prefix (fa-solid, fa-regular, etc.)\n if (icon.startsWith('fa-solid') || icon.startsWith('fa-regular') ||\n icon.startsWith('fa-light') || icon.startsWith('fa-brands') ||\n icon.startsWith('fa ')) {\n return icon;\n }\n // It's just \"fa-something\", add fa-solid prefix\n return `fa-solid ${icon}`;\n }\n // Check if it's just an icon name like \"table\" or \"users\"\n return `fa-solid fa-${icon}`;\n }\n\n /**\n * Cache of formatted relative-time labels keyed by timestamp epoch ms.\n * Stable within a change-detection cycle (avoids NG0100 from `now`-dependent\n * values shifting between dirty-check and verify passes). Cleared on a coarse\n * interval so the displayed label still updates over time.\n */\n private timestampLabelCache = new Map<number, string>();\n private timestampRefreshHandle?: ReturnType<typeof setInterval>;\n\n /**\n * Format recent item timestamp. Cached per-timestamp so the same value is\n * returned across change-detection passes within a single tick — recomputed\n * on a 30-second interval (see `ngOnInit`).\n */\n formatTimestamp(timestamp: Date): string {\n const epoch = new Date(timestamp).getTime();\n const cached = this.timestampLabelCache.get(epoch);\n if (cached !== undefined) {\n return cached;\n }\n const label = this.computeRelativeLabel(epoch);\n this.timestampLabelCache.set(epoch, label);\n return label;\n }\n\n private computeRelativeLabel(epoch: number): string {\n const diffMs = Date.now() - epoch;\n const diffMins = Math.floor(diffMs / 60000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 7) return `${diffDays}d ago`;\n\n return new Date(epoch).toLocaleDateString();\n }\n\n /**\n * Get icon for a recent item based on its entity\n */\n getRecentItemIcon(item: RecentItem): string {\n const entityInfo = this.metadata.Entities.find(e => e.Name === item.entityName);\n if (entityInfo) {\n return this.getEntityIcon(entityInfo);\n }\n return 'fa-solid fa-file-alt';\n }\n\n /**\n * Get icon for a favorite item based on its type and entity\n */\n getFavoriteIcon(favorite: FavoriteItem): string {\n if (favorite.type === 'view') {\n return 'fa-solid fa-filter';\n }\n\n // For entity and record types, look up the entity icon\n if (favorite.entityName) {\n const entityInfo = this.metadata.Entities.find(e => e.Name === favorite.entityName);\n if (entityInfo) {\n return this.getEntityIcon(entityInfo);\n }\n }\n\n // Fallback icons\n if (favorite.type === 'entity') {\n return 'fa-solid fa-table';\n }\n return 'fa-solid fa-file-alt';\n }\n\n /**\n * Get user-friendly display name for an entity.\n */\n getEntityDisplayName(entityName?: string): string {\n if (!entityName) {\n return '';\n }\n const entityInfo = this.metadata.Entities.find(e => e.Name.toLowerCase() === entityName.toLowerCase());\n return entityInfo?.DisplayNameOrName || entityName;\n }\n}\n","<div class=\"navigation-panel-container\" [class.collapsed]=\"collapsed\">\n <!-- Collapse Toggle -->\n <button class=\"collapse-toggle\" (click)=\"onToggleCollapse()\" [title]=\"collapsed ? 'Expand' : 'Collapse'\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"collapsed\" [class.fa-chevron-left]=\"!collapsed\"></i>\n </button>\n\n @if (!collapsed) {\n <div class=\"panel-content\">\n <!-- Favorites Section -->\n <mj-accordion-panel class=\"nav-accordion\" Size=\"sm\"\n [Expanded]=\"favoritesSectionExpanded\" (ExpandedChange)=\"onSectionToggle('favorites')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-star section-icon\"></i>\n <span class=\"section-title\">Favorites</span>\n @if (favoriteRecords.length + favoriteEntities.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ favoriteRecords.length + favoriteEntities.length }}</span>\n }\n </ng-template>\n\n @if (favoriteRecords.length + favoriteEntities.length === 0) {\n <mj-empty-state class=\"empty-section\" Size=\"compact\"\n Icon=\"\" Title=\"No favorites yet\" />\n } @else {\n <div class=\"nav-scroll\">\n @for (favorite of favoriteEntities; track favorite.entityName) {\n <div class=\"nav-item\" (click)=\"onFavoriteClick(favorite)\" [title]=\"favorite.entityName ? getEntityDisplayName(favorite.entityName) + ' - ' + favorite.displayName : favorite.displayName\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n <span class=\"nav-item-label\">{{ favorite.displayName }}</span>\n </div>\n }\n @for (favorite of favoriteRecords; track favorite.entityName + '|' + favorite.compositeKeyString) {\n <div class=\"nav-item\" (click)=\"onFavoriteClick(favorite)\" [title]=\"favorite.entityName ? getEntityDisplayName(favorite.entityName) + ' - ' + favorite.displayName : favorite.displayName\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n <span class=\"nav-item-label\">{{ favorite.displayName }}</span>\n </div>\n }\n </div>\n }\n </mj-accordion-panel>\n\n <!-- Recent Items Section -->\n <mj-accordion-panel class=\"nav-accordion\" Size=\"sm\"\n [Expanded]=\"recentSectionExpanded\" (ExpandedChange)=\"onSectionToggle('recent')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-clock section-icon\"></i>\n <span class=\"section-title\">Recent</span>\n @if (filteredRecentItems.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ filteredRecentItems.length }}</span>\n }\n </ng-template>\n\n @if (filteredRecentItems.length === 0) {\n <mj-empty-state class=\"empty-section\" Size=\"compact\"\n Icon=\"\" Title=\"No recent items\" />\n } @else {\n <div class=\"nav-scroll\">\n @for (item of filteredRecentItems; track item.entityName + '|' + item.compositeKeyString) {\n <div class=\"nav-item\" (click)=\"onRecentClick(item)\" [title]=\"getEntityDisplayName(item.entityName) + ' - ' + item.displayName\">\n <i [class]=\"getRecentItemIcon(item)\"></i>\n <div class=\"nav-item-content\">\n <span class=\"nav-item-label\">{{ item.displayName }}</span>\n <span class=\"nav-item-meta\">{{ formatTimestamp(item.timestamp) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </mj-accordion-panel>\n\n <!-- Entities Section (ng-tree) — Fill so the tree owns the leftover rail height -->\n <mj-accordion-panel class=\"nav-accordion nav-accordion--entities\" Size=\"sm\" [Fill]=\"true\" [FlushBody]=\"true\"\n [Expanded]=\"entitiesSectionExpanded\" (ExpandedChange)=\"onSectionToggle('entities')\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-database section-icon\"></i>\n <span class=\"section-title\">Entities</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ entities.length }}</span>\n </ng-template>\n\n <div class=\"entity-tree-container\">\n <!-- Entity Search -->\n <div class=\"entity-search\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search entities...\"\n [(ngModel)]=\"entitySearchTerm\"\n (ngModelChange)=\"onEntitySearchChanged()\"\n />\n @if (entitySearchTerm) {\n <button class=\"clear-search\" (click)=\"clearEntitySearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n\n <!-- Entity Tree -->\n <mj-tree\n #entityTree\n [BranchConfig]=\"treeBranchConfig\"\n [LeafConfig]=\"treeLeafConfig\"\n [SelectionMode]=\"'single'\"\n [SelectableTypes]=\"'leaf'\"\n [SelectedIDs]=\"selectedEntityIds\"\n [ShowIcons]=\"true\"\n [ShowExpandCollapseAll]=\"false\"\n [AnimateExpandCollapse]=\"true\"\n [EmptyMessage]=\"entitySearchTerm ? 'No matches for: ' + entitySearchTerm : 'No entities available'\"\n [EmptyIcon]=\"'fa-solid fa-database'\"\n (SelectionChange)=\"onTreeEntitySelected($event)\">\n </mj-tree>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <!-- Collapsed State - Show Icons Only -->\n <div class=\"collapsed-icons\">\n <button class=\"icon-btn\" title=\"Favorites\" (click)=\"onCollapsedIconClick('favorites')\">\n <i class=\"fa-solid fa-star\"></i>\n @if (favoriteRecords.length + favoriteEntities.length > 0) {\n <span class=\"collapsed-badge\">{{ favoriteRecords.length + favoriteEntities.length }}</span>\n }\n </button>\n <button class=\"icon-btn\" title=\"Recent\" (click)=\"onCollapsedIconClick('recent')\">\n <i class=\"fa-solid fa-clock\"></i>\n @if (filteredRecentItems.length > 0) {\n <span class=\"collapsed-badge\">{{ filteredRecentItems.length }}</span>\n }\n </button>\n <button class=\"icon-btn\" title=\"Entities\" (click)=\"onCollapsedIconClick('entities')\">\n <i class=\"fa-solid fa-database\"></i>\n <span class=\"collapsed-badge\">{{ entities.length }}</span>\n </button>\n </div>\n }\n</div>\n"]}
@@ -618,6 +618,10 @@ export declare class DataExplorerDashboardComponent extends BaseDashboard implem
618
618
  * Emit the current display name based on selected entity/record.
619
619
  */
620
620
  private emitDisplayName;
621
+ /**
622
+ * Get user-friendly display name for an entity.
623
+ */
624
+ getEntityDisplayName(entityName?: string): string;
621
625
  /**
622
626
  * Toggle entity favorite status
623
627
  */
@@ -1 +1 @@
1
- {"version":3,"file":"data-explorer-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/DataExplorer/data-explorer-dashboard.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-explorer-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/DataExplorer/data-explorer-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAiB,YAAY,EAAE,SAAS,EAAE,aAAa,EAAgB,UAAU,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAGnM,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAqB,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAgB,UAAU,EAA+C,MAAM,sBAAsB,CAAC;AAE7G,OAAO,EAA6B,YAAY,EAAkB,MAAM,+BAA+B,CAAC;AACxG,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAG5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAkB,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAwB,MAAM,mCAAmC,CAAC;AAC1M,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0DAA0D,CAAC;;AAY9G;;;;;;GAMG;AACH,qBAkBa,8BAA+B,SAAQ,aAAc,YAAW,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa;IA6U7G,YAAY,EAAE,oBAAoB;IACzC,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,MAAM;IA/UhB,UAAmB,QAAQ,gBAAuB;IAClD,OAAO,CAAC,QAAQ,CAAsB;IAEtC,2DAA2D;IACjC,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IAEnF,iFAAiF;IAC9C,gBAAgB,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAExF;;;OAGG;IACM,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAExD;;;OAGG;IACM,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAEtD;;;OAGG;IACM,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C;;;OAGG;IACM,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C;;;;OAIG;IACM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAEzD;;OAEG;IACO,kBAAkB,uBAA8B;IAGnD,KAAK,EAAE,iBAAiB,CAAC;IAGhC,OAAO,CAAC,WAAW,CAAoB;IAEhC,QAAQ,EAAE,UAAU,EAAE,CAAM;IAE5B,eAAe,EAAE,cAAc,EAAE,CAAM;IAE9C,OAAO,CAAC,oBAAoB,CAA0B;IAC/C,cAAc,EAAE,UAAU,GAAG,IAAI,CAAQ;IAGzC,gBAAgB,SAAK;IACrB,mBAAmB,SAAK;IAGxB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAQ;IAEtD,iBAAiB,EAAE,UAAU,GAAG,IAAI,CAAQ;IAEnD,OAAO,CAAC,aAAa,CAAiC;IAG/C,kBAAkB,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IAG3D,cAAc,EAAE,MAAM,CAAM;IAE5B,mBAAmB,EAAE,MAAM,CAAM;IACxC,OAAO,CAAC,YAAY,CAAyB;IAGtC,gBAAgB,EAAE,MAAM,CAAM;IAG9B,WAAW,EAAE,cAAc,EAAE,CAAM;IAGnC,iBAAiB,EAAE,OAAO,CAAQ;IAGlC,aAAa,EAAE,kBAAkB,EAAE,CAAM;IAGhD,OAAO,CAAC,sBAAsB,CAA+C;IAGtE,eAAe,EAAE,cAAc,EAAE,CAAM;IAGvC,sBAAsB,EAAE,OAAO,CAAQ;IAGvC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjD,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjE;;;OAGG;IACH,IAAI,uBAAuB,IAAI,cAAc,EAAE,CAO9C;IAED;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;;OAGG;IACH,IAAI,oBAAoB,IAAI,UAAU,EAAE,CAiBvC;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,MAAM,CAKhC;IAED,uEAAuE;IACvE,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,UAAU,EAAE,CAKjC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAInC;IAED;;OAEG;IACH,IAAI,wBAAwB,IAAI,kBAAkB,EAAE,CAEnD;IAED;;OAEG;IACH,IAAI,yBAAyB,IAAI,UAAU,EAAE,CAE5C;IAED;;OAEG;IACH,IAAI,0BAA0B,IAAI,cAAc,EAAE,CAEjD;IAED;;OAEG;IACI,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/D;;;OAGG;IACH,IAAI,0BAA0B,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAwBxG;IAED;;;OAGG;IACH,IAAI,6BAA6B,IAAI,OAAO,CAE3C;IAED;;OAEG;IACH,IAAI,qBAAqB,IAAI,kBAAkB,EAAE,CAKhD;IAED;;OAEG;IACI,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIlE;;;OAGG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED;;;;OAIG;IACI,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAQ9C;gBAGO,YAAY,EAAE,oBAAoB,EACjC,GAAG,EAAE,iBAAiB,EACtB,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,MAAM;IAMlB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAuI/B;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IASvB;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;;;OAKG;IACH,OAAO,CAAC,sCAAsC;IAe9C;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;;;;;OAMG;IACH,OAAO,CAAC,mCAAmC;IAO3C;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB,CAAkC;IAEhE;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,qBAAqB;IAY7B,+DAA+D;IAC/D,OAAO,CAAC,cAAc;IAStB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA+C/B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA4H5B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAK3B,mDAAmD;IACnD,OAAO,CAAC,kBAAkB;IAU1B,qDAAqD;IACrD,OAAO,CAAC,iBAAiB;IAQzB,uDAAuD;IACvD,OAAO,CAAC,eAAe;IASvB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA0BtB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAyBnC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAoB5B,2DAA2D;IAC3D,OAAO,CAAC,sBAAsB;IAgB9B,sDAAsD;IACtD,OAAO,CAAC,mBAAmB;IAQ3B,kEAAkE;IAClE,OAAO,CAAC,qBAAqB;IAW7B,+CAA+C;IAC/C,OAAO,CAAC,kBAAkB;IAW1B,2EAA2E;IAC3E,OAAO,CAAC,wBAAwB;IAYhC,mEAAmE;YACrD,wBAAwB;IAuBtC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAsB/B,0DAA0D;IAC1D,OAAO,CAAC,kBAAkB;IAI1B,kFAAkF;IAClF,OAAO,CAAC,uBAAuB;IAQ/B;;;OAGG;YACW,cAAc;IAuB5B,kFAAkF;IAClF,OAAO,CAAC,qBAAqB;IAW7B,sEAAsE;IACtE,OAAO,CAAC,sBAAsB;IAW9B,gDAAgD;IAChD,OAAO,CAAC,YAAY;IAIpB,iDAAiD;IACjD,OAAO,CAAC,gBAAgB;IAIxB,8DAA8D;IAC9D,OAAO,CAAC,YAAY;IAWpB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAYvB,yEAAyE;IACzE,OAAO,CAAC,eAAe;IAmBvB,uFAAuF;IACvF,OAAO,CAAC,WAAW;IA+BnB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;OAGG;IAEH,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA0DlD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOf,WAAW,IAAI,IAAI;IAUtB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,QAAQ,IAAI,IAAI;IAQ1B;;;OAGG;YACW,YAAY;IAqC1B;;OAEG;YACW,wBAAwB;IAiBtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACI,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAcjD;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAYlC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;OAIG;IACI,uBAAuB,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI,GAAG,IAAI;IAe3E;;OAEG;IACI,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKjD;;OAEG;IACI,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAI3D;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAQnC;;OAEG;IACI,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKjD;;;;OAIG;IACI,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKrD;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAQhC;;OAEG;IACI,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAWpD;;OAEG;IACI,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAkC/D;;OAEG;IACI,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAO3D;;;OAGG;IACI,qBAAqB,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAOlG;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IA2CjD;;OAEG;IACI,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;IAUrE;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAMlC;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS1D;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAOhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;;OAGG;IACI,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IA0B/D;;;OAGG;IACI,mBAAmB,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAIhG;;;OAGG;IACU,sBAAsB,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInG;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;OAEG;YACW,8BAA8B;IAmC5C;;OAEG;IACI,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAOxD;;;;OAIG;IACI,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAS5D;;OAEG;IACI,qBAAqB,IAAI,IAAI;IAIpC;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI;IAQ3E;;OAEG;YACW,aAAa;IA+B3B,2DAA2D;IAC3D,OAAO,CAAC,sBAAsB,CAAuB;IAMrD;;OAEG;IACI,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAoBzE;;;OAGG;IACH,IAAW,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAKlD;IAED;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACI,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAOhD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;;OAGG;cACgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAI/G;;;OAGG;IACI,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAIvG;;OAEG;YACW,WAAW;IAezB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;;OAGG;YACW,aAAa;IAgF3B;;;;;OAKG;YACW,kBAAkB;IAyBhC;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACI,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAUxD;;OAEG;IACU,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlF;;OAEG;IACI,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAIrD;;OAEG;IACI,qBAAqB,IAAI,IAAI;IAQpC;;OAEG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU5C;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,WAAW,GAAG,IAAI;IAIvD;;OAEG;IACI,sBAAsB,IAAI,IAAI;IAIrC;;OAEG;IACI,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxD;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA4D5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;;;OAIG;IACI,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAS5D;;;;OAIG;IACI,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAS1D;;OAEG;IACI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQlD;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;IAMhC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;;;;;OAOG;IACI,4BAA4B,CAAC,GAAG,EAAE,2BAA2B,GAAG,IAAI;yCAljFhE,8BAA8B;2CAA9B,8BAA8B;CAujF1C"}