@sd-angular/core 19.0.3 → 19.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.
- package/README.md +13 -8
- package/assets/{scss/README.md → STYLE-GUIDE.md} +3 -0
- package/components/button/src/button.component.d.ts +1 -2
- package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +1 -2
- package/components/form-generic/src/components/form-render/form-render.component.d.ts +1 -2
- package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -2
- package/components/index.d.ts +2 -0
- package/components/org-chart/index.d.ts +3 -0
- package/components/org-chart/src/org-chart-item-def.directive.d.ts +9 -0
- package/components/org-chart/src/org-chart.component.d.ts +26 -0
- package/components/org-chart/src/org-chart.model.d.ts +32 -0
- package/components/query-bar/src/query-bar.component.d.ts +15 -2
- package/components/query-bar/src/query-bar.model.d.ts +22 -0
- package/components/query-builder/index.d.ts +2 -0
- package/components/query-builder/src/query-builder.component.d.ts +115 -22
- package/components/query-builder/src/query-builder.model.d.ts +166 -0
- package/components/query-builder/src/query-builder.serializer.d.ts +32 -0
- package/components/section/src/section.component.d.ts +5 -3
- package/components/side-drawer/src/side-drawer.component.d.ts +1 -2
- package/components/splitter/src/splitter.component.d.ts +8 -2
- package/components/splitter/src/splitter.models.d.ts +13 -0
- package/components/stepper/src/stepper.component.d.ts +1 -2
- package/components/tab/src/tab-group.component.d.ts +1 -2
- package/components/table/src/services/table-filter/table-filter.model.d.ts +2 -0
- package/components/table/src/table.component.d.ts +1 -2
- package/components/tree/index.d.ts +3 -0
- package/components/tree/src/tree-item-def.directive.d.ts +9 -0
- package/components/tree/src/tree.component.d.ts +102 -0
- package/components/tree/src/tree.model.d.ts +142 -0
- package/components/upload-file/src/upload-file.component.d.ts +2 -0
- package/fesm2022/sd-angular-core-components-button.mjs +2 -4
- package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-form-generic.mjs +7 -11
- package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-modal-resizable.mjs +5 -5
- package/fesm2022/sd-angular-core-components-modal-resizable.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-org-chart.mjs +110 -0
- package/fesm2022/sd-angular-core-components-org-chart.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-query-bar.mjs +37 -8
- package/fesm2022/sd-angular-core-components-query-bar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-query-builder.mjs +867 -57
- package/fesm2022/sd-angular-core-components-query-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-section.mjs +8 -7
- package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-side-drawer.mjs +2 -4
- package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-splitter.mjs +23 -12
- package/fesm2022/sd-angular-core-components-splitter.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-stepper.mjs +2 -4
- package/fesm2022/sd-angular-core-components-stepper.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tab.mjs +2 -4
- package/fesm2022/sd-angular-core-components-tab.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-table.mjs +8 -6
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tree.mjs +526 -0
- package/fesm2022/sd-angular-core-components-tree.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-upload-file.mjs +15 -4
- package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components.mjs +2 -0
- package/fesm2022/sd-angular-core-components.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs +9 -4
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input-number.mjs +9 -3
- package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-select.mjs +33 -3
- package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-notify.mjs +26 -8
- package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
- package/forms/select/src/select.component.d.ts +9 -1
- package/package.json +81 -73
- package/sd-angular-core-19.0.5.tgz +0 -0
- package/services/notify/src/components/toast/toast.component.d.ts +12 -1
- package/services/notify/src/notify.model.d.ts +17 -0
- package/sd-angular-core-19.0.3.tgz +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Filter } from '@sdcorejs/utils/models';
|
|
2
|
+
import { QbGroup, QbToken, SdQueryBuilderField } from './query-builder.model';
|
|
3
|
+
/**
|
|
4
|
+
* Map the internal builder tree to the public `Filter` (the root is always a
|
|
5
|
+
* `FilterAndOr`). Rules missing field / operator / value — and empty nested
|
|
6
|
+
* groups — are dropped so the result is always a valid `Filter`.
|
|
7
|
+
*
|
|
8
|
+
* @param group - the editable tree's root group.
|
|
9
|
+
* @returns the canonical nested `Filter`, or `null` when no complete rule survives.
|
|
10
|
+
*/
|
|
11
|
+
export declare function treeToFilter(group: QbGroup): Filter | null;
|
|
12
|
+
/**
|
|
13
|
+
* Inverse of {@link treeToFilter} — rebuild the editable tree from a `Filter` so a
|
|
14
|
+
* consumer can seed `[value]`. A non-group (bare) filter is wrapped in an AND root;
|
|
15
|
+
* `null` yields an empty AND root.
|
|
16
|
+
*
|
|
17
|
+
* @param filter - a `Filter` (group or leaf), or `null` / `undefined` for an empty tree.
|
|
18
|
+
* @returns a fresh root `QbGroup` mirroring the filter's structure.
|
|
19
|
+
*/
|
|
20
|
+
export declare function filterToTree(filter: Filter | null | undefined): QbGroup;
|
|
21
|
+
/**
|
|
22
|
+
* Render a `Filter` to a SQL-ish token stream for view mode. Field tokens use the
|
|
23
|
+
* matching field's `label`; operators map to SQL syntax (`= != like between is null …`);
|
|
24
|
+
* `and` / `or` are lowercase; nested multi-child groups are wrapped in parentheses.
|
|
25
|
+
* Returns a token stream (not a string) so the template can wrap each piece in a
|
|
26
|
+
* highlight `<span>` keyed by `QbToken.kind`.
|
|
27
|
+
*
|
|
28
|
+
* @param filter - the `Filter` to render, or `null` / `undefined`.
|
|
29
|
+
* @param fields - field metadata, used to resolve each field key to its display label + value formatting.
|
|
30
|
+
* @returns the ordered tokens, or `[]` when `filter` is empty.
|
|
31
|
+
*/
|
|
32
|
+
export declare function filterToTokens(filter: Filter | null | undefined, fields: SdQueryBuilderField[]): QbToken[];
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
|
|
2
1
|
import { Color } from '@sdcorejs/utils/models';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class SdSection
|
|
3
|
+
export declare class SdSection {
|
|
5
4
|
#private;
|
|
6
5
|
title: import("@angular/core").InputSignal<string | null | undefined>;
|
|
7
6
|
subTitle: import("@angular/core").InputSignal<string | null | undefined>;
|
|
8
7
|
icon: import("@angular/core").InputSignal<string | null | undefined>;
|
|
9
8
|
iconColor: import("@angular/core").InputSignal<Color>;
|
|
10
9
|
collapsed: import("@angular/core").ModelSignal<boolean>;
|
|
10
|
+
collapsible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
11
|
+
/** @deprecated Use `collapsible` instead. */
|
|
11
12
|
collapsable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
13
|
+
readonly isCollapsible: import("@angular/core").Signal<boolean>;
|
|
12
14
|
hideHeader: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
13
15
|
noPaddingBody: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
14
16
|
constructor();
|
|
15
17
|
toggleCollapse: () => void;
|
|
16
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdSection, never>;
|
|
17
|
-
static ɵcmp: i0.ɵɵ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>;
|
|
19
|
+
static ɵcmp: i0.ɵɵ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
20
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { CdkPortal } from '@angular/cdk/portal';
|
|
2
|
-
import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
|
|
3
2
|
import { Observable } from 'rxjs';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class SdSideDrawer
|
|
4
|
+
export declare class SdSideDrawer {
|
|
6
5
|
#private;
|
|
7
6
|
id: string;
|
|
8
7
|
portal: import("@angular/core").Signal<CdkPortal>;
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { SdSplitterPanelComponent } from './splitter-panel/splitter-panel.component';
|
|
2
|
-
import { SplitterLayoutState, SplitterOrientation } from './splitter.models';
|
|
2
|
+
import { SdSplitterOption, SplitterLayoutState, SplitterOrientation } from './splitter.models';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class SdSplitterComponent {
|
|
5
5
|
#private;
|
|
6
|
+
option: import("@angular/core").InputSignal<SdSplitterOption | undefined>;
|
|
6
7
|
orientation: import("@angular/core").InputSignal<SplitterOrientation>;
|
|
7
8
|
disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
8
9
|
storageKey: import("@angular/core").InputSignal<string | undefined>;
|
|
9
10
|
snapThreshold: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
10
11
|
keyboardStep: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
12
|
+
resolvedOrientation: import("@angular/core").Signal<SplitterOrientation>;
|
|
13
|
+
resolvedDisabled: import("@angular/core").Signal<boolean>;
|
|
14
|
+
resolvedStorageKey: import("@angular/core").Signal<string | undefined>;
|
|
15
|
+
resolvedSnapThreshold: import("@angular/core").Signal<number>;
|
|
16
|
+
resolvedKeyboardStep: import("@angular/core").Signal<number>;
|
|
11
17
|
readonly resizeEnd: import("@angular/core").OutputEmitterRef<SplitterLayoutState>;
|
|
12
18
|
readonly collapsedChange: import("@angular/core").OutputEmitterRef<{
|
|
13
19
|
panelId: string | number;
|
|
@@ -24,5 +30,5 @@ export declare class SdSplitterComponent {
|
|
|
24
30
|
toggle(target: number | string): void;
|
|
25
31
|
resizePanel(target: number | string, size: number): void;
|
|
26
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdSplitterComponent, never>;
|
|
27
|
-
static ɵcmp: i0.ɵɵ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>;
|
|
33
|
+
static ɵcmp: i0.ɵɵ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>;
|
|
28
34
|
}
|
|
@@ -10,6 +10,19 @@ export interface SplitterLayoutState {
|
|
|
10
10
|
v: 1;
|
|
11
11
|
panels: SplitterPanelState[];
|
|
12
12
|
}
|
|
13
|
+
export interface SdSplitterOption {
|
|
14
|
+
orientation?: SplitterOrientation;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
storageKey?: string;
|
|
17
|
+
snapThreshold?: number;
|
|
18
|
+
keyboardStep?: number;
|
|
19
|
+
onResizeEnd?: (state: SplitterLayoutState) => void;
|
|
20
|
+
onCollapsedChange?: (event: {
|
|
21
|
+
panelId: string | number;
|
|
22
|
+
collapsed: boolean;
|
|
23
|
+
}) => void;
|
|
24
|
+
onLayoutChange?: (state: SplitterLayoutState) => void;
|
|
25
|
+
}
|
|
13
26
|
export interface ResolvedPanelMeta {
|
|
14
27
|
id: string | number;
|
|
15
28
|
index: number;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { StepperSelectionEvent } from '@angular/cdk/stepper';
|
|
2
2
|
import { MatStepper } from '@angular/material/stepper';
|
|
3
|
-
import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
|
|
4
3
|
import { Color } from '@sdcorejs/utils/models';
|
|
5
4
|
import { SdStep } from './step.component';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class SdStepper
|
|
6
|
+
export declare class SdStepper {
|
|
8
7
|
steps: import("@angular/core").Signal<readonly SdStep[]>;
|
|
9
8
|
selectedIndex: import("@angular/core").ModelSignal<number>;
|
|
10
9
|
linear: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { MatTabGroup } from '@angular/material/tabs';
|
|
2
|
-
import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
|
|
3
2
|
import { Color } from '@sdcorejs/utils/models';
|
|
4
3
|
import { SdTab } from './tab.component';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
@@ -7,7 +6,7 @@ export interface SdTabClosedEvent {
|
|
|
7
6
|
index: number;
|
|
8
7
|
tab: SdTab;
|
|
9
8
|
}
|
|
10
|
-
export declare class SdTabGroup
|
|
9
|
+
export declare class SdTabGroup {
|
|
11
10
|
tabs: import("@angular/core").Signal<readonly SdTab[]>;
|
|
12
11
|
selectedIndex: import("@angular/core").ModelSignal<number>;
|
|
13
12
|
variant: import("@angular/core").InputSignal<"line" | "pills" | "segmented">;
|
|
@@ -47,6 +47,8 @@ export interface SdTableOptionFilter<T = any> {
|
|
|
47
47
|
/** Chế độ thủ công: phải nhấn nút áp dụng mới gửi filter */
|
|
48
48
|
manualFilter?: boolean;
|
|
49
49
|
/** Có thể thu gọn bộ lọc hay không */
|
|
50
|
+
collapsible?: boolean;
|
|
51
|
+
/** @deprecated Use `collapsible` instead. */
|
|
50
52
|
collapsable?: boolean;
|
|
51
53
|
/** Ẩ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 */
|
|
52
54
|
hideExternalFilterToolbar?: boolean;
|
|
@@ -13,7 +13,6 @@ import { SdTableColumn } from './models/table-column.model';
|
|
|
13
13
|
import { SdTableOption } from './models/table-option.model';
|
|
14
14
|
import { SdTableFilterRequest, TableFilterRegister } from './services/table-filter/table-filter.model';
|
|
15
15
|
import { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';
|
|
16
|
-
import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
|
|
17
16
|
import { SdQuickAction } from '@sd-angular/core/components/quick-action';
|
|
18
17
|
import { SdScrollDirective } from '@sd-angular/core/directives';
|
|
19
18
|
import { Operator } from '@sdcorejs/utils/models';
|
|
@@ -35,7 +34,7 @@ export declare class MatPaginatorIntlCro extends MatPaginatorIntl {
|
|
|
35
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<MatPaginatorIntlCro, never>;
|
|
36
35
|
static ɵprov: i0.ɵɵInjectableDeclaration<MatPaginatorIntlCro>;
|
|
37
36
|
}
|
|
38
|
-
export declare class SdTable<T = unknown>
|
|
37
|
+
export declare class SdTable<T = unknown> implements OnInit, AfterViewInit, OnDestroy {
|
|
39
38
|
#private;
|
|
40
39
|
autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
|
|
41
40
|
autoId: import("@angular/core").Signal<string | undefined>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TemplateRef } from '@angular/core';
|
|
2
|
+
import { SdTreeItemContext } from './tree.model';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class SdTreeItemDefDirective<T = any> {
|
|
5
|
+
static ngTemplateContextGuard<T>(_dir: SdTreeItemDefDirective<T>, ctx: unknown): ctx is SdTreeItemContext<T>;
|
|
6
|
+
readonly templateRef: TemplateRef<SdTreeItemContext<T>>;
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SdTreeItemDefDirective<any>, never>;
|
|
8
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<SdTreeItemDefDirective<any>, "[sdTreeItemDef]", never, {}, {}, never, never, true, never>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { TemplateRef } from '@angular/core';
|
|
2
|
+
import { SdTreeItemDefDirective } from './tree-item-def.directive';
|
|
3
|
+
import { SdTreeCommand, SdTreeDataSource, SdTreeComponentOption, SdTreeItem, SdTreeItemContext, SdTreeNode, SdTreeOption, SdTreeSelectionAction, SdTreeSelectionEvent, SdTreeSelectorOption, SdTreeToggleEvent } from './tree.model';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export type SdTreeAutoIdPart = 'row' | 'toggle' | 'checkbox' | 'icon' | 'label' | 'command';
|
|
6
|
+
export interface SdTreeNodeAutoIds {
|
|
7
|
+
row?: string;
|
|
8
|
+
toggle?: string;
|
|
9
|
+
checkbox?: string;
|
|
10
|
+
icon?: string;
|
|
11
|
+
label?: string;
|
|
12
|
+
command?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SdTreeViewCommand<T = any> {
|
|
15
|
+
key: string;
|
|
16
|
+
command: SdTreeCommand<T>;
|
|
17
|
+
title: string;
|
|
18
|
+
icon: string;
|
|
19
|
+
color: SdTreeCommand<T>['color'];
|
|
20
|
+
fontSet: SdTreeCommand<T>['fontSet'];
|
|
21
|
+
disabled: boolean;
|
|
22
|
+
autoId?: string;
|
|
23
|
+
defaultColor: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface SdTreeViewNode<T = any> extends SdTreeNode<T> {
|
|
26
|
+
icon?: string;
|
|
27
|
+
selected: boolean;
|
|
28
|
+
selectionDisabled: boolean;
|
|
29
|
+
toggleDisabled: boolean;
|
|
30
|
+
toggleLabel: string;
|
|
31
|
+
ariaExpanded: boolean | null;
|
|
32
|
+
autoIds: SdTreeNodeAutoIds;
|
|
33
|
+
commands: SdTreeViewCommand<T>[];
|
|
34
|
+
context: SdTreeItemContext<T>;
|
|
35
|
+
}
|
|
36
|
+
export interface SdTreeSelectionActionView<T = any> {
|
|
37
|
+
action: SdTreeSelectionAction<T>;
|
|
38
|
+
autoId: string | null;
|
|
39
|
+
}
|
|
40
|
+
export declare class SdTree<T = any> {
|
|
41
|
+
#private;
|
|
42
|
+
readonly autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
|
|
43
|
+
readonly option: import("@angular/core").InputSignal<SdTreeComponentOption<T> | undefined>;
|
|
44
|
+
/** Migration bridge. New usage should put the data source in `option.items`. */
|
|
45
|
+
readonly items: import("@angular/core").InputSignal<SdTreeDataSource<SdTreeItem<T>> | undefined>;
|
|
46
|
+
/** Migration bridge. New usage should put static/lazy config in `option.tree`. */
|
|
47
|
+
readonly tree: import("@angular/core").InputSignal<SdTreeOption<T> | undefined>;
|
|
48
|
+
readonly selectedItemsInput: import("@angular/core").InputSignal<T[] | null | undefined>;
|
|
49
|
+
readonly commands: import("@angular/core").InputSignal<SdTreeCommand<T>[] | null | undefined>;
|
|
50
|
+
readonly selectable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
51
|
+
readonly selector: import("@angular/core").InputSignal<SdTreeSelectorOption<T> | null | undefined>;
|
|
52
|
+
readonly itemTemplate: import("@angular/core").InputSignal<TemplateRef<SdTreeItemContext<T>> | null | undefined>;
|
|
53
|
+
readonly selectedItemsChange: import("@angular/core").OutputEmitterRef<T[]>;
|
|
54
|
+
readonly selectChange: import("@angular/core").OutputEmitterRef<SdTreeSelectionEvent<T>>;
|
|
55
|
+
readonly expandChange: import("@angular/core").OutputEmitterRef<SdTreeToggleEvent<T>>;
|
|
56
|
+
readonly collapseChange: import("@angular/core").OutputEmitterRef<SdTreeToggleEvent<T>>;
|
|
57
|
+
readonly itemDef: import("@angular/core").Signal<SdTreeItemDefDirective<any> | undefined>;
|
|
58
|
+
readonly resolvedItemsSource: import("@angular/core").Signal<SdTreeDataSource<SdTreeItem<T>>>;
|
|
59
|
+
readonly resolvedTree: import("@angular/core").Signal<SdTreeOption<T>>;
|
|
60
|
+
readonly resolvedSelector: import("@angular/core").Signal<SdTreeSelectorOption<T> | null | undefined>;
|
|
61
|
+
readonly resolvedCommands: import("@angular/core").Signal<SdTreeCommand<T>[]>;
|
|
62
|
+
readonly resolvedSelectable: import("@angular/core").Signal<boolean>;
|
|
63
|
+
readonly autoId: import("@angular/core").Signal<string | undefined>;
|
|
64
|
+
readonly resolvedItemTemplate: import("@angular/core").Signal<TemplateRef<SdTreeItemContext<T>> | undefined>;
|
|
65
|
+
readonly indentSize: import("@angular/core").Signal<number>;
|
|
66
|
+
readonly normalizedFilterText: import("@angular/core").Signal<string>;
|
|
67
|
+
readonly selectionVisible: import("@angular/core").Signal<boolean>;
|
|
68
|
+
readonly selectedIdSet: import("@angular/core").Signal<Set<string>>;
|
|
69
|
+
readonly rootNodes: import("@angular/core").Signal<SdTreeNode<T>[]>;
|
|
70
|
+
readonly visibleNodes: import("@angular/core").Signal<SdTreeNode<T>[]>;
|
|
71
|
+
readonly selectedItems: import("@angular/core").Signal<T[]>;
|
|
72
|
+
readonly selectedCount: import("@angular/core").Signal<number>;
|
|
73
|
+
readonly selectionMessage: import("@angular/core").Signal<string>;
|
|
74
|
+
readonly visibleSelectionActions: import("@angular/core").Signal<SdTreeSelectionAction<T>[]>;
|
|
75
|
+
readonly selectionActionViews: import("@angular/core").Signal<SdTreeSelectionActionView<T>[]>;
|
|
76
|
+
readonly clearSelectionAutoId: import("@angular/core").Signal<string | null>;
|
|
77
|
+
/**
|
|
78
|
+
* Template-facing row model. Expensive/variable values are resolved once per
|
|
79
|
+
* signal recomputation so the HTML does not call helper methods for every CD pass.
|
|
80
|
+
*/
|
|
81
|
+
readonly visibleViewNodes: import("@angular/core").Signal<SdTreeViewNode<T>[]>;
|
|
82
|
+
readonly trackByNode: (_index: number, node: SdTreeNode<T>) => string;
|
|
83
|
+
constructor();
|
|
84
|
+
reload(): void;
|
|
85
|
+
filter(searchText: string | undefined | null): void;
|
|
86
|
+
isSelected(node: SdTreeNode<T>): boolean;
|
|
87
|
+
nodeIcon(node: SdTreeNode<T>): string | undefined;
|
|
88
|
+
visibleCommands(node: SdTreeNode<T>): SdTreeCommand<T>[];
|
|
89
|
+
isSelectionDisabled(node: SdTreeNode<T>): boolean;
|
|
90
|
+
commandTitle(command: SdTreeCommand<T>, item: T): string;
|
|
91
|
+
commandIcon(command: SdTreeCommand<T>, item: T): string;
|
|
92
|
+
isCommandDisabled(command: SdTreeCommand<T>, item: T): boolean;
|
|
93
|
+
toggle(node: SdTreeNode<T>, event?: Event): Promise<void>;
|
|
94
|
+
toggleSelection(node: SdTreeNode<T>, event?: Event): void;
|
|
95
|
+
clearSelection(): void;
|
|
96
|
+
onSelectionAction(action: SdTreeSelectionAction<T>): void;
|
|
97
|
+
createContext(node: SdTreeNode<T>): SdTreeItemContext<T>;
|
|
98
|
+
nodeAutoId(node: SdTreeNode<T>, part: SdTreeAutoIdPart): string | undefined;
|
|
99
|
+
commandAutoId(node: SdTreeNode<T>, command: SdTreeCommand<T>): string | undefined;
|
|
100
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SdTree<any>, never>;
|
|
101
|
+
static ɵcmp: i0.ɵɵ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>;
|
|
102
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Signal, TemplateRef } from '@angular/core';
|
|
2
|
+
import { SdButton } from '@sd-angular/core/components/button';
|
|
3
|
+
import { MaterialIconFontSet, SdUnwrapSignal } from '@sd-angular/core/utilities/models';
|
|
4
|
+
import { Color } from '@sdcorejs/utils/models';
|
|
5
|
+
export type SdTreeDataSource<TItem = any> = TItem[] | Signal<TItem[]> | (() => TItem[] | Promise<TItem[]>);
|
|
6
|
+
export type SdTreeLoadType = 'static' | 'lazy';
|
|
7
|
+
export type SdTreeOption<T = any> = SdTreeStaticOption<T> | SdTreeLazyOption<T>;
|
|
8
|
+
export type SdTreeItem<T = any> = SdTreeItemStatic<T> | SdTreeItemLazy<T>;
|
|
9
|
+
export type SdTreeItemByLoadType<T = any, TLoadType extends SdTreeLoadType = SdTreeLoadType> = TLoadType extends 'lazy' ? SdTreeItemLazy<T> : SdTreeItemStatic<T>;
|
|
10
|
+
export interface SdTreeItemBase<T = any> {
|
|
11
|
+
/** Stable node id used for expansion, selection, filtering ancestry, and auto-id generation. */
|
|
12
|
+
id: string;
|
|
13
|
+
/** Text shown by the default tree row. Custom templates can still read `item` / `treeItem`. */
|
|
14
|
+
label: string;
|
|
15
|
+
/**
|
|
16
|
+
* Optional node icon override.
|
|
17
|
+
* - Branch without `icon`: tree renders the default folder icon (`folder` / `folder_open`).
|
|
18
|
+
* - Leaf without `icon`: tree renders no icon.
|
|
19
|
+
* This replaces the old `leafIcon` split. One field is enough because each node decides its own icon.
|
|
20
|
+
*/
|
|
21
|
+
icon?: string | null;
|
|
22
|
+
/** Consumer payload. Commands, selection callbacks, and `$implicit` template context receive this value. */
|
|
23
|
+
data: T;
|
|
24
|
+
/** Initial expansion state for this node. Component state wins after the user toggles. */
|
|
25
|
+
expanded?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface SdTreeItemStatic<T = any> extends SdTreeItemBase<T> {
|
|
28
|
+
/** Static-mode children. Lazy mode does not use this field. */
|
|
29
|
+
children?: SdTreeItemStatic<T>[];
|
|
30
|
+
/** `hasChildren` belongs to lazy mode only; static mode derives branches from `children`. */
|
|
31
|
+
hasChildren?: never;
|
|
32
|
+
}
|
|
33
|
+
export interface SdTreeItemLazy<T = any> extends SdTreeItemBase<T> {
|
|
34
|
+
/** Lazy-mode hint. Set `false` for known leaf nodes that do not need `onExpandChildren`. */
|
|
35
|
+
hasChildren?: boolean;
|
|
36
|
+
/** `children` belongs to static mode only; lazy loaded children are cached inside the component. */
|
|
37
|
+
children?: never;
|
|
38
|
+
}
|
|
39
|
+
export interface SdTreeBaseOption {
|
|
40
|
+
maxDepth?: number;
|
|
41
|
+
indentSize?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface SdTreeStaticOption<T = any> extends SdTreeBaseOption {
|
|
44
|
+
loadType: 'static';
|
|
45
|
+
/** Expand all (`true`), none (`false`), or root levels where `level < number`. */
|
|
46
|
+
defaultExpanded?: boolean | number;
|
|
47
|
+
}
|
|
48
|
+
export interface SdTreeLazyOption<T = any> extends SdTreeBaseOption {
|
|
49
|
+
loadType: 'lazy';
|
|
50
|
+
/**
|
|
51
|
+
* Called once when a lazy node is first expanded. Return wrapped `SdTreeItemLazy<T>` children,
|
|
52
|
+
* not raw data, so each child has a stable id/label/icon contract.
|
|
53
|
+
*/
|
|
54
|
+
onExpandChildren: (item: SdTreeItemLazy<T>) => Promise<SdTreeItemLazy<T>[]> | SdTreeItemLazy<T>[];
|
|
55
|
+
}
|
|
56
|
+
export interface SdTreeCommand<T = any> {
|
|
57
|
+
key: string;
|
|
58
|
+
title: string | ((item: T) => string);
|
|
59
|
+
icon?: string | ((item: T) => string | undefined | null);
|
|
60
|
+
color?: Color;
|
|
61
|
+
fontSet?: MaterialIconFontSet;
|
|
62
|
+
disabled?: boolean | ((item: T) => boolean);
|
|
63
|
+
hidden?: boolean | ((item: T) => boolean);
|
|
64
|
+
click: (item: T) => void;
|
|
65
|
+
}
|
|
66
|
+
export interface SdTreeSelectorOption<T = any> {
|
|
67
|
+
visible?: boolean;
|
|
68
|
+
actions?: SdTreeSelectionAction<T>[];
|
|
69
|
+
message?: string | ((selectedItems: T[]) => string);
|
|
70
|
+
disabled?: (item: T, selectedItems: T[]) => boolean;
|
|
71
|
+
}
|
|
72
|
+
export interface SdTreeSelectionAction<T = any> {
|
|
73
|
+
icon?: string;
|
|
74
|
+
fontSet?: SdUnwrapSignal<SdButton['fontSet']>;
|
|
75
|
+
tooltip?: SdUnwrapSignal<SdButton['tooltip']>;
|
|
76
|
+
title?: SdUnwrapSignal<SdButton['title']>;
|
|
77
|
+
color?: SdUnwrapSignal<SdButton['color']>;
|
|
78
|
+
type?: SdUnwrapSignal<SdButton['type']>;
|
|
79
|
+
hidden?: boolean | ((selectedItems: T[]) => boolean);
|
|
80
|
+
click: (selectedItems: T[]) => void;
|
|
81
|
+
}
|
|
82
|
+
export interface SdTreeComponentOptionBase<T = any, TItem extends SdTreeItem<T> = SdTreeItem<T>> {
|
|
83
|
+
autoId?: string | null;
|
|
84
|
+
/** Root nodes can be an array, a signal, a sync loader, or an async loader. Call `reload()` to rerun loader sources. */
|
|
85
|
+
items: SdTreeDataSource<TItem>;
|
|
86
|
+
selectedItems?: T[] | null;
|
|
87
|
+
selector?: SdTreeSelectorOption<T> | null;
|
|
88
|
+
commands?: SdTreeCommand<T>[] | null;
|
|
89
|
+
itemTemplate?: SdTreeItemTemplate<T> | null;
|
|
90
|
+
selectable?: boolean;
|
|
91
|
+
onSelectedItemsChange?: (items: T[]) => void;
|
|
92
|
+
onSelect?: (event: SdTreeSelectionEvent<T>) => void;
|
|
93
|
+
onExpand?: (event: SdTreeToggleEvent<T>) => void;
|
|
94
|
+
onCollapse?: (event: SdTreeToggleEvent<T>) => void;
|
|
95
|
+
}
|
|
96
|
+
export interface SdTreeStaticComponentOption<T = any> extends SdTreeComponentOptionBase<T, SdTreeItemStatic<T>> {
|
|
97
|
+
/** Static tree is the default when `tree` is omitted. */
|
|
98
|
+
tree?: SdTreeStaticOption<T>;
|
|
99
|
+
}
|
|
100
|
+
export interface SdTreeLazyComponentOption<T = any> extends SdTreeComponentOptionBase<T, SdTreeItemLazy<T>> {
|
|
101
|
+
tree: SdTreeLazyOption<T>;
|
|
102
|
+
}
|
|
103
|
+
export type SdTreeComponentOption<T = any> = SdTreeStaticComponentOption<T> | SdTreeLazyComponentOption<T>;
|
|
104
|
+
export interface SdTreeNode<T = any> {
|
|
105
|
+
/** Wrapped tree item containing id/label/icon/data plus mode-specific tree metadata. */
|
|
106
|
+
treeItem: SdTreeItem<T>;
|
|
107
|
+
/** Raw consumer payload. Kept as a shortcut because most callbacks operate on data, not wrapper metadata. */
|
|
108
|
+
data: T;
|
|
109
|
+
id: string;
|
|
110
|
+
label: string;
|
|
111
|
+
level: number;
|
|
112
|
+
parent: SdTreeNode<T> | null;
|
|
113
|
+
children: SdTreeNode<T>[];
|
|
114
|
+
hasChildren: boolean;
|
|
115
|
+
isExpanded: boolean;
|
|
116
|
+
isLoading: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface SdTreeItemContext<T = any> {
|
|
119
|
+
$implicit: T;
|
|
120
|
+
item: T;
|
|
121
|
+
treeItem: SdTreeItem<T>;
|
|
122
|
+
node: SdTreeNode<T>;
|
|
123
|
+
level: number;
|
|
124
|
+
expanded: boolean;
|
|
125
|
+
selected: boolean;
|
|
126
|
+
loading: boolean;
|
|
127
|
+
hasChildren: boolean;
|
|
128
|
+
isLeaf: boolean;
|
|
129
|
+
toggle: () => void;
|
|
130
|
+
select: () => void;
|
|
131
|
+
}
|
|
132
|
+
export type SdTreeItemTemplate<T = any> = TemplateRef<SdTreeItemContext<T>>;
|
|
133
|
+
export interface SdTreeSelectionEvent<T = any> {
|
|
134
|
+
item: T;
|
|
135
|
+
selected: boolean;
|
|
136
|
+
selectedItems: T[];
|
|
137
|
+
}
|
|
138
|
+
export interface SdTreeToggleEvent<T = any> {
|
|
139
|
+
item: T;
|
|
140
|
+
expanded: boolean;
|
|
141
|
+
node: SdTreeNode<T>;
|
|
142
|
+
}
|
|
@@ -11,6 +11,8 @@ export declare class SdUploadFile<TArgs = any> {
|
|
|
11
11
|
#private;
|
|
12
12
|
readonly id: string;
|
|
13
13
|
readonly formControl: SdFormControl;
|
|
14
|
+
/** Hiển thị message "vui lòng upload": không disabled + đã touched + còn lỗi required. */
|
|
15
|
+
readonly showRequiredError: import("@angular/core").Signal<boolean>;
|
|
14
16
|
readonly previewFiles: import("@angular/core").WritableSignal<PreviewFile[]>;
|
|
15
17
|
readonly selectedFile: import("@angular/core").WritableSignal<PreviewFile | null | undefined>;
|
|
16
18
|
readonly previewFileComponent: import("@angular/core").Signal<PreviewComponent | undefined>;
|
|
@@ -10,13 +10,12 @@ import * as i4 from '@angular/material/progress-spinner';
|
|
|
10
10
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
11
11
|
import * as i5 from '@angular/material/tooltip';
|
|
12
12
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
13
|
-
import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
|
|
14
13
|
import { DefaultMaterialIconFontSet } from '@sd-angular/core/utilities/models';
|
|
15
14
|
import { Subject, Subscription } from 'rxjs';
|
|
16
15
|
import { throttleTime, filter } from 'rxjs/operators';
|
|
17
16
|
|
|
18
17
|
/* eslint-disable @angular-eslint/no-input-rename */
|
|
19
|
-
class SdButton
|
|
18
|
+
class SdButton {
|
|
20
19
|
// ==========================================
|
|
21
20
|
// 1. INJECTS
|
|
22
21
|
// ==========================================
|
|
@@ -67,7 +66,6 @@ class SdButton extends SdBaseSecureComponent {
|
|
|
67
66
|
#clickSubject = new Subject();
|
|
68
67
|
#subscription = new Subscription();
|
|
69
68
|
constructor() {
|
|
70
|
-
super();
|
|
71
69
|
// Kỹ thuật Đánh chặn sự kiện (Capture Phase)
|
|
72
70
|
// Tóm sống mọi sự kiện click ngay khi nó vừa chạm vào component
|
|
73
71
|
this.el.nativeElement.addEventListener('click', (event) => {
|
|
@@ -98,7 +96,7 @@ class SdButton extends SdBaseSecureComponent {
|
|
|
98
96
|
this.#subscription.unsubscribe();
|
|
99
97
|
}
|
|
100
98
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
101
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdButton, isStandalone: true, selector: "sd-button", inputs: { autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fontSet: { classPropertyName: "fontSet", publicName: "fontSet", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null }, htmlType: { classPropertyName: "htmlType", publicName: "htmlType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click" }, host: { properties: { "class.sd-disabled": "disabled()", "class.sd-loading": "loading()", "class.sd-block": "block()", "attr.disabled": "disabled() ? \"true\" : null" } }, usesInheritance: true, ngImport: i0, template: "@let btnType = type();\r\n@let btnLoad = loading();\r\n@let btnTitle = title();\r\n@let pIcon = prefixIcon();\r\n@let sIcon = suffixIcon();\r\n@let fSet = fontSet();\r\n@let hType = htmlType();\r\n@let _disabled = disabled();\r\n@let _color = color();\r\n@let _autoId = autoId();\r\n@let _width = width();\r\n@let _tooltip = tooltip();\r\n\r\n@if (btnType === 'fill') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-fill\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"_disabled\"\r\n [color]=\"_color\"\r\n [attr.data-autoId]=\"_autoId\"\r\n [attr.data-disabled]=\"_disabled ? 'true' : 'false'\"\r\n [attr.data-loading]=\"btnLoad ? 'true' : 'false'\"\r\n [style.width]=\"_width\"\r\n [matTooltip]=\"_tooltip || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'light') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-light\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"_disabled\"\r\n [color]=\"_color\"\r\n [attr.data-autoId]=\"_autoId\"\r\n [attr.data-disabled]=\"_disabled ? 'true' : 'false'\"\r\n [attr.data-loading]=\"btnLoad ? 'true' : 'false'\"\r\n [style.width]=\"_width\"\r\n [matTooltip]=\"_tooltip || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'outline') {\r\n <button\r\n mat-stroked-button\r\n class=\"c-button c-outline\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"_disabled\"\r\n [color]=\"_color\"\r\n [attr.data-autoId]=\"_autoId\"\r\n [attr.data-disabled]=\"_disabled ? 'true' : 'false'\"\r\n [attr.data-loading]=\"btnLoad ? 'true' : 'false'\"\r\n [style.width]=\"_width\"\r\n [matTooltip]=\"_tooltip || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'link') {\r\n <button\r\n mat-button\r\n class=\"c-button c-link\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"_disabled\"\r\n [color]=\"_color\"\r\n [attr.data-autoId]=\"_autoId\"\r\n [attr.data-disabled]=\"_disabled ? 'true' : 'false'\"\r\n [attr.data-loading]=\"btnLoad ? 'true' : 'false'\"\r\n [style.width]=\"_width\"\r\n [matTooltip]=\"_tooltip || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n}\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"c-button-content-wrapper\">\r\n @if (btnLoad) {\r\n <mat-spinner mode=\"indeterminate\" diameter=\"18\" strokeWidth=\"2\" class=\"c-spinner\"></mat-spinner>\r\n } @else if (pIcon) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-prefix\">{{ pIcon }}</mat-icon>\r\n }\r\n\r\n @if (btnTitle) {\r\n <span class=\"c-title\" [class.ml-8]=\"btnLoad || pIcon\" [class.mr-8]=\"sIcon && !btnLoad\">\r\n {{ btnTitle }}\r\n </span>\r\n }\r\n\r\n @if (sIcon && !btnLoad) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-suffix\">{{ sIcon }}</mat-icon>\r\n }\r\n\r\n @if (!btnTitle && !pIcon && !btnLoad && sIcon) {\r\n <mat-icon [fontSet]=\"fSet\">{{ sIcon }}</mat-icon>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host{display:inline-block;pointer-events:auto}:host.sd-disabled{cursor:not-allowed}:host.sd-loading{cursor:wait}:host.sd-block{display:block;width:100%}:host.sd-block button{width:100%}:host ::ng-deep button.c-button{pointer-events:auto;min-width:auto;white-space:nowrap}:host ::ng-deep button.c-button .mat-button-wrapper,:host ::ng-deep button.c-button .mdc-button__label{display:flex;align-items:center;justify-content:center;width:100%;min-width:0}:host ::ng-deep button.c-button[disabled],:host ::ng-deep button.c-button.mat-button-disabled{pointer-events:none;color:#a6a6a6!important;background-color:#e9e9e9!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;height:32px;line-height:20px!important;padding:2px 12px!important;font-weight:400}:host ::ng-deep button.c-button.c-sm mat-icon{height:16px!important;width:16px!important;font-size:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-md{font-size:16px;height:40px;line-height:20px;padding:2px 16px!important;font-weight:400}:host ::ng-deep button.c-button.c-md mat-icon{height:20px!important;width:20px!important;font-size:20px!important}:host ::ng-deep button.c-button.c-md.c-square{width:40px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;line-height:20px!important;padding:2px 16px!important;height:48px}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-disabled{opacity:.5}:host ::ng-deep button.c-button.c-block{width:100%!important}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-secondary{background-color:#000!important;color:#fff}:host ::ng-deep button.c-button.c-fill .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#fff!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary-light);color:var(--sd-primary)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info-light);color:var(--sd-info)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success-light);color:var(--sd-success)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning-light);color:var(--sd-warning)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error-light);color:var(--sd-error)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary{background-color:var(--sd-secondary-light);color:#000!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep .c-button-content-wrapper{display:flex;align-items:center;justify-content:center;width:100%;min-width:0;pointer-events:none}:host ::ng-deep .c-title{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .c-spinner{display:inline-block}:host.sd-loading ::ng-deep button.c-button{pointer-events:none;opacity:.85}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
99
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdButton, isStandalone: true, selector: "sd-button", inputs: { autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fontSet: { classPropertyName: "fontSet", publicName: "fontSet", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, prefixIcon: { classPropertyName: "prefixIcon", publicName: "prefixIcon", isSignal: true, isRequired: false, transformFunction: null }, suffixIcon: { classPropertyName: "suffixIcon", publicName: "suffixIcon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null }, htmlType: { classPropertyName: "htmlType", publicName: "htmlType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click" }, host: { properties: { "class.sd-disabled": "disabled()", "class.sd-loading": "loading()", "class.sd-block": "block()", "attr.disabled": "disabled() ? \"true\" : null" } }, ngImport: i0, template: "@let btnType = type();\r\n@let btnLoad = loading();\r\n@let btnTitle = title();\r\n@let pIcon = prefixIcon();\r\n@let sIcon = suffixIcon();\r\n@let fSet = fontSet();\r\n@let hType = htmlType();\r\n@let _disabled = disabled();\r\n@let _color = color();\r\n@let _autoId = autoId();\r\n@let _width = width();\r\n@let _tooltip = tooltip();\r\n\r\n@if (btnType === 'fill') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-fill\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"_disabled\"\r\n [color]=\"_color\"\r\n [attr.data-autoId]=\"_autoId\"\r\n [attr.data-disabled]=\"_disabled ? 'true' : 'false'\"\r\n [attr.data-loading]=\"btnLoad ? 'true' : 'false'\"\r\n [style.width]=\"_width\"\r\n [matTooltip]=\"_tooltip || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'light') {\r\n <button\r\n mat-flat-button\r\n class=\"c-button c-light\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"_disabled\"\r\n [color]=\"_color\"\r\n [attr.data-autoId]=\"_autoId\"\r\n [attr.data-disabled]=\"_disabled ? 'true' : 'false'\"\r\n [attr.data-loading]=\"btnLoad ? 'true' : 'false'\"\r\n [style.width]=\"_width\"\r\n [matTooltip]=\"_tooltip || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'outline') {\r\n <button\r\n mat-stroked-button\r\n class=\"c-button c-outline\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"_disabled\"\r\n [color]=\"_color\"\r\n [attr.data-autoId]=\"_autoId\"\r\n [attr.data-disabled]=\"_disabled ? 'true' : 'false'\"\r\n [attr.data-loading]=\"btnLoad ? 'true' : 'false'\"\r\n [style.width]=\"_width\"\r\n [matTooltip]=\"_tooltip || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n} @else if (btnType === 'link') {\r\n <button\r\n mat-button\r\n class=\"c-button c-link\"\r\n [type]=\"hType\"\r\n [ngClass]=\"buttonClasses()\"\r\n [disabled]=\"_disabled\"\r\n [color]=\"_color\"\r\n [attr.data-autoId]=\"_autoId\"\r\n [attr.data-disabled]=\"_disabled ? 'true' : 'false'\"\r\n [attr.data-loading]=\"btnLoad ? 'true' : 'false'\"\r\n [style.width]=\"_width\"\r\n [matTooltip]=\"_tooltip || ''\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"onInternalClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </button>\r\n}\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"c-button-content-wrapper\">\r\n @if (btnLoad) {\r\n <mat-spinner mode=\"indeterminate\" diameter=\"18\" strokeWidth=\"2\" class=\"c-spinner\"></mat-spinner>\r\n } @else if (pIcon) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-prefix\">{{ pIcon }}</mat-icon>\r\n }\r\n\r\n @if (btnTitle) {\r\n <span class=\"c-title\" [class.ml-8]=\"btnLoad || pIcon\" [class.mr-8]=\"sIcon && !btnLoad\">\r\n {{ btnTitle }}\r\n </span>\r\n }\r\n\r\n @if (sIcon && !btnLoad) {\r\n <mat-icon [fontSet]=\"fSet\" class=\"c-icon-suffix\">{{ sIcon }}</mat-icon>\r\n }\r\n\r\n @if (!btnTitle && !pIcon && !btnLoad && sIcon) {\r\n <mat-icon [fontSet]=\"fSet\">{{ sIcon }}</mat-icon>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host{display:inline-block;pointer-events:auto}:host.sd-disabled{cursor:not-allowed}:host.sd-loading{cursor:wait}:host.sd-block{display:block;width:100%}:host.sd-block button{width:100%}:host ::ng-deep button.c-button{pointer-events:auto;min-width:auto;white-space:nowrap}:host ::ng-deep button.c-button .mat-button-wrapper,:host ::ng-deep button.c-button .mdc-button__label{display:flex;align-items:center;justify-content:center;width:100%;min-width:0}:host ::ng-deep button.c-button[disabled],:host ::ng-deep button.c-button.mat-button-disabled{pointer-events:none;color:#a6a6a6!important;background-color:#e9e9e9!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;height:32px;line-height:20px!important;padding:2px 12px!important;font-weight:400}:host ::ng-deep button.c-button.c-sm mat-icon{height:16px!important;width:16px!important;font-size:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-md{font-size:16px;height:40px;line-height:20px;padding:2px 16px!important;font-weight:400}:host ::ng-deep button.c-button.c-md mat-icon{height:20px!important;width:20px!important;font-size:20px!important}:host ::ng-deep button.c-button.c-md.c-square{width:40px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;line-height:20px!important;padding:2px 16px!important;height:48px}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important;min-width:auto!important;padding:0!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-disabled{opacity:.5}:host ::ng-deep button.c-button.c-block{width:100%!important}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error);color:#fff}:host ::ng-deep button.c-button.c-fill.mat-mdc-unelevated-button.mat-secondary{background-color:#000!important;color:#fff}:host ::ng-deep button.c-button.c-fill .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#fff!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary{background-color:var(--sd-primary-light);color:var(--sd-primary)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info{background-color:var(--sd-info-light);color:var(--sd-info)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success{background-color:var(--sd-success-light);color:var(--sd-success)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning{background-color:var(--sd-warning-light);color:var(--sd-warning)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error{background-color:var(--sd-error-light);color:var(--sd-error)}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary{background-color:var(--sd-secondary-light);color:#000!important}:host ::ng-deep button.c-button.c-light.mat-mdc-unelevated-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep button.c-button.c-outline.mat-mdc-outlined-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary{color:var(--sd-primary)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-primary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-primary)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info{color:var(--sd-info)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-info .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-info)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success{color:var(--sd-success)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-success .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-success)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning{color:var(--sd-warning)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-warning .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-warning)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error{color:var(--sd-error)}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-error .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:var(--sd-error)!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary{color:#000!important}:host ::ng-deep button.c-button.c-link.mat-mdc-button.mat-secondary .mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic circle{stroke:#000!important}:host ::ng-deep .c-button-content-wrapper{display:flex;align-items:center;justify-content:center;width:100%;min-width:0;pointer-events:none}:host ::ng-deep .c-title{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .c-spinner{display:inline-block}:host.sd-loading ::ng-deep button.c-button{pointer-events:none;opacity:.85}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
102
100
|
}
|
|
103
101
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdButton, decorators: [{
|
|
104
102
|
type: Component,
|