@memberjunction/ng-trees 5.43.0 → 5.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/ng-trees.module.d.ts +2 -1
- package/dist/lib/ng-trees.module.d.ts.map +1 -1
- package/dist/lib/ng-trees.module.js +7 -3
- package/dist/lib/ng-trees.module.js.map +1 -1
- package/dist/lib/tree/tree.component.d.ts +9 -2
- package/dist/lib/tree/tree.component.d.ts.map +1 -1
- package/dist/lib/tree/tree.component.js +55 -43
- package/dist/lib/tree/tree.component.js.map +1 -1
- package/dist/lib/tree-dropdown/tree-dropdown.component.d.ts +3 -1
- package/dist/lib/tree-dropdown/tree-dropdown.component.d.ts.map +1 -1
- package/dist/lib/tree-dropdown/tree-dropdown.component.js +9 -5
- package/dist/lib/tree-dropdown/tree-dropdown.component.js.map +1 -1
- package/package.json +7 -5
- package/dist/__tests__/index.test.d.ts +0 -2
- package/dist/__tests__/index.test.d.ts.map +0 -1
- package/dist/__tests__/index.test.js +0 -7
- package/dist/__tests__/index.test.js.map +0 -1
- package/dist/__tests__/tree-events.test.d.ts +0 -2
- package/dist/__tests__/tree-events.test.d.ts.map +0 -1
- package/dist/__tests__/tree-events.test.js +0 -101
- package/dist/__tests__/tree-events.test.js.map +0 -1
- package/dist/__tests__/tree-types.test.d.ts +0 -2
- package/dist/__tests__/tree-types.test.d.ts.map +0 -1
- package/dist/__tests__/tree-types.test.js +0 -82
- package/dist/__tests__/tree-types.test.js.map +0 -1
|
@@ -3,9 +3,10 @@ import * as i1 from "./tree/tree.component";
|
|
|
3
3
|
import * as i2 from "./tree-dropdown/tree-dropdown.component";
|
|
4
4
|
import * as i3 from "@angular/common";
|
|
5
5
|
import * as i4 from "@angular/forms";
|
|
6
|
+
import * as i5 from "@memberjunction/ng-ui-components";
|
|
6
7
|
export declare class NgTreesModule {
|
|
7
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgTreesModule, never>;
|
|
8
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<NgTreesModule, [typeof i1.TreeComponent, typeof i2.TreeDropdownComponent], [typeof i3.CommonModule, typeof i4.FormsModule], [typeof i1.TreeComponent, typeof i2.TreeDropdownComponent]>;
|
|
9
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NgTreesModule, [typeof i1.TreeComponent, typeof i2.TreeDropdownComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.MJEmptyStateComponent], [typeof i1.TreeComponent, typeof i2.TreeDropdownComponent]>;
|
|
9
10
|
static ɵinj: i0.ɵɵInjectorDeclaration<NgTreesModule>;
|
|
10
11
|
}
|
|
11
12
|
//# sourceMappingURL=ng-trees.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-trees.module.d.ts","sourceRoot":"","sources":["../../src/lib/ng-trees.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ng-trees.module.d.ts","sourceRoot":"","sources":["../../src/lib/ng-trees.module.ts"],"names":[],"mappings":";;;;;;AAeA,qBAea,aAAa;yCAAb,aAAa;0CAAb,aAAa;0CAAb,aAAa;CAAI"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { NgModule } from '@angular/core';
|
|
7
7
|
import { CommonModule } from '@angular/common';
|
|
8
8
|
import { FormsModule } from '@angular/forms';
|
|
9
|
+
import { MJEmptyStateComponent } from '@memberjunction/ng-ui-components';
|
|
9
10
|
// Components
|
|
10
11
|
import { TreeComponent } from './tree/tree.component';
|
|
11
12
|
import { TreeDropdownComponent } from './tree-dropdown/tree-dropdown.component';
|
|
@@ -14,7 +15,8 @@ export class NgTreesModule {
|
|
|
14
15
|
static ɵfac = function NgTreesModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NgTreesModule)(); };
|
|
15
16
|
static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: NgTreesModule });
|
|
16
17
|
static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
|
|
17
|
-
FormsModule
|
|
18
|
+
FormsModule,
|
|
19
|
+
MJEmptyStateComponent] });
|
|
18
20
|
}
|
|
19
21
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NgTreesModule, [{
|
|
20
22
|
type: NgModule,
|
|
@@ -25,7 +27,8 @@ export class NgTreesModule {
|
|
|
25
27
|
],
|
|
26
28
|
imports: [
|
|
27
29
|
CommonModule,
|
|
28
|
-
FormsModule
|
|
30
|
+
FormsModule,
|
|
31
|
+
MJEmptyStateComponent
|
|
29
32
|
],
|
|
30
33
|
exports: [
|
|
31
34
|
TreeComponent,
|
|
@@ -35,6 +38,7 @@ export class NgTreesModule {
|
|
|
35
38
|
}], null, null); })();
|
|
36
39
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(NgTreesModule, { declarations: [TreeComponent,
|
|
37
40
|
TreeDropdownComponent], imports: [CommonModule,
|
|
38
|
-
FormsModule
|
|
41
|
+
FormsModule,
|
|
42
|
+
MJEmptyStateComponent], exports: [TreeComponent,
|
|
39
43
|
TreeDropdownComponent] }); })();
|
|
40
44
|
//# sourceMappingURL=ng-trees.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-trees.module.js","sourceRoot":"","sources":["../../src/lib/ng-trees.module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ng-trees.module.js","sourceRoot":"","sources":["../../src/lib/ng-trees.module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;;AAiBhF,MAAM,OAAO,aAAa;uGAAb,aAAa;4DAAb,aAAa;gEATlB,YAAY;YACZ,WAAW;YACX,qBAAqB;;iFAOhB,aAAa;cAfzB,QAAQ;eAAC;gBACN,YAAY,EAAE;oBACV,aAAa;oBACb,qBAAqB;iBACxB;gBACD,OAAO,EAAE;oBACL,YAAY;oBACZ,WAAW;oBACX,qBAAqB;iBACxB;gBACD,OAAO,EAAE;oBACL,aAAa;oBACb,qBAAqB;iBACxB;aACJ;;wFACY,aAAa,mBAblB,aAAa;QACb,qBAAqB,aAGrB,YAAY;QACZ,WAAW;QACX,qBAAqB,aAGrB,aAAa;QACb,qBAAqB","sourcesContent":["/**\n * NgTrees Module for @memberjunction/ng-trees\n *\n * Provides tree and tree dropdown components for hierarchical entity selection.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MJEmptyStateComponent } from '@memberjunction/ng-ui-components';\n\n// Components\nimport { TreeComponent } from './tree/tree.component';\nimport { TreeDropdownComponent } from './tree-dropdown/tree-dropdown.component';\n\n@NgModule({\n declarations: [\n TreeComponent,\n TreeDropdownComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MJEmptyStateComponent\n ],\n exports: [\n TreeComponent,\n TreeDropdownComponent\n ]\n})\nexport class NgTreesModule { }\n"]}
|
|
@@ -30,10 +30,17 @@ export declare class TreeComponent implements OnInit, OnDestroy {
|
|
|
30
30
|
private _selectedIDs;
|
|
31
31
|
set SelectedIDs(value: string[]);
|
|
32
32
|
get SelectedIDs(): string[];
|
|
33
|
-
/** Initially expanded node IDs (null =
|
|
33
|
+
/** Initially expanded node IDs (null = defer to DefaultExpansion) */
|
|
34
34
|
private _expandedIDs;
|
|
35
35
|
set ExpandedIDs(value: string[] | null);
|
|
36
36
|
get ExpandedIDs(): string[] | null;
|
|
37
|
+
/**
|
|
38
|
+
* Initial expansion applied when ExpandedIDs is null:
|
|
39
|
+
* 'first-level' (default) expands only the root branches, 'all' expands every
|
|
40
|
+
* branch (small pickers where the whole catalog should be visible), 'none'
|
|
41
|
+
* starts fully collapsed.
|
|
42
|
+
*/
|
|
43
|
+
DefaultExpansion: 'first-level' | 'all' | 'none';
|
|
37
44
|
/** Show expand/collapse all buttons */
|
|
38
45
|
private _showExpandCollapseAll;
|
|
39
46
|
set ShowExpandCollapseAll(value: boolean);
|
|
@@ -356,6 +363,6 @@ export declare class TreeComponent implements OnInit, OnDestroy {
|
|
|
356
363
|
*/
|
|
357
364
|
private escapeHtml;
|
|
358
365
|
static ɵfac: i0.ɵɵFactoryDeclaration<TreeComponent, never>;
|
|
359
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TreeComponent, "mj-tree", never, { "BranchConfig": { "alias": "BranchConfig"; "required": false; }; "LeafConfig": { "alias": "LeafConfig"; "required": false; }; "SelectionMode": { "alias": "SelectionMode"; "required": false; }; "SelectableTypes": { "alias": "SelectableTypes"; "required": false; }; "SelectedIDs": { "alias": "SelectedIDs"; "required": false; }; "ExpandedIDs": { "alias": "ExpandedIDs"; "required": false; }; "ShowExpandCollapseAll": { "alias": "ShowExpandCollapseAll"; "required": false; }; "EnableKeyboardNavigation": { "alias": "EnableKeyboardNavigation"; "required": false; }; "KeyboardConfig": { "alias": "KeyboardConfig"; "required": false; }; "StyleConfig": { "alias": "StyleConfig"; "required": false; }; "IndentSize": { "alias": "IndentSize"; "required": false; }; "ShowLoading": { "alias": "ShowLoading"; "required": false; }; "EmptyMessage": { "alias": "EmptyMessage"; "required": false; }; "EmptyIcon": { "alias": "EmptyIcon"; "required": false; }; "AutoLoad": { "alias": "AutoLoad"; "required": false; }; "ShowIcons": { "alias": "ShowIcons"; "required": false; }; "ShowDescriptions": { "alias": "ShowDescriptions"; "required": false; }; "ShowBadges": { "alias": "ShowBadges"; "required": false; }; "AnimateExpandCollapse": { "alias": "AnimateExpandCollapse"; "required": false; }; }, { "BeforeNodeSelect": "BeforeNodeSelect"; "AfterNodeSelect": "AfterNodeSelect"; "BeforeNodeDeselect": "BeforeNodeDeselect"; "AfterNodeDeselect": "AfterNodeDeselect"; "BeforeNodeExpand": "BeforeNodeExpand"; "AfterNodeExpand": "AfterNodeExpand"; "BeforeNodeCollapse": "BeforeNodeCollapse"; "AfterNodeCollapse": "AfterNodeCollapse"; "BeforeNodeClick": "BeforeNodeClick"; "AfterNodeClick": "AfterNodeClick"; "BeforeNodeDoubleClick": "BeforeNodeDoubleClick"; "AfterNodeDoubleClick": "AfterNodeDoubleClick"; "BeforeDataLoad": "BeforeDataLoad"; "AfterDataLoad": "AfterDataLoad"; "BeforeKeyboardNavigate": "BeforeKeyboardNavigate"; "AfterKeyboardNavigate": "AfterKeyboardNavigate"; "SelectionChange": "SelectionChange"; }, never, never, false, never>;
|
|
366
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TreeComponent, "mj-tree", never, { "BranchConfig": { "alias": "BranchConfig"; "required": false; }; "LeafConfig": { "alias": "LeafConfig"; "required": false; }; "SelectionMode": { "alias": "SelectionMode"; "required": false; }; "SelectableTypes": { "alias": "SelectableTypes"; "required": false; }; "SelectedIDs": { "alias": "SelectedIDs"; "required": false; }; "ExpandedIDs": { "alias": "ExpandedIDs"; "required": false; }; "DefaultExpansion": { "alias": "DefaultExpansion"; "required": false; }; "ShowExpandCollapseAll": { "alias": "ShowExpandCollapseAll"; "required": false; }; "EnableKeyboardNavigation": { "alias": "EnableKeyboardNavigation"; "required": false; }; "KeyboardConfig": { "alias": "KeyboardConfig"; "required": false; }; "StyleConfig": { "alias": "StyleConfig"; "required": false; }; "IndentSize": { "alias": "IndentSize"; "required": false; }; "ShowLoading": { "alias": "ShowLoading"; "required": false; }; "EmptyMessage": { "alias": "EmptyMessage"; "required": false; }; "EmptyIcon": { "alias": "EmptyIcon"; "required": false; }; "AutoLoad": { "alias": "AutoLoad"; "required": false; }; "ShowIcons": { "alias": "ShowIcons"; "required": false; }; "ShowDescriptions": { "alias": "ShowDescriptions"; "required": false; }; "ShowBadges": { "alias": "ShowBadges"; "required": false; }; "AnimateExpandCollapse": { "alias": "AnimateExpandCollapse"; "required": false; }; }, { "BeforeNodeSelect": "BeforeNodeSelect"; "AfterNodeSelect": "AfterNodeSelect"; "BeforeNodeDeselect": "BeforeNodeDeselect"; "AfterNodeDeselect": "AfterNodeDeselect"; "BeforeNodeExpand": "BeforeNodeExpand"; "AfterNodeExpand": "AfterNodeExpand"; "BeforeNodeCollapse": "BeforeNodeCollapse"; "AfterNodeCollapse": "AfterNodeCollapse"; "BeforeNodeClick": "BeforeNodeClick"; "AfterNodeClick": "AfterNodeClick"; "BeforeNodeDoubleClick": "BeforeNodeDoubleClick"; "AfterNodeDoubleClick": "AfterNodeDoubleClick"; "BeforeDataLoad": "BeforeDataLoad"; "AfterDataLoad": "AfterDataLoad"; "BeforeKeyboardNavigate": "BeforeKeyboardNavigate"; "AfterKeyboardNavigate": "AfterKeyboardNavigate"; "SelectionChange": "SelectionChange"; }, never, never, false, never>;
|
|
360
367
|
}
|
|
361
368
|
//# sourceMappingURL=tree.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.component.d.ts","sourceRoot":"","sources":["../../../src/lib/tree/tree.component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAIH,YAAY,EACZ,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,UAAU,EAEb,MAAM,eAAe,CAAC;AAGvB,OAAO,EACH,QAAQ,EACR,gBAAgB,EAChB,cAAc,EAEd,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,8BAA8B,EAC9B,6BAA6B,EAC7B,uBAAuB,EACvB,sBAAsB,EACtB,+BAA+B,EAC/B,8BAA8B,EACjC,MAAM,uBAAuB,CAAC;;AAE/B,qBAMa,aAAc,YAAW,MAAM,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"tree.component.d.ts","sourceRoot":"","sources":["../../../src/lib/tree/tree.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ import { createDefaultTreeNode } from '../models/tree-types';
|
|
|
10
10
|
import { BeforeNodeSelectEventArgs, AfterNodeSelectEventArgs, BeforeNodeDeselectEventArgs, AfterNodeDeselectEventArgs, BeforeNodeExpandEventArgs, AfterNodeExpandEventArgs, BeforeNodeCollapseEventArgs, AfterNodeCollapseEventArgs, BeforeNodeClickEventArgs, AfterNodeClickEventArgs, BeforeNodeDoubleClickEventArgs, AfterNodeDoubleClickEventArgs, BeforeDataLoadEventArgs, AfterDataLoadEventArgs, BeforeKeyboardNavigateEventArgs, AfterKeyboardNavigateEventArgs } from '../events/tree-events';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
import * as i1 from "@angular/common";
|
|
13
|
+
import * as i2 from "@memberjunction/ng-ui-components";
|
|
13
14
|
const _c0 = a0 => ({ node: a0 });
|
|
14
15
|
const _c1 = (a0, a1) => ({ "fa-chevron-right": a0, "fa-chevron-down": a1 });
|
|
15
16
|
function TreeComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -49,23 +50,16 @@ function TreeComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
|
49
50
|
i0.ɵɵelementEnd()();
|
|
50
51
|
} }
|
|
51
52
|
function TreeComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
-
i0.ɵɵ
|
|
53
|
-
i0.ɵɵelement(1, "i");
|
|
54
|
-
i0.ɵɵelementStart(2, "span", 18);
|
|
55
|
-
i0.ɵɵtext(3);
|
|
56
|
-
i0.ɵɵelementEnd()();
|
|
53
|
+
i0.ɵɵelement(0, "mj-empty-state", 5);
|
|
57
54
|
} if (rf & 2) {
|
|
58
55
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
59
|
-
i0.ɵɵ
|
|
60
|
-
i0.ɵɵclassMap(ctx_r1.EmptyIcon + " tree-empty__icon");
|
|
61
|
-
i0.ɵɵadvance(2);
|
|
62
|
-
i0.ɵɵtextInterpolate(ctx_r1.EmptyMessage);
|
|
56
|
+
i0.ɵɵproperty("Icon", ctx_r1.EmptyIcon)("Title", ctx_r1.EmptyMessage);
|
|
63
57
|
} }
|
|
64
58
|
function TreeComponent_Conditional_5_For_2_Conditional_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
65
59
|
i0.ɵɵelementContainer(0);
|
|
66
60
|
} }
|
|
67
61
|
function TreeComponent_Conditional_5_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
68
|
-
i0.ɵɵtemplate(0, TreeComponent_Conditional_5_For_2_Conditional_0_ng_container_0_Template, 1, 0, "ng-container",
|
|
62
|
+
i0.ɵɵtemplate(0, TreeComponent_Conditional_5_For_2_Conditional_0_ng_container_0_Template, 1, 0, "ng-container", 18);
|
|
69
63
|
} if (rf & 2) {
|
|
70
64
|
const node_r4 = i0.ɵɵnextContext().$implicit;
|
|
71
65
|
i0.ɵɵnextContext(2);
|
|
@@ -88,20 +82,20 @@ function TreeComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
|
88
82
|
i0.ɵɵrepeater(ctx_r1.Nodes);
|
|
89
83
|
} }
|
|
90
84
|
function TreeComponent_ng_template_6_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
91
|
-
i0.ɵɵelement(0, "i",
|
|
85
|
+
i0.ɵɵelement(0, "i", 30);
|
|
92
86
|
} if (rf & 2) {
|
|
93
87
|
const node_r7 = i0.ɵɵnextContext(2).node;
|
|
94
88
|
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(1, _c1, !node_r7.Expanded, node_r7.Expanded));
|
|
95
89
|
} }
|
|
96
90
|
function TreeComponent_ng_template_6_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
97
|
-
i0.ɵɵelement(0, "span",
|
|
91
|
+
i0.ɵɵelement(0, "span", 31);
|
|
98
92
|
} }
|
|
99
93
|
function TreeComponent_ng_template_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
100
94
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
101
|
-
i0.ɵɵelementStart(0, "span",
|
|
95
|
+
i0.ɵɵelementStart(0, "span", 29);
|
|
102
96
|
i0.ɵɵlistener("click", function TreeComponent_ng_template_6_Conditional_1_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const node_r7 = i0.ɵɵnextContext().node; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onToggleClick(node_r7, $event)); });
|
|
103
|
-
i0.ɵɵconditionalCreate(1, TreeComponent_ng_template_6_Conditional_1_Conditional_1_Template, 1, 4, "i",
|
|
104
|
-
i0.ɵɵconditionalCreate(2, TreeComponent_ng_template_6_Conditional_1_Conditional_2_Template, 1, 0, "span",
|
|
97
|
+
i0.ɵɵconditionalCreate(1, TreeComponent_ng_template_6_Conditional_1_Conditional_1_Template, 1, 4, "i", 30);
|
|
98
|
+
i0.ɵɵconditionalCreate(2, TreeComponent_ng_template_6_Conditional_1_Conditional_2_Template, 1, 0, "span", 31);
|
|
105
99
|
i0.ɵɵelementEnd();
|
|
106
100
|
} if (rf & 2) {
|
|
107
101
|
const node_r7 = i0.ɵɵnextContext().node;
|
|
@@ -111,10 +105,10 @@ function TreeComponent_ng_template_6_Conditional_1_Template(rf, ctx) { if (rf &
|
|
|
111
105
|
i0.ɵɵconditional(node_r7.Children.length === 0 ? 2 : -1);
|
|
112
106
|
} }
|
|
113
107
|
function TreeComponent_ng_template_6_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
114
|
-
i0.ɵɵelement(0, "span",
|
|
108
|
+
i0.ɵɵelement(0, "span", 21);
|
|
115
109
|
} }
|
|
116
110
|
function TreeComponent_ng_template_6_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
117
|
-
i0.ɵɵelementStart(0, "span",
|
|
111
|
+
i0.ɵɵelementStart(0, "span", 32);
|
|
118
112
|
i0.ɵɵelement(1, "i");
|
|
119
113
|
i0.ɵɵelementEnd();
|
|
120
114
|
} if (rf & 2) {
|
|
@@ -124,7 +118,7 @@ function TreeComponent_ng_template_6_Conditional_3_Template(rf, ctx) { if (rf &
|
|
|
124
118
|
i0.ɵɵclassMap(node_r7.Icon);
|
|
125
119
|
} }
|
|
126
120
|
function TreeComponent_ng_template_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
127
|
-
i0.ɵɵelementStart(0, "span",
|
|
121
|
+
i0.ɵɵelementStart(0, "span", 25);
|
|
128
122
|
i0.ɵɵtext(1);
|
|
129
123
|
i0.ɵɵelementEnd();
|
|
130
124
|
} if (rf & 2) {
|
|
@@ -133,7 +127,7 @@ function TreeComponent_ng_template_6_Conditional_6_Template(rf, ctx) { if (rf &
|
|
|
133
127
|
i0.ɵɵtextInterpolate1(" ", node_r7.Description, " ");
|
|
134
128
|
} }
|
|
135
129
|
function TreeComponent_ng_template_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
-
i0.ɵɵelementStart(0, "span",
|
|
130
|
+
i0.ɵɵelementStart(0, "span", 26);
|
|
137
131
|
i0.ɵɵtext(1);
|
|
138
132
|
i0.ɵɵelementEnd();
|
|
139
133
|
} if (rf & 2) {
|
|
@@ -142,15 +136,15 @@ function TreeComponent_ng_template_6_Conditional_7_Template(rf, ctx) { if (rf &
|
|
|
142
136
|
i0.ɵɵtextInterpolate1(" ", node_r7.Badge, " ");
|
|
143
137
|
} }
|
|
144
138
|
function TreeComponent_ng_template_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
-
i0.ɵɵelementStart(0, "span",
|
|
146
|
-
i0.ɵɵelement(1, "i",
|
|
139
|
+
i0.ɵɵelementStart(0, "span", 27);
|
|
140
|
+
i0.ɵɵelement(1, "i", 33);
|
|
147
141
|
i0.ɵɵelementEnd();
|
|
148
142
|
} }
|
|
149
143
|
function TreeComponent_ng_template_6_Conditional_9_For_2_Conditional_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
150
144
|
i0.ɵɵelementContainer(0);
|
|
151
145
|
} }
|
|
152
146
|
function TreeComponent_ng_template_6_Conditional_9_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
153
|
-
i0.ɵɵtemplate(0, TreeComponent_ng_template_6_Conditional_9_For_2_Conditional_0_ng_container_0_Template, 1, 0, "ng-container",
|
|
147
|
+
i0.ɵɵtemplate(0, TreeComponent_ng_template_6_Conditional_9_For_2_Conditional_0_ng_container_0_Template, 1, 0, "ng-container", 18);
|
|
154
148
|
} if (rf & 2) {
|
|
155
149
|
const child_r9 = i0.ɵɵnextContext().$implicit;
|
|
156
150
|
i0.ɵɵnextContext(3);
|
|
@@ -164,7 +158,7 @@ function TreeComponent_ng_template_6_Conditional_9_For_2_Template(rf, ctx) { if
|
|
|
164
158
|
i0.ɵɵconditional(child_r9.Visible ? 0 : -1);
|
|
165
159
|
} }
|
|
166
160
|
function TreeComponent_ng_template_6_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
167
|
-
i0.ɵɵelementStart(0, "div",
|
|
161
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
168
162
|
i0.ɵɵrepeaterCreate(1, TreeComponent_ng_template_6_Conditional_9_For_2_Template, 1, 1, null, null, i0.ɵɵcomponentInstance().trackNode, true);
|
|
169
163
|
i0.ɵɵelementEnd();
|
|
170
164
|
} if (rf & 2) {
|
|
@@ -176,19 +170,19 @@ function TreeComponent_ng_template_6_Conditional_9_Template(rf, ctx) { if (rf &
|
|
|
176
170
|
} }
|
|
177
171
|
function TreeComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {
|
|
178
172
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
179
|
-
i0.ɵɵelementStart(0, "div",
|
|
173
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
180
174
|
i0.ɵɵlistener("click", function TreeComponent_ng_template_6_Template_div_click_0_listener($event) { const node_r7 = i0.ɵɵrestoreView(_r6).node; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNodeClick(node_r7, $event)); })("dblclick", function TreeComponent_ng_template_6_Template_div_dblclick_0_listener($event) { const node_r7 = i0.ɵɵrestoreView(_r6).node; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNodeDoubleClick(node_r7, $event)); });
|
|
181
|
-
i0.ɵɵconditionalCreate(1, TreeComponent_ng_template_6_Conditional_1_Template, 3, 2, "span",
|
|
182
|
-
i0.ɵɵconditionalCreate(2, TreeComponent_ng_template_6_Conditional_2_Template, 1, 0, "span",
|
|
183
|
-
i0.ɵɵconditionalCreate(3, TreeComponent_ng_template_6_Conditional_3_Template, 2, 4, "span",
|
|
184
|
-
i0.ɵɵelementStart(4, "span",
|
|
185
|
-
i0.ɵɵelement(5, "span",
|
|
186
|
-
i0.ɵɵconditionalCreate(6, TreeComponent_ng_template_6_Conditional_6_Template, 2, 1, "span",
|
|
175
|
+
i0.ɵɵconditionalCreate(1, TreeComponent_ng_template_6_Conditional_1_Template, 3, 2, "span", 20);
|
|
176
|
+
i0.ɵɵconditionalCreate(2, TreeComponent_ng_template_6_Conditional_2_Template, 1, 0, "span", 21);
|
|
177
|
+
i0.ɵɵconditionalCreate(3, TreeComponent_ng_template_6_Conditional_3_Template, 2, 4, "span", 22);
|
|
178
|
+
i0.ɵɵelementStart(4, "span", 23);
|
|
179
|
+
i0.ɵɵelement(5, "span", 24);
|
|
180
|
+
i0.ɵɵconditionalCreate(6, TreeComponent_ng_template_6_Conditional_6_Template, 2, 1, "span", 25);
|
|
187
181
|
i0.ɵɵelementEnd();
|
|
188
|
-
i0.ɵɵconditionalCreate(7, TreeComponent_ng_template_6_Conditional_7_Template, 2, 1, "span",
|
|
189
|
-
i0.ɵɵconditionalCreate(8, TreeComponent_ng_template_6_Conditional_8_Template, 2, 0, "span",
|
|
182
|
+
i0.ɵɵconditionalCreate(7, TreeComponent_ng_template_6_Conditional_7_Template, 2, 1, "span", 26);
|
|
183
|
+
i0.ɵɵconditionalCreate(8, TreeComponent_ng_template_6_Conditional_8_Template, 2, 0, "span", 27);
|
|
190
184
|
i0.ɵɵelementEnd();
|
|
191
|
-
i0.ɵɵconditionalCreate(9, TreeComponent_ng_template_6_Conditional_9_Template, 3, 2, "div",
|
|
185
|
+
i0.ɵɵconditionalCreate(9, TreeComponent_ng_template_6_Conditional_9_Template, 3, 2, "div", 28);
|
|
192
186
|
} if (rf & 2) {
|
|
193
187
|
const node_r7 = ctx.node;
|
|
194
188
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -279,7 +273,7 @@ export class TreeComponent {
|
|
|
279
273
|
get SelectedIDs() {
|
|
280
274
|
return this._selectedIDs;
|
|
281
275
|
}
|
|
282
|
-
/** Initially expanded node IDs (null =
|
|
276
|
+
/** Initially expanded node IDs (null = defer to DefaultExpansion) */
|
|
283
277
|
_expandedIDs = null;
|
|
284
278
|
set ExpandedIDs(value) {
|
|
285
279
|
this._expandedIDs = value;
|
|
@@ -287,6 +281,13 @@ export class TreeComponent {
|
|
|
287
281
|
get ExpandedIDs() {
|
|
288
282
|
return this._expandedIDs;
|
|
289
283
|
}
|
|
284
|
+
/**
|
|
285
|
+
* Initial expansion applied when ExpandedIDs is null:
|
|
286
|
+
* 'first-level' (default) expands only the root branches, 'all' expands every
|
|
287
|
+
* branch (small pickers where the whole catalog should be visible), 'none'
|
|
288
|
+
* starts fully collapsed.
|
|
289
|
+
*/
|
|
290
|
+
DefaultExpansion = 'first-level';
|
|
290
291
|
/** Show expand/collapse all buttons */
|
|
291
292
|
_showExpandCollapseAll = false;
|
|
292
293
|
set ShowExpandCollapseAll(value) {
|
|
@@ -1302,11 +1303,20 @@ export class TreeComponent {
|
|
|
1302
1303
|
*/
|
|
1303
1304
|
applyInitialExpansion() {
|
|
1304
1305
|
if (this._expandedIDs === null) {
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1306
|
+
switch (this.DefaultExpansion) {
|
|
1307
|
+
case 'all':
|
|
1308
|
+
this.expandAllRecursive(this.Nodes);
|
|
1309
|
+
break;
|
|
1310
|
+
case 'none':
|
|
1311
|
+
break;
|
|
1312
|
+
default:
|
|
1313
|
+
// Auto-expand first level
|
|
1314
|
+
for (const node of this.Nodes) {
|
|
1315
|
+
if (node.Type === 'branch') {
|
|
1316
|
+
node.Expanded = true;
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
break;
|
|
1310
1320
|
}
|
|
1311
1321
|
}
|
|
1312
1322
|
else {
|
|
@@ -1625,12 +1635,12 @@ export class TreeComponent {
|
|
|
1625
1635
|
static ɵfac = function TreeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TreeComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef)); };
|
|
1626
1636
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TreeComponent, selectors: [["mj-tree"]], hostBindings: function TreeComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
1627
1637
|
i0.ɵɵlistener("keydown", function TreeComponent_keydown_HostBindingHandler($event) { return ctx.onKeyDown($event); });
|
|
1628
|
-
} }, inputs: { BranchConfig: "BranchConfig", LeafConfig: "LeafConfig", SelectionMode: "SelectionMode", SelectableTypes: "SelectableTypes", SelectedIDs: "SelectedIDs", ExpandedIDs: "ExpandedIDs", ShowExpandCollapseAll: "ShowExpandCollapseAll", EnableKeyboardNavigation: "EnableKeyboardNavigation", KeyboardConfig: "KeyboardConfig", StyleConfig: "StyleConfig", IndentSize: "IndentSize", ShowLoading: "ShowLoading", EmptyMessage: "EmptyMessage", EmptyIcon: "EmptyIcon", AutoLoad: "AutoLoad", ShowIcons: "ShowIcons", ShowDescriptions: "ShowDescriptions", ShowBadges: "ShowBadges", AnimateExpandCollapse: "AnimateExpandCollapse" }, outputs: { BeforeNodeSelect: "BeforeNodeSelect", AfterNodeSelect: "AfterNodeSelect", BeforeNodeDeselect: "BeforeNodeDeselect", AfterNodeDeselect: "AfterNodeDeselect", BeforeNodeExpand: "BeforeNodeExpand", AfterNodeExpand: "AfterNodeExpand", BeforeNodeCollapse: "BeforeNodeCollapse", AfterNodeCollapse: "AfterNodeCollapse", BeforeNodeClick: "BeforeNodeClick", AfterNodeClick: "AfterNodeClick", BeforeNodeDoubleClick: "BeforeNodeDoubleClick", AfterNodeDoubleClick: "AfterNodeDoubleClick", BeforeDataLoad: "BeforeDataLoad", AfterDataLoad: "AfterDataLoad", BeforeKeyboardNavigate: "BeforeKeyboardNavigate", AfterKeyboardNavigate: "AfterKeyboardNavigate", SelectionChange: "SelectionChange" }, standalone: false, decls: 8, vars: 6, consts: [["nodeTemplate", ""], ["tabindex", "0", 3, "ngClass"], [1, "tree-loading"], [1, "tree-error"], [1, "tree-toolbar"], [1, "tree-empty"], [1, "tree-content"], [1, "tree-loading__spinner"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "tree-loading__text"], [1, "fa-solid", "fa-exclamation-triangle", "tree-error__icon"], [1, "tree-error__message"], [1, "tree-error__retry", 3, "click"], [1, "fa-solid", "fa-refresh"], ["title", "Expand All", 1, "tree-toolbar__btn", 3, "click"], [1, "fa-solid", "fa-plus-square"], ["title", "Collapse All", 1, "tree-toolbar__btn", 3, "click"], [1, "fa-solid", "fa-minus-square"], [
|
|
1638
|
+
} }, inputs: { BranchConfig: "BranchConfig", LeafConfig: "LeafConfig", SelectionMode: "SelectionMode", SelectableTypes: "SelectableTypes", SelectedIDs: "SelectedIDs", ExpandedIDs: "ExpandedIDs", DefaultExpansion: "DefaultExpansion", ShowExpandCollapseAll: "ShowExpandCollapseAll", EnableKeyboardNavigation: "EnableKeyboardNavigation", KeyboardConfig: "KeyboardConfig", StyleConfig: "StyleConfig", IndentSize: "IndentSize", ShowLoading: "ShowLoading", EmptyMessage: "EmptyMessage", EmptyIcon: "EmptyIcon", AutoLoad: "AutoLoad", ShowIcons: "ShowIcons", ShowDescriptions: "ShowDescriptions", ShowBadges: "ShowBadges", AnimateExpandCollapse: "AnimateExpandCollapse" }, outputs: { BeforeNodeSelect: "BeforeNodeSelect", AfterNodeSelect: "AfterNodeSelect", BeforeNodeDeselect: "BeforeNodeDeselect", AfterNodeDeselect: "AfterNodeDeselect", BeforeNodeExpand: "BeforeNodeExpand", AfterNodeExpand: "AfterNodeExpand", BeforeNodeCollapse: "BeforeNodeCollapse", AfterNodeCollapse: "AfterNodeCollapse", BeforeNodeClick: "BeforeNodeClick", AfterNodeClick: "AfterNodeClick", BeforeNodeDoubleClick: "BeforeNodeDoubleClick", AfterNodeDoubleClick: "AfterNodeDoubleClick", BeforeDataLoad: "BeforeDataLoad", AfterDataLoad: "AfterDataLoad", BeforeKeyboardNavigate: "BeforeKeyboardNavigate", AfterKeyboardNavigate: "AfterKeyboardNavigate", SelectionChange: "SelectionChange" }, standalone: false, decls: 8, vars: 6, consts: [["nodeTemplate", ""], ["tabindex", "0", 3, "ngClass"], [1, "tree-loading"], [1, "tree-error"], [1, "tree-toolbar"], ["Size", "compact", 1, "tree-empty", 3, "Icon", "Title"], [1, "tree-content"], [1, "tree-loading__spinner"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "tree-loading__text"], [1, "fa-solid", "fa-exclamation-triangle", "tree-error__icon"], [1, "tree-error__message"], [1, "tree-error__retry", 3, "click"], [1, "fa-solid", "fa-refresh"], ["title", "Expand All", 1, "tree-toolbar__btn", 3, "click"], [1, "fa-solid", "fa-plus-square"], ["title", "Collapse All", 1, "tree-toolbar__btn", 3, "click"], [1, "fa-solid", "fa-minus-square"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["role", "treeitem", 3, "click", "dblclick", "ngClass"], [1, "tree-node-toggle"], [1, "tree-node-leaf-spacer"], [1, "tree-node-icon", 3, "color"], [1, "tree-node-content"], [1, "tree-node-label", 3, "innerHTML"], [1, "tree-node-description"], [1, "tree-node-badge"], [1, "tree-node-selected-indicator"], ["role", "group", 1, "tree-node-children", 3, "tree-node-children--animated"], [1, "tree-node-toggle", 3, "click"], [1, "fa-solid", "tree-node-toggle__icon", 3, "ngClass"], [1, "tree-node-toggle__spacer"], [1, "tree-node-icon"], [1, "fa-solid", "fa-check"], ["role", "group", 1, "tree-node-children"]], template: function TreeComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1629
1639
|
i0.ɵɵelementStart(0, "div", 1);
|
|
1630
1640
|
i0.ɵɵconditionalCreate(1, TreeComponent_Conditional_1_Template, 5, 0, "div", 2);
|
|
1631
1641
|
i0.ɵɵconditionalCreate(2, TreeComponent_Conditional_2_Template, 7, 1, "div", 3);
|
|
1632
1642
|
i0.ɵɵconditionalCreate(3, TreeComponent_Conditional_3_Template, 5, 0, "div", 4);
|
|
1633
|
-
i0.ɵɵconditionalCreate(4, TreeComponent_Conditional_4_Template,
|
|
1643
|
+
i0.ɵɵconditionalCreate(4, TreeComponent_Conditional_4_Template, 1, 2, "mj-empty-state", 5);
|
|
1634
1644
|
i0.ɵɵconditionalCreate(5, TreeComponent_Conditional_5_Template, 3, 0, "div", 6);
|
|
1635
1645
|
i0.ɵɵelementEnd();
|
|
1636
1646
|
i0.ɵɵtemplate(6, TreeComponent_ng_template_6_Template, 10, 15, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
@@ -1646,11 +1656,11 @@ export class TreeComponent {
|
|
|
1646
1656
|
i0.ɵɵconditional(ctx.IsLoaded && ctx.Nodes.length === 0 && !ctx.ErrorMessage && !ctx.IsLoading ? 4 : -1);
|
|
1647
1657
|
i0.ɵɵadvance();
|
|
1648
1658
|
i0.ɵɵconditional(ctx.Nodes.length > 0 && !ctx.IsLoading ? 5 : -1);
|
|
1649
|
-
} }, dependencies: [i1.NgClass, i1.NgTemplateOutlet], styles: ["\n\n\n\n\n\n\n\n\n\n\n\n\n[_nghost-%COMP%] {\n \n\n --tree-bg: var(--mj-bg-surface);\n --tree-border-color: var(--mj-border-default);\n --tree-text-color: var(--mj-text-primary);\n --tree-text-secondary: var(--mj-text-muted);\n --tree-text-muted: var(--mj-text-disabled);\n\n \n\n --tree-node-hover-bg: var(--mj-bg-surface-sunken);\n --tree-node-selected-bg: var(--mj-brand-primary-subtle);\n --tree-node-selected-border: var(--mj-brand-primary);\n --tree-node-focused-outline: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n --tree-node-match-bg: var(--mj-status-warning-subtle);\n\n \n\n --tree-icon-color: var(--mj-brand-primary);\n --tree-icon-leaf-color: var(--mj-text-muted);\n --tree-toggle-color: var(--mj-text-disabled);\n\n \n\n --tree-node-padding-y: 8px;\n --tree-node-padding-x: 12px;\n --tree-node-gap: 8px;\n --tree-icon-size: 16px;\n --tree-toggle-size: 12px;\n\n \n\n --tree-transition-duration: 150ms;\n --tree-animation-easing: ease-out;\n\n \n\n --tree-badge-bg: var(--mj-border-default);\n --tree-badge-color: var(--mj-text-muted);\n --tree-badge-size: 12px;\n\n display: block;\n width: 100%;\n height: 100%;\n}\n\n\n\n\n\n\n.tree-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--tree-bg);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n outline: none;\n}\n\n.tree-container[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--tree-node-focused-outline);\n outline-offset: -2px;\n}\n\n\n\n\n\n\n.tree-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n gap: 12px;\n color: var(--tree-text-muted);\n}\n\n.tree-loading__spinner[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n color: var(--tree-icon-color);\n}\n\n.tree-loading__text[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n\n\n\n\n\n.tree-error[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n gap: 12px;\n text-align: center;\n}\n\n.tree-error__icon[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-status-error);\n}\n\n.tree-error__message[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--tree-text-secondary);\n max-width: 280px;\n}\n\n.tree-error__retry[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--tree-border-color);\n border-radius: var(--mj-radius-md);\n background: var(--tree-bg);\n color: var(--tree-text-color);\n font-size: var(--mj-text-sm);\n cursor: pointer;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-error__retry[_ngcontent-%COMP%]:hover {\n background: var(--tree-node-hover-bg);\n border-color: var(--tree-icon-color);\n color: var(--tree-icon-color);\n}\n\n\n\n\n\n\n.tree-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 16px;\n gap: 12px;\n color: var(--tree-text-muted);\n}\n\n.tree-empty__icon[_ngcontent-%COMP%] {\n font-size: 40px;\n opacity: 0.5;\n}\n\n.tree-empty__message[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n\n\n\n\n\n.tree-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--tree-border-color);\n background: var(--tree-node-hover-bg);\n}\n\n.tree-toolbar__btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: var(--mj-radius-sm);\n background: transparent;\n color: var(--tree-text-secondary);\n cursor: pointer;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-toolbar__btn[_ngcontent-%COMP%]:hover {\n background: var(--tree-bg);\n color: var(--tree-icon-color);\n}\n\n\n\n\n\n\n.tree-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px 0;\n}\n\n\n\n\n\n\n.tree-node[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--tree-node-gap);\n padding: var(--tree-node-padding-y) var(--tree-node-padding-x);\n cursor: pointer;\n user-select: none;\n border-left: 3px solid transparent;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n min-height: 36px;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover {\n background: var(--tree-node-hover-bg);\n}\n\n.tree-node--selected[_ngcontent-%COMP%] {\n background: var(--tree-node-selected-bg);\n border-left-color: var(--tree-node-selected-border);\n}\n\n.tree-node--selected[_ngcontent-%COMP%]:hover {\n background: var(--tree-node-selected-bg);\n}\n\n.tree-node--focused[_ngcontent-%COMP%] {\n outline: 2px solid var(--tree-node-focused-outline);\n outline-offset: -2px;\n}\n\n\n\n.tree-search-highlight[_ngcontent-%COMP%] {\n background: var(--tree-node-match-bg);\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: 500;\n}\n\n\n\n\n\n\n.tree-node-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n border-radius: var(--mj-radius-sm);\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-node-toggle[_ngcontent-%COMP%]:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.tree-node-toggle__icon[_ngcontent-%COMP%] {\n font-size: var(--tree-toggle-size);\n color: var(--tree-toggle-color);\n transition: transform var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-node--expanded[_ngcontent-%COMP%] .tree-node-toggle__icon[_ngcontent-%COMP%] {\n color: var(--tree-icon-color);\n}\n\n.tree-node-toggle__spacer[_ngcontent-%COMP%] {\n width: var(--tree-toggle-size);\n}\n\n.tree-node-leaf-spacer[_ngcontent-%COMP%] {\n width: 20px;\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.tree-node-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--tree-icon-size);\n flex-shrink: 0;\n font-size: var(--tree-icon-size);\n color: var(--tree-icon-color);\n}\n\n.tree-node--leaf[_ngcontent-%COMP%] .tree-node-icon[_ngcontent-%COMP%] {\n color: var(--tree-icon-leaf-color);\n}\n\n\n\n\n\n\n.tree-node-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tree-node-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n font-weight: 500;\n color: var(--tree-text-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tree-node--leaf[_ngcontent-%COMP%] .tree-node-label[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n\n.tree-node-description[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--tree-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n\n\n\n.tree-node-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: var(--tree-badge-bg);\n color: var(--tree-badge-color);\n font-size: var(--tree-badge-size);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.tree-node-selected-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: var(--mj-radius-full);\n background: var(--tree-node-selected-border);\n color: var(--mj-text-inverse);\n font-size: 10px;\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.tree-node-children[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.tree-node-children--animated[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_tree-expand var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n@keyframes _ngcontent-%COMP%_tree-expand {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n\n\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--tree-border-color);\n border-radius: var(--mj-radius-sm);\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--tree-toggle-color);\n}\n\n\n\n\n\n\n@media (max-width: 480px) {\n [_nghost-%COMP%] {\n --tree-node-padding-y: 10px;\n --tree-node-padding-x: 10px;\n --tree-icon-size: 18px;\n }\n\n .tree-node-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-base);\n }\n}"] });
|
|
1659
|
+
} }, dependencies: [i1.NgClass, i1.NgTemplateOutlet, i2.MJEmptyStateComponent], styles: ["\n\n\n\n\n\n\n\n\n\n\n\n\n[_nghost-%COMP%] {\n \n\n --tree-bg: var(--mj-bg-surface);\n --tree-border-color: var(--mj-border-default);\n --tree-text-color: var(--mj-text-primary);\n --tree-text-secondary: var(--mj-text-muted);\n --tree-text-muted: var(--mj-text-disabled);\n\n \n\n --tree-node-hover-bg: var(--mj-bg-surface-sunken);\n --tree-node-selected-bg: var(--mj-brand-primary-subtle);\n --tree-node-selected-border: var(--mj-brand-primary);\n --tree-node-focused-outline: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n --tree-node-match-bg: var(--mj-status-warning-subtle);\n\n \n\n --tree-icon-color: var(--mj-brand-primary);\n --tree-icon-leaf-color: var(--mj-text-muted);\n --tree-toggle-color: var(--mj-text-disabled);\n\n \n\n --tree-node-padding-y: 8px;\n --tree-node-padding-x: 12px;\n --tree-node-gap: 8px;\n --tree-icon-size: 16px;\n --tree-toggle-size: 12px;\n\n \n\n --tree-transition-duration: 150ms;\n --tree-animation-easing: ease-out;\n\n \n\n --tree-badge-bg: var(--mj-border-default);\n --tree-badge-color: var(--mj-text-muted);\n --tree-badge-size: 12px;\n\n display: block;\n width: 100%;\n height: 100%;\n}\n\n\n\n\n\n\n.tree-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--tree-bg);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n outline: none;\n}\n\n.tree-container[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--tree-node-focused-outline);\n outline-offset: -2px;\n}\n\n\n\n\n\n\n.tree-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n gap: 12px;\n color: var(--tree-text-muted);\n}\n\n.tree-loading__spinner[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n color: var(--tree-icon-color);\n}\n\n.tree-loading__text[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n\n\n\n\n\n.tree-error[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n gap: 12px;\n text-align: center;\n}\n\n.tree-error__icon[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-status-error);\n}\n\n.tree-error__message[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--tree-text-secondary);\n max-width: 280px;\n}\n\n.tree-error__retry[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--tree-border-color);\n border-radius: var(--mj-radius-md);\n background: var(--tree-bg);\n color: var(--tree-text-color);\n font-size: var(--mj-text-sm);\n cursor: pointer;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-error__retry[_ngcontent-%COMP%]:hover {\n background: var(--tree-node-hover-bg);\n border-color: var(--tree-icon-color);\n color: var(--tree-icon-color);\n}\n\n\n\n\n\n\n.tree-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 16px;\n gap: 12px;\n color: var(--tree-text-muted);\n}\n\n.tree-empty__icon[_ngcontent-%COMP%] {\n font-size: 40px;\n opacity: 0.5;\n}\n\n.tree-empty__message[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n\n\n\n\n\n.tree-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--tree-border-color);\n background: var(--tree-node-hover-bg);\n}\n\n.tree-toolbar__btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: var(--mj-radius-sm);\n background: transparent;\n color: var(--tree-text-secondary);\n cursor: pointer;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-toolbar__btn[_ngcontent-%COMP%]:hover {\n background: var(--tree-bg);\n color: var(--tree-icon-color);\n}\n\n\n\n\n\n\n.tree-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px 0;\n}\n\n\n\n\n\n\n.tree-node[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--tree-node-gap);\n padding: var(--tree-node-padding-y) var(--tree-node-padding-x);\n cursor: pointer;\n user-select: none;\n border-left: 3px solid transparent;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n min-height: 36px;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover {\n background: var(--tree-node-hover-bg);\n}\n\n.tree-node--selected[_ngcontent-%COMP%] {\n background: var(--tree-node-selected-bg);\n border-left-color: var(--tree-node-selected-border);\n}\n\n.tree-node--selected[_ngcontent-%COMP%]:hover {\n background: var(--tree-node-selected-bg);\n}\n\n.tree-node--focused[_ngcontent-%COMP%] {\n outline: 2px solid var(--tree-node-focused-outline);\n outline-offset: -2px;\n}\n\n\n\n.tree-search-highlight[_ngcontent-%COMP%] {\n background: var(--tree-node-match-bg);\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: 500;\n}\n\n\n\n\n\n\n.tree-node-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n border-radius: var(--mj-radius-sm);\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-node-toggle[_ngcontent-%COMP%]:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.tree-node-toggle__icon[_ngcontent-%COMP%] {\n font-size: var(--tree-toggle-size);\n color: var(--tree-toggle-color);\n transition: transform var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-node--expanded[_ngcontent-%COMP%] .tree-node-toggle__icon[_ngcontent-%COMP%] {\n color: var(--tree-icon-color);\n}\n\n.tree-node-toggle__spacer[_ngcontent-%COMP%] {\n width: var(--tree-toggle-size);\n}\n\n.tree-node-leaf-spacer[_ngcontent-%COMP%] {\n width: 20px;\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.tree-node-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--tree-icon-size);\n flex-shrink: 0;\n font-size: var(--tree-icon-size);\n color: var(--tree-icon-color);\n}\n\n.tree-node--leaf[_ngcontent-%COMP%] .tree-node-icon[_ngcontent-%COMP%] {\n color: var(--tree-icon-leaf-color);\n}\n\n\n\n\n\n\n.tree-node-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tree-node-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n font-weight: 500;\n color: var(--tree-text-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tree-node--leaf[_ngcontent-%COMP%] .tree-node-label[_ngcontent-%COMP%] {\n font-weight: 400;\n}\n\n.tree-node-description[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--tree-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n\n\n\n.tree-node-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: var(--tree-badge-bg);\n color: var(--tree-badge-color);\n font-size: var(--tree-badge-size);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.tree-node-selected-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: var(--mj-radius-full);\n background: var(--tree-node-selected-border);\n color: var(--mj-text-inverse);\n font-size: 10px;\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.tree-node-children[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.tree-node-children--animated[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_tree-expand var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n@keyframes _ngcontent-%COMP%_tree-expand {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n\n\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--tree-border-color);\n border-radius: var(--mj-radius-sm);\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--tree-toggle-color);\n}\n\n\n\n\n\n\n@media (max-width: 480px) {\n [_nghost-%COMP%] {\n --tree-node-padding-y: 10px;\n --tree-node-padding-x: 10px;\n --tree-icon-size: 18px;\n }\n\n .tree-node-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-base);\n }\n}"] });
|
|
1650
1660
|
}
|
|
1651
1661
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TreeComponent, [{
|
|
1652
1662
|
type: Component,
|
|
1653
|
-
args: [{ standalone: false, selector: 'mj-tree', template: "<!-- Tree Component Template -->\n<div [ngClass]=\"getContainerClasses()\" tabindex=\"0\">\n\n <!-- Loading State -->\n @if (IsLoading && ShowLoading) {\n <div class=\"tree-loading\">\n <div class=\"tree-loading__spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n <span class=\"tree-loading__text\">Loading...</span>\n </div>\n }\n\n <!-- Error State -->\n @if (ErrorMessage && !IsLoading) {\n <div class=\"tree-error\">\n <i class=\"fa-solid fa-exclamation-triangle tree-error__icon\"></i>\n <span class=\"tree-error__message\">{{ ErrorMessage }}</span>\n <button class=\"tree-error__retry\" (click)=\"Refresh()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Retry\n </button>\n </div>\n }\n\n <!-- Toolbar -->\n @if (ShowExpandCollapseAll && Nodes.length > 0 && !IsLoading) {\n <div class=\"tree-toolbar\">\n <button\n class=\"tree-toolbar__btn\"\n (click)=\"ExpandAll()\"\n title=\"Expand All\">\n <i class=\"fa-solid fa-plus-square\"></i>\n </button>\n <button\n class=\"tree-toolbar__btn\"\n (click)=\"CollapseAll()\"\n title=\"Collapse All\">\n <i class=\"fa-solid fa-minus-square\"></i>\n </button>\n </div>\n }\n\n <!-- Empty State -->\n @if (IsLoaded && Nodes.length === 0 && !ErrorMessage && !IsLoading) {\n <div class=\"tree-empty\">\n <i [class]=\"EmptyIcon + ' tree-empty__icon'\"></i>\n <span class=\"tree-empty__message\">{{ EmptyMessage }}</span>\n </div>\n }\n\n <!-- Tree Content -->\n @if (Nodes.length > 0 && !IsLoading) {\n <div class=\"tree-content\">\n @for (node of Nodes; track trackNode($index, node)) {\n @if (node.Visible) {\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { node: node }\"></ng-container>\n }\n }\n </div>\n }\n</div>\n\n<!-- Recursive Node Template -->\n<ng-template #nodeTemplate let-node=\"node\">\n <div\n [ngClass]=\"getNodeClasses(node)\"\n [style.padding-left]=\"getNodePadding(node)\"\n [attr.data-node-id]=\"node.ID\"\n [attr.data-node-type]=\"node.Type\"\n [attr.aria-expanded]=\"node.Type === 'branch' ? node.Expanded : null\"\n [attr.aria-selected]=\"node.Selected\"\n role=\"treeitem\"\n (click)=\"onNodeClick(node, $event)\"\n (dblclick)=\"onNodeDoubleClick(node, $event)\">\n\n <!-- Toggle Button (for branches with children) -->\n @if (node.Type === 'branch') {\n <span\n class=\"tree-node-toggle\"\n (click)=\"onToggleClick(node, $event)\">\n @if (node.Children.length > 0) {\n <i\n class=\"fa-solid tree-node-toggle__icon\"\n [ngClass]=\"{\n 'fa-chevron-right': !node.Expanded,\n 'fa-chevron-down': node.Expanded\n }\">\n </i>\n }\n @if (node.Children.length === 0) {\n <span\n class=\"tree-node-toggle__spacer\">\n </span>\n }\n </span>\n }\n\n <!-- Leaf Spacer (to align with branches, only when not at root level) -->\n @if (node.Type === 'leaf' && node.Level > 0) {\n <span\n class=\"tree-node-leaf-spacer\"\n >\n </span>\n }\n\n <!-- Icon -->\n @if (ShowIcons) {\n <span\n class=\"tree-node-icon\"\n [style.color]=\"node.Color || null\">\n <i [class]=\"node.Icon\"></i>\n </span>\n }\n\n <!-- Content -->\n <span class=\"tree-node-content\">\n <!-- Label with search highlight -->\n <span class=\"tree-node-label\" [innerHTML]=\"getHighlightedLabel(node)\"></span>\n\n <!-- Description -->\n @if (ShowDescriptions && node.Description) {\n <span\n class=\"tree-node-description\"\n >\n {{ node.Description }}\n </span>\n }\n </span>\n\n <!-- Badge -->\n @if (ShowBadges && node.Badge) {\n <span\n class=\"tree-node-badge\"\n >\n {{ node.Badge }}\n </span>\n }\n\n <!-- Selection Indicator -->\n @if (node.Selected) {\n <span class=\"tree-node-selected-indicator\">\n <i class=\"fa-solid fa-check\"></i>\n </span>\n }\n </div>\n\n <!-- Children (if expanded) -->\n @if (node.Type === 'branch' && node.Expanded && node.Children.length > 0) {\n <div\n class=\"tree-node-children\"\n [class.tree-node-children--animated]=\"AnimateExpandCollapse\"\n role=\"group\">\n @for (child of node.Children; track trackNode($index, child)) {\n @if (child.Visible) {\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { node: child }\"></ng-container>\n }\n }\n </div>\n }\n</ng-template>\n", styles: ["/**\n * Tree Component Styles\n *\n * Uses CSS custom properties for easy theming.\n * Containers can override these variables to customize appearance.\n */\n\n/* ========================================\n CSS Variables (Theming)\n ======================================== */\n\n:host {\n /* Colors */\n --tree-bg: var(--mj-bg-surface);\n --tree-border-color: var(--mj-border-default);\n --tree-text-color: var(--mj-text-primary);\n --tree-text-secondary: var(--mj-text-muted);\n --tree-text-muted: var(--mj-text-disabled);\n\n /* Node Colors */\n --tree-node-hover-bg: var(--mj-bg-surface-sunken);\n --tree-node-selected-bg: var(--mj-brand-primary-subtle);\n --tree-node-selected-border: var(--mj-brand-primary);\n --tree-node-focused-outline: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n --tree-node-match-bg: var(--mj-status-warning-subtle);\n\n /* Icon Colors */\n --tree-icon-color: var(--mj-brand-primary);\n --tree-icon-leaf-color: var(--mj-text-muted);\n --tree-toggle-color: var(--mj-text-disabled);\n\n /* Spacing */\n --tree-node-padding-y: 8px;\n --tree-node-padding-x: 12px;\n --tree-node-gap: 8px;\n --tree-icon-size: 16px;\n --tree-toggle-size: 12px;\n\n /* Animation */\n --tree-transition-duration: 150ms;\n --tree-animation-easing: ease-out;\n\n /* Badge */\n --tree-badge-bg: var(--mj-border-default);\n --tree-badge-color: var(--mj-text-muted);\n --tree-badge-size: 12px;\n\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* ========================================\n Container\n ======================================== */\n\n.tree-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--tree-bg);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n outline: none;\n}\n\n.tree-container:focus-visible {\n outline: 2px solid var(--tree-node-focused-outline);\n outline-offset: -2px;\n}\n\n/* ========================================\n Loading State\n ======================================== */\n\n.tree-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n gap: 12px;\n color: var(--tree-text-muted);\n}\n\n.tree-loading__spinner {\n font-size: var(--mj-text-2xl);\n color: var(--tree-icon-color);\n}\n\n.tree-loading__text {\n font-size: var(--mj-text-sm);\n}\n\n/* ========================================\n Error State\n ======================================== */\n\n.tree-error {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n gap: 12px;\n text-align: center;\n}\n\n.tree-error__icon {\n font-size: 32px;\n color: var(--mj-status-error);\n}\n\n.tree-error__message {\n font-size: var(--mj-text-sm);\n color: var(--tree-text-secondary);\n max-width: 280px;\n}\n\n.tree-error__retry {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--tree-border-color);\n border-radius: var(--mj-radius-md);\n background: var(--tree-bg);\n color: var(--tree-text-color);\n font-size: var(--mj-text-sm);\n cursor: pointer;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-error__retry:hover {\n background: var(--tree-node-hover-bg);\n border-color: var(--tree-icon-color);\n color: var(--tree-icon-color);\n}\n\n/* ========================================\n Empty State\n ======================================== */\n\n.tree-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 16px;\n gap: 12px;\n color: var(--tree-text-muted);\n}\n\n.tree-empty__icon {\n font-size: 40px;\n opacity: 0.5;\n}\n\n.tree-empty__message {\n font-size: var(--mj-text-sm);\n}\n\n/* ========================================\n Toolbar\n ======================================== */\n\n.tree-toolbar {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--tree-border-color);\n background: var(--tree-node-hover-bg);\n}\n\n.tree-toolbar__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: var(--mj-radius-sm);\n background: transparent;\n color: var(--tree-text-secondary);\n cursor: pointer;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-toolbar__btn:hover {\n background: var(--tree-bg);\n color: var(--tree-icon-color);\n}\n\n/* ========================================\n Tree Content\n ======================================== */\n\n.tree-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px 0;\n}\n\n/* ========================================\n Tree Node\n ======================================== */\n\n.tree-node {\n display: flex;\n align-items: center;\n gap: var(--tree-node-gap);\n padding: var(--tree-node-padding-y) var(--tree-node-padding-x);\n cursor: pointer;\n user-select: none;\n border-left: 3px solid transparent;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n min-height: 36px;\n}\n\n.tree-node:hover {\n background: var(--tree-node-hover-bg);\n}\n\n.tree-node--selected {\n background: var(--tree-node-selected-bg);\n border-left-color: var(--tree-node-selected-border);\n}\n\n.tree-node--selected:hover {\n background: var(--tree-node-selected-bg);\n}\n\n.tree-node--focused {\n outline: 2px solid var(--tree-node-focused-outline);\n outline-offset: -2px;\n}\n\n/* Search highlight for matching text portion */\n.tree-search-highlight {\n background: var(--tree-node-match-bg);\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: 500;\n}\n\n/* ========================================\n Toggle Button\n ======================================== */\n\n.tree-node-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n border-radius: var(--mj-radius-sm);\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-node-toggle:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.tree-node-toggle__icon {\n font-size: var(--tree-toggle-size);\n color: var(--tree-toggle-color);\n transition: transform var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-node--expanded .tree-node-toggle__icon {\n color: var(--tree-icon-color);\n}\n\n.tree-node-toggle__spacer {\n width: var(--tree-toggle-size);\n}\n\n.tree-node-leaf-spacer {\n width: 20px;\n flex-shrink: 0;\n}\n\n/* ========================================\n Node Icon\n ======================================== */\n\n.tree-node-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--tree-icon-size);\n flex-shrink: 0;\n font-size: var(--tree-icon-size);\n color: var(--tree-icon-color);\n}\n\n.tree-node--leaf .tree-node-icon {\n color: var(--tree-icon-leaf-color);\n}\n\n/* ========================================\n Node Content\n ======================================== */\n\n.tree-node-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tree-node-label {\n font-size: var(--mj-text-sm);\n font-weight: 500;\n color: var(--tree-text-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tree-node--leaf .tree-node-label {\n font-weight: 400;\n}\n\n.tree-node-description {\n font-size: var(--mj-text-xs);\n color: var(--tree-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* ========================================\n Node Badge\n ======================================== */\n\n.tree-node-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: var(--tree-badge-bg);\n color: var(--tree-badge-color);\n font-size: var(--tree-badge-size);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n/* ========================================\n Selection Indicator\n ======================================== */\n\n.tree-node-selected-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: var(--mj-radius-full);\n background: var(--tree-node-selected-border);\n color: var(--mj-text-inverse);\n font-size: 10px;\n flex-shrink: 0;\n}\n\n/* ========================================\n Children Container\n ======================================== */\n\n.tree-node-children {\n overflow: hidden;\n}\n\n.tree-node-children--animated {\n animation: tree-expand var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n@keyframes tree-expand {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* ========================================\n Scrollbar Styling\n ======================================== */\n\n.tree-content::-webkit-scrollbar {\n width: 8px;\n}\n\n.tree-content::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.tree-content::-webkit-scrollbar-thumb {\n background: var(--tree-border-color);\n border-radius: var(--mj-radius-sm);\n}\n\n.tree-content::-webkit-scrollbar-thumb:hover {\n background: var(--tree-toggle-color);\n}\n\n/* ========================================\n Responsive Adjustments\n ======================================== */\n\n@media (max-width: 480px) {\n :host {\n --tree-node-padding-y: 10px;\n --tree-node-padding-x: 10px;\n --tree-icon-size: 18px;\n }\n\n .tree-node-label {\n font-size: var(--mj-text-base);\n }\n}\n"] }]
|
|
1663
|
+
args: [{ standalone: false, selector: 'mj-tree', template: "<!-- Tree Component Template -->\n<div [ngClass]=\"getContainerClasses()\" tabindex=\"0\">\n\n <!-- Loading State -->\n @if (IsLoading && ShowLoading) {\n <div class=\"tree-loading\">\n <div class=\"tree-loading__spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n <span class=\"tree-loading__text\">Loading...</span>\n </div>\n }\n\n <!-- Error State -->\n @if (ErrorMessage && !IsLoading) {\n <div class=\"tree-error\">\n <i class=\"fa-solid fa-exclamation-triangle tree-error__icon\"></i>\n <span class=\"tree-error__message\">{{ ErrorMessage }}</span>\n <button class=\"tree-error__retry\" (click)=\"Refresh()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Retry\n </button>\n </div>\n }\n\n <!-- Toolbar -->\n @if (ShowExpandCollapseAll && Nodes.length > 0 && !IsLoading) {\n <div class=\"tree-toolbar\">\n <button\n class=\"tree-toolbar__btn\"\n (click)=\"ExpandAll()\"\n title=\"Expand All\">\n <i class=\"fa-solid fa-plus-square\"></i>\n </button>\n <button\n class=\"tree-toolbar__btn\"\n (click)=\"CollapseAll()\"\n title=\"Collapse All\">\n <i class=\"fa-solid fa-minus-square\"></i>\n </button>\n </div>\n }\n\n <!-- Empty State -->\n @if (IsLoaded && Nodes.length === 0 && !ErrorMessage && !IsLoading) {\n <mj-empty-state class=\"tree-empty\" Size=\"compact\"\n [Icon]=\"EmptyIcon\" [Title]=\"EmptyMessage\" />\n }\n\n <!-- Tree Content -->\n @if (Nodes.length > 0 && !IsLoading) {\n <div class=\"tree-content\">\n @for (node of Nodes; track trackNode($index, node)) {\n @if (node.Visible) {\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { node: node }\"></ng-container>\n }\n }\n </div>\n }\n</div>\n\n<!-- Recursive Node Template -->\n<ng-template #nodeTemplate let-node=\"node\">\n <div\n [ngClass]=\"getNodeClasses(node)\"\n [style.padding-left]=\"getNodePadding(node)\"\n [attr.data-node-id]=\"node.ID\"\n [attr.data-node-type]=\"node.Type\"\n [attr.aria-expanded]=\"node.Type === 'branch' ? node.Expanded : null\"\n [attr.aria-selected]=\"node.Selected\"\n role=\"treeitem\"\n (click)=\"onNodeClick(node, $event)\"\n (dblclick)=\"onNodeDoubleClick(node, $event)\">\n\n <!-- Toggle Button (for branches with children) -->\n @if (node.Type === 'branch') {\n <span\n class=\"tree-node-toggle\"\n (click)=\"onToggleClick(node, $event)\">\n @if (node.Children.length > 0) {\n <i\n class=\"fa-solid tree-node-toggle__icon\"\n [ngClass]=\"{\n 'fa-chevron-right': !node.Expanded,\n 'fa-chevron-down': node.Expanded\n }\">\n </i>\n }\n @if (node.Children.length === 0) {\n <span\n class=\"tree-node-toggle__spacer\">\n </span>\n }\n </span>\n }\n\n <!-- Leaf Spacer (to align with branches, only when not at root level) -->\n @if (node.Type === 'leaf' && node.Level > 0) {\n <span\n class=\"tree-node-leaf-spacer\"\n >\n </span>\n }\n\n <!-- Icon -->\n @if (ShowIcons) {\n <span\n class=\"tree-node-icon\"\n [style.color]=\"node.Color || null\">\n <i [class]=\"node.Icon\"></i>\n </span>\n }\n\n <!-- Content -->\n <span class=\"tree-node-content\">\n <!-- Label with search highlight -->\n <span class=\"tree-node-label\" [innerHTML]=\"getHighlightedLabel(node)\"></span>\n\n <!-- Description -->\n @if (ShowDescriptions && node.Description) {\n <span\n class=\"tree-node-description\"\n >\n {{ node.Description }}\n </span>\n }\n </span>\n\n <!-- Badge -->\n @if (ShowBadges && node.Badge) {\n <span\n class=\"tree-node-badge\"\n >\n {{ node.Badge }}\n </span>\n }\n\n <!-- Selection Indicator -->\n @if (node.Selected) {\n <span class=\"tree-node-selected-indicator\">\n <i class=\"fa-solid fa-check\"></i>\n </span>\n }\n </div>\n\n <!-- Children (if expanded) -->\n @if (node.Type === 'branch' && node.Expanded && node.Children.length > 0) {\n <div\n class=\"tree-node-children\"\n [class.tree-node-children--animated]=\"AnimateExpandCollapse\"\n role=\"group\">\n @for (child of node.Children; track trackNode($index, child)) {\n @if (child.Visible) {\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context: { node: child }\"></ng-container>\n }\n }\n </div>\n }\n</ng-template>\n", styles: ["/**\n * Tree Component Styles\n *\n * Uses CSS custom properties for easy theming.\n * Containers can override these variables to customize appearance.\n */\n\n/* ========================================\n CSS Variables (Theming)\n ======================================== */\n\n:host {\n /* Colors */\n --tree-bg: var(--mj-bg-surface);\n --tree-border-color: var(--mj-border-default);\n --tree-text-color: var(--mj-text-primary);\n --tree-text-secondary: var(--mj-text-muted);\n --tree-text-muted: var(--mj-text-disabled);\n\n /* Node Colors */\n --tree-node-hover-bg: var(--mj-bg-surface-sunken);\n --tree-node-selected-bg: var(--mj-brand-primary-subtle);\n --tree-node-selected-border: var(--mj-brand-primary);\n --tree-node-focused-outline: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n --tree-node-match-bg: var(--mj-status-warning-subtle);\n\n /* Icon Colors */\n --tree-icon-color: var(--mj-brand-primary);\n --tree-icon-leaf-color: var(--mj-text-muted);\n --tree-toggle-color: var(--mj-text-disabled);\n\n /* Spacing */\n --tree-node-padding-y: 8px;\n --tree-node-padding-x: 12px;\n --tree-node-gap: 8px;\n --tree-icon-size: 16px;\n --tree-toggle-size: 12px;\n\n /* Animation */\n --tree-transition-duration: 150ms;\n --tree-animation-easing: ease-out;\n\n /* Badge */\n --tree-badge-bg: var(--mj-border-default);\n --tree-badge-color: var(--mj-text-muted);\n --tree-badge-size: 12px;\n\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* ========================================\n Container\n ======================================== */\n\n.tree-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--tree-bg);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n outline: none;\n}\n\n.tree-container:focus-visible {\n outline: 2px solid var(--tree-node-focused-outline);\n outline-offset: -2px;\n}\n\n/* ========================================\n Loading State\n ======================================== */\n\n.tree-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n gap: 12px;\n color: var(--tree-text-muted);\n}\n\n.tree-loading__spinner {\n font-size: var(--mj-text-2xl);\n color: var(--tree-icon-color);\n}\n\n.tree-loading__text {\n font-size: var(--mj-text-sm);\n}\n\n/* ========================================\n Error State\n ======================================== */\n\n.tree-error {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 32px 16px;\n gap: 12px;\n text-align: center;\n}\n\n.tree-error__icon {\n font-size: 32px;\n color: var(--mj-status-error);\n}\n\n.tree-error__message {\n font-size: var(--mj-text-sm);\n color: var(--tree-text-secondary);\n max-width: 280px;\n}\n\n.tree-error__retry {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--tree-border-color);\n border-radius: var(--mj-radius-md);\n background: var(--tree-bg);\n color: var(--tree-text-color);\n font-size: var(--mj-text-sm);\n cursor: pointer;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-error__retry:hover {\n background: var(--tree-node-hover-bg);\n border-color: var(--tree-icon-color);\n color: var(--tree-icon-color);\n}\n\n/* ========================================\n Empty State\n ======================================== */\n\n.tree-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 16px;\n gap: 12px;\n color: var(--tree-text-muted);\n}\n\n.tree-empty__icon {\n font-size: 40px;\n opacity: 0.5;\n}\n\n.tree-empty__message {\n font-size: var(--mj-text-sm);\n}\n\n/* ========================================\n Toolbar\n ======================================== */\n\n.tree-toolbar {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--tree-border-color);\n background: var(--tree-node-hover-bg);\n}\n\n.tree-toolbar__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: var(--mj-radius-sm);\n background: transparent;\n color: var(--tree-text-secondary);\n cursor: pointer;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-toolbar__btn:hover {\n background: var(--tree-bg);\n color: var(--tree-icon-color);\n}\n\n/* ========================================\n Tree Content\n ======================================== */\n\n.tree-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px 0;\n}\n\n/* ========================================\n Tree Node\n ======================================== */\n\n.tree-node {\n display: flex;\n align-items: center;\n gap: var(--tree-node-gap);\n padding: var(--tree-node-padding-y) var(--tree-node-padding-x);\n cursor: pointer;\n user-select: none;\n border-left: 3px solid transparent;\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n min-height: 36px;\n}\n\n.tree-node:hover {\n background: var(--tree-node-hover-bg);\n}\n\n.tree-node--selected {\n background: var(--tree-node-selected-bg);\n border-left-color: var(--tree-node-selected-border);\n}\n\n.tree-node--selected:hover {\n background: var(--tree-node-selected-bg);\n}\n\n.tree-node--focused {\n outline: 2px solid var(--tree-node-focused-outline);\n outline-offset: -2px;\n}\n\n/* Search highlight for matching text portion */\n.tree-search-highlight {\n background: var(--tree-node-match-bg);\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: 500;\n}\n\n/* ========================================\n Toggle Button\n ======================================== */\n\n.tree-node-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n border-radius: var(--mj-radius-sm);\n transition: all var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-node-toggle:hover {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.tree-node-toggle__icon {\n font-size: var(--tree-toggle-size);\n color: var(--tree-toggle-color);\n transition: transform var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n.tree-node--expanded .tree-node-toggle__icon {\n color: var(--tree-icon-color);\n}\n\n.tree-node-toggle__spacer {\n width: var(--tree-toggle-size);\n}\n\n.tree-node-leaf-spacer {\n width: 20px;\n flex-shrink: 0;\n}\n\n/* ========================================\n Node Icon\n ======================================== */\n\n.tree-node-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--tree-icon-size);\n flex-shrink: 0;\n font-size: var(--tree-icon-size);\n color: var(--tree-icon-color);\n}\n\n.tree-node--leaf .tree-node-icon {\n color: var(--tree-icon-leaf-color);\n}\n\n/* ========================================\n Node Content\n ======================================== */\n\n.tree-node-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tree-node-label {\n font-size: var(--mj-text-sm);\n font-weight: 500;\n color: var(--tree-text-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tree-node--leaf .tree-node-label {\n font-weight: 400;\n}\n\n.tree-node-description {\n font-size: var(--mj-text-xs);\n color: var(--tree-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* ========================================\n Node Badge\n ======================================== */\n\n.tree-node-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: var(--tree-badge-bg);\n color: var(--tree-badge-color);\n font-size: var(--tree-badge-size);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n/* ========================================\n Selection Indicator\n ======================================== */\n\n.tree-node-selected-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: var(--mj-radius-full);\n background: var(--tree-node-selected-border);\n color: var(--mj-text-inverse);\n font-size: 10px;\n flex-shrink: 0;\n}\n\n/* ========================================\n Children Container\n ======================================== */\n\n.tree-node-children {\n overflow: hidden;\n}\n\n.tree-node-children--animated {\n animation: tree-expand var(--tree-transition-duration) var(--tree-animation-easing);\n}\n\n@keyframes tree-expand {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* ========================================\n Scrollbar Styling\n ======================================== */\n\n.tree-content::-webkit-scrollbar {\n width: 8px;\n}\n\n.tree-content::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.tree-content::-webkit-scrollbar-thumb {\n background: var(--tree-border-color);\n border-radius: var(--mj-radius-sm);\n}\n\n.tree-content::-webkit-scrollbar-thumb:hover {\n background: var(--tree-toggle-color);\n}\n\n/* ========================================\n Responsive Adjustments\n ======================================== */\n\n@media (max-width: 480px) {\n :host {\n --tree-node-padding-y: 10px;\n --tree-node-padding-x: 10px;\n --tree-icon-size: 18px;\n }\n\n .tree-node-label {\n font-size: var(--mj-text-base);\n }\n}\n"] }]
|
|
1654
1664
|
}], () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], { BranchConfig: [{
|
|
1655
1665
|
type: Input
|
|
1656
1666
|
}], LeafConfig: [{
|
|
@@ -1663,6 +1673,8 @@ export class TreeComponent {
|
|
|
1663
1673
|
type: Input
|
|
1664
1674
|
}], ExpandedIDs: [{
|
|
1665
1675
|
type: Input
|
|
1676
|
+
}], DefaultExpansion: [{
|
|
1677
|
+
type: Input
|
|
1666
1678
|
}], ShowExpandCollapseAll: [{
|
|
1667
1679
|
type: Input
|
|
1668
1680
|
}], EnableKeyboardNavigation: [{
|