@sdcorejs/angular 21.0.4 → 21.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/assets/{scss/README.md → STYLE-GUIDE.md} +3 -0
  2. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +2 -2
  3. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  4. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +110 -0
  5. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -0
  6. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +37 -8
  7. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  8. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +258 -60
  9. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  10. package/fesm2022/sdcorejs-angular-components-section.mjs +8 -5
  11. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  12. package/fesm2022/sdcorejs-angular-components-splitter.mjs +24 -13
  13. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  14. package/fesm2022/sdcorejs-angular-components-table.mjs +6 -2
  15. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  16. package/fesm2022/sdcorejs-angular-components-tree.mjs +526 -0
  17. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -0
  18. package/fesm2022/sdcorejs-angular-components.mjs +2 -0
  19. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  20. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +2 -2
  21. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  22. package/fesm2022/sdcorejs-angular-forms-select.mjs +34 -4
  23. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  24. package/package.json +9 -1
  25. package/types/sdcorejs-angular-components-org-chart.d.ts +67 -0
  26. package/types/sdcorejs-angular-components-query-bar.d.ts +37 -2
  27. package/types/sdcorejs-angular-components-query-builder.d.ts +96 -30
  28. package/types/sdcorejs-angular-components-section.d.ts +4 -1
  29. package/types/sdcorejs-angular-components-splitter.d.ts +20 -1
  30. package/types/sdcorejs-angular-components-table.d.ts +2 -0
  31. package/types/sdcorejs-angular-components-tree.d.ts +253 -0
  32. package/types/sdcorejs-angular-components.d.ts +2 -0
  33. package/types/sdcorejs-angular-forms-select.d.ts +9 -1
@@ -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 = 'day' | 'week' | 'month';
90
- /** Offset direction for a relative date. */
91
- type SdQbRelativeDirection = 'previous' | 'next';
92
- /** A relative (resolved-at-query-time) date value stored in `Filter.data`. */
93
- interface SdQbRelativeDate {
94
- /** `'now'` = current moment / today · `'offset'` = now ± amount × unit. */
95
- rel: 'now' | 'offset';
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 an arbitrary value to a relative-date spec. */
106
- declare function qbIsRelativeDate(v: any): v is SdQbRelativeDate;
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(): SdQbRelativeDate;
109
- /** Stable option list for the date-mode select (module ref never reallocated). */
110
- declare const QB_DATE_MODES: ReadonlyArray<{
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
- value: QbDateMode;
151
- display: string;
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, SdQbRelativeDate, SdQbRelativeDirection, SdQbRelativeUnit, SdQueryBuilderField, SdQueryBuilderFieldOption, SdQueryBuilderFieldType };
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';
@@ -15,6 +15,14 @@ declare class SdSelect<T extends object | string | number = Record<string, unkno
15
15
  selectRef: Signal<MatSelect | undefined>;
16
16
  sdLabelTemplate: Signal<TemplateRef<any> | undefined>;
17
17
  sdValueTemplate: Signal<TemplateRef<any> | undefined>;
18
+ /**
19
+ * Custom render for the SELECTED value shown in the editable trigger (`<mat-select-trigger>`).
20
+ * Distinct from `#sdValue`/`sdViewDef` which only drive the read-only `viewed`/`inline` face.
21
+ * Context: `{ $implicit, item, items: selectedItems(), display, multiple }` — `item`/`$implicit`
22
+ * is the single selected item object (single mode) or the selected-item array (multiple mode).
23
+ * Falls back to the plain `display` text when not projected, so existing usages are unaffected.
24
+ */
25
+ sdSelectedTemplate: Signal<TemplateRef<any> | undefined>;
18
26
  itemDef: Signal<SdItemDefDefDirective<any> | undefined>;
19
27
  sdViewDef: Signal<SdViewDefDirective<any, any> | undefined>;
20
28
  /**
@@ -107,7 +115,7 @@ declare class SdSelect<T extends object | string | number = Record<string, unkno
107
115
  open: () => void;
108
116
  onOpenedChange: (isOpened: boolean) => void;
109
117
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdSelect<any>, never>;
110
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdSelect<any>, "sd-select", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": true; "isSignal": true; }; "displayField": { "alias": "displayField"; "required": true; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "cacheChecksum": { "alias": "cacheChecksum"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "minWidthPanel": { "alias": "minWidthPanel"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "validator": { "alias": "validator"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdSelection": "sdSelection"; }, ["sdLabelTemplate", "sdValueTemplate", "itemDef", "sdViewDef"], ["[sdLabel]"], true, never>;
118
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdSelect<any>, "sd-select", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": true; "isSignal": true; }; "displayField": { "alias": "displayField"; "required": true; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "cacheChecksum": { "alias": "cacheChecksum"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "minWidthPanel": { "alias": "minWidthPanel"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "validator": { "alias": "validator"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdSelection": "sdSelection"; }, ["sdLabelTemplate", "sdValueTemplate", "sdSelectedTemplate", "itemDef", "sdViewDef"], ["[sdLabel]"], true, never>;
111
119
  }
112
120
 
113
121
  export { SdSelect };