@sdcorejs/angular 21.0.4 → 21.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/{scss/README.md → STYLE-GUIDE.md} +3 -0
- package/fesm2022/sdcorejs-angular-components-form-generic.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-org-chart.mjs +110 -0
- package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -0
- package/fesm2022/sdcorejs-angular-components-query-bar.mjs +37 -8
- package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-query-builder.mjs +258 -60
- package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-section.mjs +8 -5
- package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-splitter.mjs +24 -13
- package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-table.mjs +6 -2
- package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tree.mjs +526 -0
- package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -0
- package/fesm2022/sdcorejs-angular-components.mjs +2 -0
- package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-select.mjs +66 -7
- package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
- package/package.json +10 -2
- package/types/sdcorejs-angular-components-org-chart.d.ts +67 -0
- package/types/sdcorejs-angular-components-query-bar.d.ts +37 -2
- package/types/sdcorejs-angular-components-query-builder.d.ts +96 -30
- package/types/sdcorejs-angular-components-section.d.ts +4 -1
- package/types/sdcorejs-angular-components-splitter.d.ts +20 -1
- package/types/sdcorejs-angular-components-table.d.ts +2 -0
- package/types/sdcorejs-angular-components-tree.d.ts +253 -0
- package/types/sdcorejs-angular-components.d.ts +2 -0
- package/types/sdcorejs-angular-forms-select.d.ts +29 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import * as _sdcorejs_angular_components_query_builder from '@sdcorejs/angular/components/query-builder';
|
|
1
2
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { Operator, Filter } from '@sdcorejs/utils/models';
|
|
3
|
+
import { Operator, DateRelative, Filter } from '@sdcorejs/utils/models';
|
|
3
4
|
|
|
4
5
|
/** Field kinds the builder understands. Drives the operator set + value editor. */
|
|
5
6
|
type SdQueryBuilderFieldType = 'string' | 'number' | 'boolean' | 'date' | 'datetime' | 'values';
|
|
@@ -21,6 +22,8 @@ interface SdQueryBuilderField {
|
|
|
21
22
|
label: string;
|
|
22
23
|
/** Field type — picks the default operator set + value editor control. */
|
|
23
24
|
type: SdQueryBuilderFieldType;
|
|
25
|
+
/** Material icon shown before the label in the field picker; falls back to `QB_TYPE_ICON[type]` then `'tune'`. */
|
|
26
|
+
icon?: string;
|
|
24
27
|
/** Override the allowed operator set (otherwise `QB_OPERATORS_BY_TYPE[type]`). */
|
|
25
28
|
operators?: Operator[];
|
|
26
29
|
/** Override the starting operator (otherwise `QB_DEFAULT_OPERATOR_BY_TYPE[type]`). */
|
|
@@ -35,8 +38,29 @@ interface SdQueryBuilderField {
|
|
|
35
38
|
min?: number | string;
|
|
36
39
|
/** Upper bound for number / date value editors. */
|
|
37
40
|
max?: number | string;
|
|
41
|
+
/** Optional domain guard for field-to-field comparison candidates. */
|
|
42
|
+
compareGroup?: string;
|
|
43
|
+
/** Set false to hide this field from field-to-field comparison. */
|
|
44
|
+
allowFieldCompare?: boolean;
|
|
45
|
+
}
|
|
46
|
+
interface SdQueryBuilderOption {
|
|
47
|
+
autoId?: string;
|
|
48
|
+
fields: SdQueryBuilderField[];
|
|
49
|
+
mode?: 'edit' | 'view';
|
|
50
|
+
comparisonMode?: QbComparisonMode;
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
value?: Filter | null;
|
|
53
|
+
filters?: Filter[];
|
|
54
|
+
rootLogic?: 'AND' | 'OR';
|
|
55
|
+
onValueChange?: (value: Filter | null) => void;
|
|
56
|
+
onFiltersChange?: (filters: Filter[]) => void;
|
|
57
|
+
onRootLogicChange?: (logic: 'AND' | 'OR') => void;
|
|
38
58
|
}
|
|
39
59
|
type QbNode = QbGroup | QbRule;
|
|
60
|
+
/** Component-level capability for right-hand operands. */
|
|
61
|
+
type QbComparisonMode = 'value-only' | 'value-or-field';
|
|
62
|
+
/** Per-rule right-hand operand source. */
|
|
63
|
+
type QbValueSource = 'literal' | 'field';
|
|
40
64
|
/** A logical group of nodes joined by AND / OR. Maps to `FilterAndOr`. */
|
|
41
65
|
interface QbGroup {
|
|
42
66
|
id: string;
|
|
@@ -54,6 +78,10 @@ interface QbRule {
|
|
|
54
78
|
operator?: Operator;
|
|
55
79
|
/** Single value, `{ from, to }` for BETWEEN, or an array for IN / NOT_IN. */
|
|
56
80
|
value?: any;
|
|
81
|
+
/** Internal UI state: literal input or a same-type field reference. */
|
|
82
|
+
valueSource?: QbValueSource;
|
|
83
|
+
/** Right-hand field key when `valueSource` is `'field'`. */
|
|
84
|
+
compareField?: string;
|
|
57
85
|
}
|
|
58
86
|
/** Type guard — narrows a `QbNode` to a `QbGroup`. */
|
|
59
87
|
declare function isQbGroup(node: QbNode): node is QbGroup;
|
|
@@ -79,38 +107,59 @@ declare function qbDefaultOperator(field: SdQueryBuilderField | undefined): Oper
|
|
|
79
107
|
declare function qbIsNoDataOperator(op: Operator | undefined): boolean;
|
|
80
108
|
/** True when `op` is IN / NOT_IN (array value). */
|
|
81
109
|
declare function qbIsMultiOperator(op: Operator | undefined): boolean;
|
|
110
|
+
/** True when the operator accepts one right-hand operand, including a field reference. */
|
|
111
|
+
declare function qbSupportsFieldCompareOperator(op: Operator | undefined): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Icon fallback per field type when `SdQueryBuilderField.icon` is not set.
|
|
114
|
+
* Mirrors query-bar's `SD_QUERY_TYPE_ICON` so the two components read consistently,
|
|
115
|
+
* but kept local so query-builder has no dependency on the query-bar package.
|
|
116
|
+
*/
|
|
117
|
+
declare const QB_TYPE_ICON: Record<SdQueryBuilderFieldType, string>;
|
|
118
|
+
/**
|
|
119
|
+
* Icon shown before a field in the field picker / selected trigger.
|
|
120
|
+
* Priority: `field.icon` → `QB_TYPE_ICON[field.type]` → `'tune'` (default, like query-bar).
|
|
121
|
+
*/
|
|
122
|
+
declare function qbFieldIcon(field: SdQueryBuilderField | undefined): string;
|
|
82
123
|
/** Next stable node id with the given prefix. */
|
|
83
124
|
declare function qbId(prefix?: string): string;
|
|
84
125
|
/** Build a fresh rule node (optionally pre-filled). */
|
|
85
|
-
declare function qbNewRule(field?: string, operator?: Operator, value?: any): QbRule;
|
|
126
|
+
declare function qbNewRule(field?: string, operator?: Operator, value?: any, valueSource?: QbValueSource, compareField?: string): QbRule;
|
|
86
127
|
/** Build a fresh group node. */
|
|
87
128
|
declare function qbNewGroup(logic?: 'AND' | 'OR', children?: QbNode[]): QbGroup;
|
|
88
|
-
/** Offset unit for a relative date. */
|
|
89
|
-
type SdQbRelativeUnit = '
|
|
90
|
-
/** Offset direction for a relative date. */
|
|
91
|
-
type SdQbRelativeDirection = '
|
|
92
|
-
/**
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
/** Offset unit — only for `rel: 'offset'`. */
|
|
97
|
-
unit?: SdQbRelativeUnit;
|
|
98
|
-
/** Offset magnitude (>= 1) — only for `rel: 'offset'`. */
|
|
99
|
-
amount?: number;
|
|
100
|
-
/** Offset direction — only for `rel: 'offset'`. */
|
|
101
|
-
direction?: SdQbRelativeDirection;
|
|
102
|
-
}
|
|
129
|
+
/** Offset unit for a relative date — re-exported from the utils `DateRelative` model. */
|
|
130
|
+
type SdQbRelativeUnit = DateRelative['unit'];
|
|
131
|
+
/** Offset direction for a relative date — re-exported from the utils `DateRelative` model. */
|
|
132
|
+
type SdQbRelativeDirection = DateRelative['direction'];
|
|
133
|
+
/** Sentinel held as a rule value (and emitted as `data`) for the "today" date mode. */
|
|
134
|
+
declare const QB_TODAY = "TODAY";
|
|
135
|
+
/** The `'TODAY'` sentinel type (matches the utils `date-today` data literal). */
|
|
136
|
+
type QbToday = typeof QB_TODAY;
|
|
103
137
|
/** Date value editor mode for a date/datetime rule (derived from the rule value). */
|
|
104
138
|
type QbDateMode = 'absolute' | 'now' | 'relative';
|
|
105
|
-
/** Type guard — narrows
|
|
106
|
-
declare
|
|
139
|
+
/** Type guard — narrows a rule value to a utils `DateRelative` (offset spec). */
|
|
140
|
+
declare const qbIsRelativeDate: (v: any) => v is DateRelative;
|
|
141
|
+
/** Type guard — narrows a rule value to the `'TODAY'` sentinel ("now"/today mode). */
|
|
142
|
+
declare function qbIsToday(v: any): v is QbToday;
|
|
107
143
|
/** Starting relative value when a rule first switches to "relative" mode. */
|
|
108
|
-
declare function qbDefaultRelative():
|
|
109
|
-
/**
|
|
110
|
-
|
|
144
|
+
declare function qbDefaultRelative(): DateRelative;
|
|
145
|
+
/** One date-mode option — carries a Material icon shown in the dropdown + selected trigger. */
|
|
146
|
+
interface QbDateModeOption {
|
|
111
147
|
value: QbDateMode;
|
|
112
148
|
display: string;
|
|
113
|
-
|
|
149
|
+
/** Material icon name (outlined set). */
|
|
150
|
+
icon: string;
|
|
151
|
+
}
|
|
152
|
+
/** Stable option list for the date-mode select (module ref — never reallocated). */
|
|
153
|
+
declare const QB_DATE_MODES: ReadonlyArray<QbDateModeOption>;
|
|
154
|
+
/** One value-source option for field-to-field comparison UI. */
|
|
155
|
+
interface QbValueSourceOption {
|
|
156
|
+
value: QbValueSource;
|
|
157
|
+
display: string;
|
|
158
|
+
/** Material icon name (outlined set). */
|
|
159
|
+
icon: string;
|
|
160
|
+
}
|
|
161
|
+
/** Stable option list for choosing between a literal value and another field. */
|
|
162
|
+
declare const QB_VALUE_SOURCE_OPTIONS: ReadonlyArray<QbValueSourceOption>;
|
|
114
163
|
/** Stable combined direction×unit option list (token `'unit:direction'`). */
|
|
115
164
|
declare const QB_RELATIVE_UNIT_OPTIONS: ReadonlyArray<{
|
|
116
165
|
value: string;
|
|
@@ -128,10 +177,14 @@ declare const QB_EMPTY_OPTIONS: SdQueryBuilderFieldOption[];
|
|
|
128
177
|
*/
|
|
129
178
|
declare class SdQueryBuilder {
|
|
130
179
|
#private;
|
|
180
|
+
/** Main option object. Prefer this API for new usage; individual inputs stay as a migration bridge. */
|
|
181
|
+
readonly option: _angular_core.InputSignal<SdQueryBuilderOption | undefined>;
|
|
131
182
|
/** Filterable fields — each declares a `type` that drives the operator set + value editor. */
|
|
132
183
|
readonly fields: _angular_core.InputSignal<SdQueryBuilderField[]>;
|
|
133
184
|
/** `'edit'` (default) = interactive tree · `'view'` = read-only raw-query string. */
|
|
134
185
|
readonly mode: _angular_core.InputSignal<"edit" | "view">;
|
|
186
|
+
/** `value-only` = literal operands only · `value-or-field` = each rule may compare against another field. */
|
|
187
|
+
readonly comparisonMode: _angular_core.InputSignal<QbComparisonMode>;
|
|
135
188
|
/** Disable all editing controls. */
|
|
136
189
|
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
137
190
|
/** Prefix for `data-autoid` on inner controls (E2E selectors). */
|
|
@@ -144,12 +197,16 @@ declare class SdQueryBuilder {
|
|
|
144
197
|
readonly rootLogic: _angular_core.ModelSignal<"AND" | "OR">;
|
|
145
198
|
readonly tree: _angular_core.Signal<QbGroup>;
|
|
146
199
|
/** `field.key` → field, for fast lookup from a rule. */
|
|
200
|
+
readonly resolvedFields: _angular_core.Signal<SdQueryBuilderField[]>;
|
|
201
|
+
readonly resolvedMode: _angular_core.Signal<"edit" | "view">;
|
|
202
|
+
readonly resolvedComparisonMode: _angular_core.Signal<QbComparisonMode>;
|
|
203
|
+
readonly resolvedDisabled: _angular_core.Signal<boolean>;
|
|
204
|
+
readonly resolvedAutoId: _angular_core.Signal<string | undefined>;
|
|
147
205
|
readonly fieldByKey: _angular_core.Signal<Record<string, SdQueryBuilderField>>;
|
|
148
206
|
/** Stable option list for the date-mode select. */
|
|
149
|
-
readonly dateModes: readonly
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}[];
|
|
207
|
+
readonly dateModes: readonly _sdcorejs_angular_components_query_builder.QbDateModeOption[];
|
|
208
|
+
/** Stable option list for the literal-vs-field operand select. */
|
|
209
|
+
readonly valueSourceOptions: readonly _sdcorejs_angular_components_query_builder.QbValueSourceOption[];
|
|
153
210
|
/** Stable combined unit×direction option list for the relative select. */
|
|
154
211
|
readonly relativeUnitOptions: readonly {
|
|
155
212
|
value: string;
|
|
@@ -160,6 +217,8 @@ declare class SdQueryBuilder {
|
|
|
160
217
|
readonly isView: _angular_core.Signal<boolean>;
|
|
161
218
|
/** Expose the type-guard to the template. */
|
|
162
219
|
readonly isGroup: typeof isQbGroup;
|
|
220
|
+
/** Resolve the leading icon for a field (own `icon` → per-type → `'tune'`) — used by the field picker. */
|
|
221
|
+
readonly fieldIcon: typeof qbFieldIcon;
|
|
163
222
|
constructor();
|
|
164
223
|
/** Switch a group's AND/OR connector and re-emit. No-op when disabled or unchanged. */
|
|
165
224
|
setGroupLogic(group: QbGroup, logic: 'AND' | 'OR'): void;
|
|
@@ -189,12 +248,19 @@ declare class SdQueryBuilder {
|
|
|
189
248
|
setBetweenFrom(rule: QbRule, raw: any): void;
|
|
190
249
|
/** Set the upper bound of a BETWEEN rule's `{ from, to }` value. */
|
|
191
250
|
setBetweenTo(rule: QbRule, raw: any): void;
|
|
251
|
+
setValueSource(rule: QbRule, source: QbValueSource): void;
|
|
252
|
+
setCompareField(rule: QbRule, key: any): void;
|
|
192
253
|
/** The field metadata for a rule's current `field` key (or undefined if unset). */
|
|
193
254
|
fieldOf(rule: QbRule): SdQueryBuilderField | undefined;
|
|
194
255
|
/** Operators allowed for a rule, derived from its field's type / override. */
|
|
195
256
|
allowedOperators(rule: QbRule): Operator[];
|
|
196
257
|
/** Whether to render the operator picker — hidden when only one operator is allowed. */
|
|
197
258
|
showOperatorSelector(rule: QbRule): boolean;
|
|
259
|
+
compareFields(rule: QbRule): SdQueryBuilderField[];
|
|
260
|
+
canCompareWithField(rule: QbRule): boolean;
|
|
261
|
+
showValueSourceSelector(rule: QbRule): boolean;
|
|
262
|
+
valueSourceOf(rule: QbRule): QbValueSource;
|
|
263
|
+
isFieldSource(rule: QbRule): boolean;
|
|
198
264
|
/** True for NULL / NOT_NULL — the template then renders no value editor. */
|
|
199
265
|
isNoData(op: Operator | undefined): boolean;
|
|
200
266
|
/** True for IN / NOT_IN — the template then renders a multi-select value editor. */
|
|
@@ -216,7 +282,7 @@ declare class SdQueryBuilder {
|
|
|
216
282
|
/** Build a `data-autoid` for an inner control under this builder's `autoId` prefix. */
|
|
217
283
|
autoIdFor(suffix: string): string;
|
|
218
284
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdQueryBuilder, never>;
|
|
219
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdQueryBuilder, "sd-query-builder", never, { "fields": { "alias": "fields"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "autoId": { "alias": "autoId"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "rootLogic": { "alias": "rootLogic"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "filters": "filtersChange"; "rootLogic": "rootLogicChange"; }, never, never, true, never>;
|
|
285
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdQueryBuilder, "sd-query-builder", never, { "option": { "alias": "option"; "required": false; "isSignal": true; }; "fields": { "alias": "fields"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "comparisonMode": { "alias": "comparisonMode"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "autoId": { "alias": "autoId"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "rootLogic": { "alias": "rootLogic"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "filters": "filtersChange"; "rootLogic": "rootLogicChange"; }, never, never, true, never>;
|
|
220
286
|
}
|
|
221
287
|
|
|
222
288
|
/**
|
|
@@ -250,5 +316,5 @@ declare function filterToTree(filter: Filter | null | undefined): QbGroup;
|
|
|
250
316
|
*/
|
|
251
317
|
declare function filterToTokens(filter: Filter | null | undefined, fields: SdQueryBuilderField[]): QbToken[];
|
|
252
318
|
|
|
253
|
-
export { QB_DATE_MODES, QB_DEFAULT_OPERATOR_BY_TYPE, QB_EMPTY_OPTIONS, QB_MULTI_OPERATORS, QB_NO_DATA_OPERATORS, QB_OPERATORS_BY_TYPE, QB_RELATIVE_UNIT_OPTIONS, SdQueryBuilder, filterToTokens, filterToTree, isQbGroup, qbAllowedOperators, qbDefaultOperator, qbDefaultRelative, qbId, qbIsMultiOperator, qbIsNoDataOperator, qbIsRelativeDate, qbNewGroup, qbNewRule, treeToFilter };
|
|
254
|
-
export type { QbDateMode, QbGroup, QbNode, QbRule, QbToken, QbTokenKind,
|
|
319
|
+
export { QB_DATE_MODES, QB_DEFAULT_OPERATOR_BY_TYPE, QB_EMPTY_OPTIONS, QB_MULTI_OPERATORS, QB_NO_DATA_OPERATORS, QB_OPERATORS_BY_TYPE, QB_RELATIVE_UNIT_OPTIONS, QB_TODAY, QB_TYPE_ICON, QB_VALUE_SOURCE_OPTIONS, SdQueryBuilder, filterToTokens, filterToTree, isQbGroup, qbAllowedOperators, qbDefaultOperator, qbDefaultRelative, qbFieldIcon, qbId, qbIsMultiOperator, qbIsNoDataOperator, qbIsRelativeDate, qbIsToday, qbNewGroup, qbNewRule, qbSupportsFieldCompareOperator, treeToFilter };
|
|
320
|
+
export type { QbComparisonMode, QbDateMode, QbDateModeOption, QbGroup, QbNode, QbRule, QbToday, QbToken, QbTokenKind, QbValueSource, QbValueSourceOption, SdQbRelativeDirection, SdQbRelativeUnit, SdQueryBuilderField, SdQueryBuilderFieldOption, SdQueryBuilderFieldType, SdQueryBuilderOption };
|
|
@@ -8,13 +8,16 @@ declare class SdSection {
|
|
|
8
8
|
icon: _angular_core.InputSignal<string | null | undefined>;
|
|
9
9
|
iconColor: _angular_core.InputSignal<Color>;
|
|
10
10
|
collapsed: _angular_core.ModelSignal<boolean>;
|
|
11
|
+
collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
12
|
+
/** @deprecated Use `collapsible` instead. */
|
|
11
13
|
collapsable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
14
|
+
readonly isCollapsible: _angular_core.Signal<boolean>;
|
|
12
15
|
hideHeader: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
13
16
|
noPaddingBody: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
14
17
|
constructor();
|
|
15
18
|
toggleCollapse: () => void;
|
|
16
19
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdSection, never>;
|
|
17
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdSection, "sd-section", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subTitle": { "alias": "subTitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "collapsable": { "alias": "collapsable"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; "noPaddingBody": { "alias": "noPaddingBody"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["[sdHeaderLeft]", "[sdHeaderRight]", "*"], true, never>;
|
|
20
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdSection, "sd-section", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subTitle": { "alias": "subTitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsable": { "alias": "collapsable"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; "noPaddingBody": { "alias": "noPaddingBody"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["[sdHeaderLeft]", "[sdHeaderRight]", "*"], true, never>;
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
declare class SdSectionItem {
|
|
@@ -13,6 +13,19 @@ interface SplitterLayoutState {
|
|
|
13
13
|
v: 1;
|
|
14
14
|
panels: SplitterPanelState[];
|
|
15
15
|
}
|
|
16
|
+
interface SdSplitterOption {
|
|
17
|
+
orientation?: SplitterOrientation;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
storageKey?: string;
|
|
20
|
+
snapThreshold?: number;
|
|
21
|
+
keyboardStep?: number;
|
|
22
|
+
onResizeEnd?: (state: SplitterLayoutState) => void;
|
|
23
|
+
onCollapsedChange?: (event: {
|
|
24
|
+
panelId: string | number;
|
|
25
|
+
collapsed: boolean;
|
|
26
|
+
}) => void;
|
|
27
|
+
onLayoutChange?: (state: SplitterLayoutState) => void;
|
|
28
|
+
}
|
|
16
29
|
|
|
17
30
|
declare class SdSplitterPanelComponent {
|
|
18
31
|
readonly elementRef: ElementRef<HTMLElement>;
|
|
@@ -30,11 +43,17 @@ declare class SdSplitterPanelComponent {
|
|
|
30
43
|
|
|
31
44
|
declare class SdSplitterComponent {
|
|
32
45
|
#private;
|
|
46
|
+
option: _angular_core.InputSignal<SdSplitterOption | undefined>;
|
|
33
47
|
orientation: _angular_core.InputSignal<SplitterOrientation>;
|
|
34
48
|
disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
35
49
|
storageKey: _angular_core.InputSignal<string | undefined>;
|
|
36
50
|
snapThreshold: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
37
51
|
keyboardStep: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
52
|
+
resolvedOrientation: _angular_core.Signal<SplitterOrientation>;
|
|
53
|
+
resolvedDisabled: _angular_core.Signal<boolean>;
|
|
54
|
+
resolvedStorageKey: _angular_core.Signal<string | undefined>;
|
|
55
|
+
resolvedSnapThreshold: _angular_core.Signal<number>;
|
|
56
|
+
resolvedKeyboardStep: _angular_core.Signal<number>;
|
|
38
57
|
readonly resizeEnd: _angular_core.OutputEmitterRef<SplitterLayoutState>;
|
|
39
58
|
readonly collapsedChange: _angular_core.OutputEmitterRef<{
|
|
40
59
|
panelId: string | number;
|
|
@@ -51,7 +70,7 @@ declare class SdSplitterComponent {
|
|
|
51
70
|
toggle(target: number | string): void;
|
|
52
71
|
resizePanel(target: number | string, size: number): void;
|
|
53
72
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdSplitterComponent, never>;
|
|
54
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdSplitterComponent, "sd-splitter", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": false; "isSignal": true; }; "snapThreshold": { "alias": "snapThreshold"; "required": false; "isSignal": true; }; "keyboardStep": { "alias": "keyboardStep"; "required": false; "isSignal": true; }; }, { "resizeEnd": "resizeEnd"; "collapsedChange": "collapsedChange"; "layoutChange": "layoutChange"; }, ["panels"], ["sd-splitter-panel"], true, never>;
|
|
73
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdSplitterComponent, "sd-splitter", never, { "option": { "alias": "option"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": false; "isSignal": true; }; "snapThreshold": { "alias": "snapThreshold"; "required": false; "isSignal": true; }; "keyboardStep": { "alias": "keyboardStep"; "required": false; "isSignal": true; }; }, { "resizeEnd": "resizeEnd"; "collapsedChange": "collapsedChange"; "layoutChange": "layoutChange"; }, ["panels"], ["sd-splitter-panel"], true, never>;
|
|
55
74
|
}
|
|
56
75
|
|
|
57
76
|
export { SdSplitterComponent, SdSplitterPanelComponent };
|
|
@@ -339,6 +339,8 @@ interface SdTableOptionFilter<T = any> {
|
|
|
339
339
|
/** Chế độ thủ công: phải nhấn nút áp dụng mới gửi filter */
|
|
340
340
|
manualFilter?: boolean;
|
|
341
341
|
/** Có thể thu gọn bộ lọc hay không */
|
|
342
|
+
collapsible?: boolean;
|
|
343
|
+
/** @deprecated Use `collapsible` instead. */
|
|
342
344
|
collapsable?: boolean;
|
|
343
345
|
/** Ẩn toolbar (xóa bộ lọc, thiết lập) của external filter, khi có ít external filter user không cần chức năng này */
|
|
344
346
|
hideExternalFilterToolbar?: boolean;
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Signal, TemplateRef } from '@angular/core';
|
|
3
|
+
import { SdButton } from '@sdcorejs/angular/components/button';
|
|
4
|
+
import { SdUnwrapSignal, MaterialIconFontSet } from '@sdcorejs/angular/utilities/models';
|
|
5
|
+
import { Color } from '@sdcorejs/utils/models';
|
|
6
|
+
|
|
7
|
+
type SdTreeDataSource<TItem = any> = TItem[] | Signal<TItem[]> | (() => TItem[] | Promise<TItem[]>);
|
|
8
|
+
type SdTreeLoadType = 'static' | 'lazy';
|
|
9
|
+
type SdTreeOption<T = any> = SdTreeStaticOption<T> | SdTreeLazyOption<T>;
|
|
10
|
+
type SdTreeItem<T = any> = SdTreeItemStatic<T> | SdTreeItemLazy<T>;
|
|
11
|
+
type SdTreeItemByLoadType<T = any, TLoadType extends SdTreeLoadType = SdTreeLoadType> = TLoadType extends 'lazy' ? SdTreeItemLazy<T> : SdTreeItemStatic<T>;
|
|
12
|
+
interface SdTreeItemBase<T = any> {
|
|
13
|
+
/** Stable node id used for expansion, selection, filtering ancestry, and auto-id generation. */
|
|
14
|
+
id: string;
|
|
15
|
+
/** Text shown by the default tree row. Custom templates can still read `item` / `treeItem`. */
|
|
16
|
+
label: string;
|
|
17
|
+
/**
|
|
18
|
+
* Optional node icon override.
|
|
19
|
+
* - Branch without `icon`: tree renders the default folder icon (`folder` / `folder_open`).
|
|
20
|
+
* - Leaf without `icon`: tree renders no icon.
|
|
21
|
+
* This replaces the old `leafIcon` split. One field is enough because each node decides its own icon.
|
|
22
|
+
*/
|
|
23
|
+
icon?: string | null;
|
|
24
|
+
/** Consumer payload. Commands, selection callbacks, and `$implicit` template context receive this value. */
|
|
25
|
+
data: T;
|
|
26
|
+
/** Initial expansion state for this node. Component state wins after the user toggles. */
|
|
27
|
+
expanded?: boolean;
|
|
28
|
+
}
|
|
29
|
+
interface SdTreeItemStatic<T = any> extends SdTreeItemBase<T> {
|
|
30
|
+
/** Static-mode children. Lazy mode does not use this field. */
|
|
31
|
+
children?: SdTreeItemStatic<T>[];
|
|
32
|
+
/** `hasChildren` belongs to lazy mode only; static mode derives branches from `children`. */
|
|
33
|
+
hasChildren?: never;
|
|
34
|
+
}
|
|
35
|
+
interface SdTreeItemLazy<T = any> extends SdTreeItemBase<T> {
|
|
36
|
+
/** Lazy-mode hint. Set `false` for known leaf nodes that do not need `onExpandChildren`. */
|
|
37
|
+
hasChildren?: boolean;
|
|
38
|
+
/** `children` belongs to static mode only; lazy loaded children are cached inside the component. */
|
|
39
|
+
children?: never;
|
|
40
|
+
}
|
|
41
|
+
interface SdTreeBaseOption {
|
|
42
|
+
maxDepth?: number;
|
|
43
|
+
indentSize?: number;
|
|
44
|
+
}
|
|
45
|
+
interface SdTreeStaticOption<T = any> extends SdTreeBaseOption {
|
|
46
|
+
loadType: 'static';
|
|
47
|
+
/** Expand all (`true`), none (`false`), or root levels where `level < number`. */
|
|
48
|
+
defaultExpanded?: boolean | number;
|
|
49
|
+
}
|
|
50
|
+
interface SdTreeLazyOption<T = any> extends SdTreeBaseOption {
|
|
51
|
+
loadType: 'lazy';
|
|
52
|
+
/**
|
|
53
|
+
* Called once when a lazy node is first expanded. Return wrapped `SdTreeItemLazy<T>` children,
|
|
54
|
+
* not raw data, so each child has a stable id/label/icon contract.
|
|
55
|
+
*/
|
|
56
|
+
onExpandChildren: (item: SdTreeItemLazy<T>) => Promise<SdTreeItemLazy<T>[]> | SdTreeItemLazy<T>[];
|
|
57
|
+
}
|
|
58
|
+
interface SdTreeCommand<T = any> {
|
|
59
|
+
key: string;
|
|
60
|
+
title: string | ((item: T) => string);
|
|
61
|
+
icon?: string | ((item: T) => string | undefined | null);
|
|
62
|
+
color?: Color;
|
|
63
|
+
fontSet?: MaterialIconFontSet;
|
|
64
|
+
disabled?: boolean | ((item: T) => boolean);
|
|
65
|
+
hidden?: boolean | ((item: T) => boolean);
|
|
66
|
+
click: (item: T) => void;
|
|
67
|
+
}
|
|
68
|
+
interface SdTreeSelectorOption<T = any> {
|
|
69
|
+
visible?: boolean;
|
|
70
|
+
actions?: SdTreeSelectionAction<T>[];
|
|
71
|
+
message?: string | ((selectedItems: T[]) => string);
|
|
72
|
+
disabled?: (item: T, selectedItems: T[]) => boolean;
|
|
73
|
+
}
|
|
74
|
+
interface SdTreeSelectionAction<T = any> {
|
|
75
|
+
icon?: string;
|
|
76
|
+
fontSet?: SdUnwrapSignal<SdButton['fontSet']>;
|
|
77
|
+
tooltip?: SdUnwrapSignal<SdButton['tooltip']>;
|
|
78
|
+
title?: SdUnwrapSignal<SdButton['title']>;
|
|
79
|
+
color?: SdUnwrapSignal<SdButton['color']>;
|
|
80
|
+
type?: SdUnwrapSignal<SdButton['type']>;
|
|
81
|
+
hidden?: boolean | ((selectedItems: T[]) => boolean);
|
|
82
|
+
click: (selectedItems: T[]) => void;
|
|
83
|
+
}
|
|
84
|
+
interface SdTreeComponentOptionBase<T = any, TItem extends SdTreeItem<T> = SdTreeItem<T>> {
|
|
85
|
+
autoId?: string | null;
|
|
86
|
+
/** Root nodes can be an array, a signal, a sync loader, or an async loader. Call `reload()` to rerun loader sources. */
|
|
87
|
+
items: SdTreeDataSource<TItem>;
|
|
88
|
+
selectedItems?: T[] | null;
|
|
89
|
+
selector?: SdTreeSelectorOption<T> | null;
|
|
90
|
+
commands?: SdTreeCommand<T>[] | null;
|
|
91
|
+
itemTemplate?: SdTreeItemTemplate<T> | null;
|
|
92
|
+
selectable?: boolean;
|
|
93
|
+
onSelectedItemsChange?: (items: T[]) => void;
|
|
94
|
+
onSelect?: (event: SdTreeSelectionEvent<T>) => void;
|
|
95
|
+
onExpand?: (event: SdTreeToggleEvent<T>) => void;
|
|
96
|
+
onCollapse?: (event: SdTreeToggleEvent<T>) => void;
|
|
97
|
+
}
|
|
98
|
+
interface SdTreeStaticComponentOption<T = any> extends SdTreeComponentOptionBase<T, SdTreeItemStatic<T>> {
|
|
99
|
+
/** Static tree is the default when `tree` is omitted. */
|
|
100
|
+
tree?: SdTreeStaticOption<T>;
|
|
101
|
+
}
|
|
102
|
+
interface SdTreeLazyComponentOption<T = any> extends SdTreeComponentOptionBase<T, SdTreeItemLazy<T>> {
|
|
103
|
+
tree: SdTreeLazyOption<T>;
|
|
104
|
+
}
|
|
105
|
+
type SdTreeComponentOption<T = any> = SdTreeStaticComponentOption<T> | SdTreeLazyComponentOption<T>;
|
|
106
|
+
interface SdTreeNode<T = any> {
|
|
107
|
+
/** Wrapped tree item containing id/label/icon/data plus mode-specific tree metadata. */
|
|
108
|
+
treeItem: SdTreeItem<T>;
|
|
109
|
+
/** Raw consumer payload. Kept as a shortcut because most callbacks operate on data, not wrapper metadata. */
|
|
110
|
+
data: T;
|
|
111
|
+
id: string;
|
|
112
|
+
label: string;
|
|
113
|
+
level: number;
|
|
114
|
+
parent: SdTreeNode<T> | null;
|
|
115
|
+
children: SdTreeNode<T>[];
|
|
116
|
+
hasChildren: boolean;
|
|
117
|
+
isExpanded: boolean;
|
|
118
|
+
isLoading: boolean;
|
|
119
|
+
}
|
|
120
|
+
interface SdTreeItemContext<T = any> {
|
|
121
|
+
$implicit: T;
|
|
122
|
+
item: T;
|
|
123
|
+
treeItem: SdTreeItem<T>;
|
|
124
|
+
node: SdTreeNode<T>;
|
|
125
|
+
level: number;
|
|
126
|
+
expanded: boolean;
|
|
127
|
+
selected: boolean;
|
|
128
|
+
loading: boolean;
|
|
129
|
+
hasChildren: boolean;
|
|
130
|
+
isLeaf: boolean;
|
|
131
|
+
toggle: () => void;
|
|
132
|
+
select: () => void;
|
|
133
|
+
}
|
|
134
|
+
type SdTreeItemTemplate<T = any> = TemplateRef<SdTreeItemContext<T>>;
|
|
135
|
+
interface SdTreeSelectionEvent<T = any> {
|
|
136
|
+
item: T;
|
|
137
|
+
selected: boolean;
|
|
138
|
+
selectedItems: T[];
|
|
139
|
+
}
|
|
140
|
+
interface SdTreeToggleEvent<T = any> {
|
|
141
|
+
item: T;
|
|
142
|
+
expanded: boolean;
|
|
143
|
+
node: SdTreeNode<T>;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
declare class SdTreeItemDefDirective<T = any> {
|
|
147
|
+
static ngTemplateContextGuard<T>(_dir: SdTreeItemDefDirective<T>, ctx: unknown): ctx is SdTreeItemContext<T>;
|
|
148
|
+
readonly templateRef: TemplateRef<SdTreeItemContext<T>>;
|
|
149
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdTreeItemDefDirective<any>, never>;
|
|
150
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SdTreeItemDefDirective<any>, "[sdTreeItemDef]", never, {}, {}, never, never, true, never>;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
type SdTreeAutoIdPart = 'row' | 'toggle' | 'checkbox' | 'icon' | 'label' | 'command';
|
|
154
|
+
interface SdTreeNodeAutoIds {
|
|
155
|
+
row?: string;
|
|
156
|
+
toggle?: string;
|
|
157
|
+
checkbox?: string;
|
|
158
|
+
icon?: string;
|
|
159
|
+
label?: string;
|
|
160
|
+
command?: string;
|
|
161
|
+
}
|
|
162
|
+
interface SdTreeViewCommand<T = any> {
|
|
163
|
+
key: string;
|
|
164
|
+
command: SdTreeCommand<T>;
|
|
165
|
+
title: string;
|
|
166
|
+
icon: string;
|
|
167
|
+
color: SdTreeCommand<T>['color'];
|
|
168
|
+
fontSet: SdTreeCommand<T>['fontSet'];
|
|
169
|
+
disabled: boolean;
|
|
170
|
+
autoId?: string;
|
|
171
|
+
defaultColor: boolean;
|
|
172
|
+
}
|
|
173
|
+
interface SdTreeViewNode<T = any> extends SdTreeNode<T> {
|
|
174
|
+
icon?: string;
|
|
175
|
+
selected: boolean;
|
|
176
|
+
selectionDisabled: boolean;
|
|
177
|
+
toggleDisabled: boolean;
|
|
178
|
+
toggleLabel: string;
|
|
179
|
+
ariaExpanded: boolean | null;
|
|
180
|
+
autoIds: SdTreeNodeAutoIds;
|
|
181
|
+
commands: SdTreeViewCommand<T>[];
|
|
182
|
+
context: SdTreeItemContext<T>;
|
|
183
|
+
}
|
|
184
|
+
interface SdTreeSelectionActionView<T = any> {
|
|
185
|
+
action: SdTreeSelectionAction<T>;
|
|
186
|
+
autoId: string | null;
|
|
187
|
+
}
|
|
188
|
+
declare class SdTree<T = any> {
|
|
189
|
+
#private;
|
|
190
|
+
readonly autoIdInput: _angular_core.InputSignal<string | null | undefined>;
|
|
191
|
+
readonly option: _angular_core.InputSignal<SdTreeComponentOption<T> | undefined>;
|
|
192
|
+
/** Migration bridge. New usage should put the data source in `option.items`. */
|
|
193
|
+
readonly items: _angular_core.InputSignal<SdTreeDataSource<SdTreeItem<T>> | undefined>;
|
|
194
|
+
/** Migration bridge. New usage should put static/lazy config in `option.tree`. */
|
|
195
|
+
readonly tree: _angular_core.InputSignal<SdTreeOption<T> | undefined>;
|
|
196
|
+
readonly selectedItemsInput: _angular_core.InputSignal<T[] | null | undefined>;
|
|
197
|
+
readonly commands: _angular_core.InputSignal<SdTreeCommand<T>[] | null | undefined>;
|
|
198
|
+
readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
199
|
+
readonly selector: _angular_core.InputSignal<SdTreeSelectorOption<T> | null | undefined>;
|
|
200
|
+
readonly itemTemplate: _angular_core.InputSignal<TemplateRef<SdTreeItemContext<T>> | null | undefined>;
|
|
201
|
+
readonly selectedItemsChange: _angular_core.OutputEmitterRef<T[]>;
|
|
202
|
+
readonly selectChange: _angular_core.OutputEmitterRef<SdTreeSelectionEvent<T>>;
|
|
203
|
+
readonly expandChange: _angular_core.OutputEmitterRef<SdTreeToggleEvent<T>>;
|
|
204
|
+
readonly collapseChange: _angular_core.OutputEmitterRef<SdTreeToggleEvent<T>>;
|
|
205
|
+
readonly itemDef: _angular_core.Signal<SdTreeItemDefDirective<any> | undefined>;
|
|
206
|
+
readonly resolvedItemsSource: _angular_core.Signal<SdTreeDataSource<SdTreeItem<T>>>;
|
|
207
|
+
readonly resolvedTree: _angular_core.Signal<SdTreeOption<T>>;
|
|
208
|
+
readonly resolvedSelector: _angular_core.Signal<SdTreeSelectorOption<T> | null | undefined>;
|
|
209
|
+
readonly resolvedCommands: _angular_core.Signal<SdTreeCommand<T>[]>;
|
|
210
|
+
readonly resolvedSelectable: _angular_core.Signal<boolean>;
|
|
211
|
+
readonly autoId: _angular_core.Signal<string | undefined>;
|
|
212
|
+
readonly resolvedItemTemplate: _angular_core.Signal<TemplateRef<SdTreeItemContext<T>> | undefined>;
|
|
213
|
+
readonly indentSize: _angular_core.Signal<number>;
|
|
214
|
+
readonly normalizedFilterText: _angular_core.Signal<string>;
|
|
215
|
+
readonly selectionVisible: _angular_core.Signal<boolean>;
|
|
216
|
+
readonly selectedIdSet: _angular_core.Signal<Set<string>>;
|
|
217
|
+
readonly rootNodes: _angular_core.Signal<SdTreeNode<T>[]>;
|
|
218
|
+
readonly visibleNodes: _angular_core.Signal<SdTreeNode<T>[]>;
|
|
219
|
+
readonly selectedItems: _angular_core.Signal<T[]>;
|
|
220
|
+
readonly selectedCount: _angular_core.Signal<number>;
|
|
221
|
+
readonly selectionMessage: _angular_core.Signal<string>;
|
|
222
|
+
readonly visibleSelectionActions: _angular_core.Signal<SdTreeSelectionAction<T>[]>;
|
|
223
|
+
readonly selectionActionViews: _angular_core.Signal<SdTreeSelectionActionView<T>[]>;
|
|
224
|
+
readonly clearSelectionAutoId: _angular_core.Signal<string | null>;
|
|
225
|
+
/**
|
|
226
|
+
* Template-facing row model. Expensive/variable values are resolved once per
|
|
227
|
+
* signal recomputation so the HTML does not call helper methods for every CD pass.
|
|
228
|
+
*/
|
|
229
|
+
readonly visibleViewNodes: _angular_core.Signal<SdTreeViewNode<T>[]>;
|
|
230
|
+
readonly trackByNode: (_index: number, node: SdTreeNode<T>) => string;
|
|
231
|
+
constructor();
|
|
232
|
+
reload(): void;
|
|
233
|
+
filter(searchText: string | undefined | null): void;
|
|
234
|
+
isSelected(node: SdTreeNode<T>): boolean;
|
|
235
|
+
nodeIcon(node: SdTreeNode<T>): string | undefined;
|
|
236
|
+
visibleCommands(node: SdTreeNode<T>): SdTreeCommand<T>[];
|
|
237
|
+
isSelectionDisabled(node: SdTreeNode<T>): boolean;
|
|
238
|
+
commandTitle(command: SdTreeCommand<T>, item: T): string;
|
|
239
|
+
commandIcon(command: SdTreeCommand<T>, item: T): string;
|
|
240
|
+
isCommandDisabled(command: SdTreeCommand<T>, item: T): boolean;
|
|
241
|
+
toggle(node: SdTreeNode<T>, event?: Event): Promise<void>;
|
|
242
|
+
toggleSelection(node: SdTreeNode<T>, event?: Event): void;
|
|
243
|
+
clearSelection(): void;
|
|
244
|
+
onSelectionAction(action: SdTreeSelectionAction<T>): void;
|
|
245
|
+
createContext(node: SdTreeNode<T>): SdTreeItemContext<T>;
|
|
246
|
+
nodeAutoId(node: SdTreeNode<T>, part: SdTreeAutoIdPart): string | undefined;
|
|
247
|
+
commandAutoId(node: SdTreeNode<T>, command: SdTreeCommand<T>): string | undefined;
|
|
248
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdTree<any>, never>;
|
|
249
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdTree<any>, "sd-tree", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "option": { "alias": "option"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "tree": { "alias": "tree"; "required": false; "isSignal": true; }; "selectedItemsInput": { "alias": "selectedItems"; "required": false; "isSignal": true; }; "commands": { "alias": "commands"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "selector": { "alias": "selector"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; }, { "selectedItemsChange": "selectedItemsChange"; "selectChange": "selectChange"; "expandChange": "expandChange"; "collapseChange": "collapseChange"; }, ["itemDef"], never, true, never>;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export { SdTree, SdTreeItemDefDirective };
|
|
253
|
+
export type { SdTreeAutoIdPart, SdTreeBaseOption, SdTreeCommand, SdTreeComponentOption, SdTreeComponentOptionBase, SdTreeDataSource, SdTreeItem, SdTreeItemBase, SdTreeItemByLoadType, SdTreeItemContext, SdTreeItemLazy, SdTreeItemStatic, SdTreeItemTemplate, SdTreeLazyComponentOption, SdTreeLazyOption, SdTreeLoadType, SdTreeNode, SdTreeNodeAutoIds, SdTreeOption, SdTreeSelectionAction, SdTreeSelectionActionView, SdTreeSelectionEvent, SdTreeSelectorOption, SdTreeStaticComponentOption, SdTreeStaticOption, SdTreeToggleEvent, SdTreeViewCommand, SdTreeViewNode };
|
|
@@ -12,6 +12,8 @@ export * from '@sdcorejs/angular/components/upload-file';
|
|
|
12
12
|
export * from '@sdcorejs/angular/components/section';
|
|
13
13
|
export * from '@sdcorejs/angular/components/anchor';
|
|
14
14
|
export * from '@sdcorejs/angular/components/query-builder';
|
|
15
|
+
export * from '@sdcorejs/angular/components/org-chart';
|
|
16
|
+
export * from '@sdcorejs/angular/components/tree';
|
|
15
17
|
export * from '@sdcorejs/angular/components/import-excel';
|
|
16
18
|
export * from '@sdcorejs/angular/components/document-builder';
|
|
17
19
|
export * from '@sdcorejs/angular/components/mini-editor';
|