@sd-angular/core 19.0.0-beta.95 → 19.0.0-beta.97
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 +8 -9
- package/components/badge/src/badge.component.d.ts +3 -4
- package/components/button/src/button.component.d.ts +2 -2
- package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +2 -2
- package/components/document-builder/src/document-builder.model.d.ts +6 -2
- package/components/editor/src/editor.component.d.ts +8 -0
- package/components/editor/src/models/image-upload.plugin.model.d.ts +33 -0
- package/components/editor/src/plugins/image-upload/utils/style.utils.d.ts +1 -0
- package/components/index.d.ts +0 -2
- package/components/modal/src/modal.component.d.ts +1 -2
- package/components/section/src/section.component.d.ts +1 -2
- package/components/table/index.d.ts +1 -0
- package/components/table/src/components/column-filter/column-filter.component.d.ts +3 -3
- package/components/table/src/models/index.d.ts +1 -0
- package/components/table/src/models/table-item.model.d.ts +10 -0
- package/components/table/src/models/table-option-style.model.d.ts +6 -1
- package/components/table/src/models/table-option-tree.model.d.ts +12 -0
- package/components/table/src/models/table-option.model.d.ts +6 -0
- package/components/table/src/pipes/index.d.ts +1 -0
- package/components/table/src/pipes/sd-tree.pipe.d.ts +9 -0
- package/components/table/src/services/tree/tree.util.d.ts +14 -0
- package/components/table/src/table.component.d.ts +3 -0
- package/fesm2022/sd-angular-core-components-document-builder.mjs +9 -4
- package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-editor.mjs +222 -97
- package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-form-generic.mjs +4 -4
- package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tab-router.mjs +80 -33
- package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-table.mjs +325 -41
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components.mjs +0 -2
- package/fesm2022/sd-angular-core-components.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input.mjs +20 -5
- package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
- package/fesm2022/sd-angular-core-i18n.mjs +35 -0
- package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
- package/fesm2022/sd-angular-core-models.mjs +1 -4
- package/fesm2022/sd-angular-core-models.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-layout.mjs +172 -37
- package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-notify.mjs +21 -21
- package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-extensions.mjs +29 -819
- package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-models.mjs +36 -136
- package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
- package/forms/autocomplete/src/autocomplete.component.d.ts +1 -2
- package/forms/chip/src/chip.component.d.ts +1 -2
- package/forms/chip-calendar/src/chip-calendar.component.d.ts +1 -2
- package/forms/date/src/date.component.d.ts +1 -2
- package/forms/date-range/src/date-range.component.d.ts +1 -2
- package/forms/datetime/src/datetime.component.d.ts +1 -2
- package/forms/input/src/input.component.d.ts +1 -2
- package/forms/input-number/src/input-number.component.d.ts +1 -2
- package/forms/select/src/select.component.d.ts +5 -5
- package/forms/textarea/src/textarea.component.d.ts +1 -2
- package/i18n/src/en.d.ts +6 -0
- package/models/src/language.model.d.ts +2 -4
- package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +8 -1
- package/modules/layout/configurations/layout.configuration.d.ts +8 -0
- package/modules/layout/services/storage/storage.service.d.ts +2 -0
- package/package.json +68 -79
- package/sd-angular-core-19.0.0-beta.97.tgz +0 -0
- package/services/notify/index.d.ts +1 -1
- package/services/notify/src/components/toast/toast.component.d.ts +3 -3
- package/services/notify/src/components/toast-container.component.d.ts +3 -4
- package/services/notify/src/notify.model.d.ts +1 -1
- package/services/notify/src/notify.service.d.ts +5 -5
- package/utilities/extensions/src/array.extension.d.ts +1 -7
- package/utilities/extensions/src/color.extension.d.ts +5 -20
- package/utilities/extensions/src/date.extension.d.ts +1 -18
- package/utilities/extensions/src/number.extension.d.ts +1 -10
- package/utilities/extensions/src/string.extension.d.ts +30 -4
- package/utilities/extensions/src/utility.extension.d.ts +6 -0
- package/utilities/models/src/color.model.d.ts +4 -1
- package/utilities/models/src/empty.model.d.ts +3 -0
- package/utilities/models/src/filter.model.d.ts +12 -24
- package/utilities/models/src/maybe-async.model.d.ts +10 -4
- package/utilities/models/src/nested-key-of.model.d.ts +4 -5
- package/utilities/models/src/operator.model.d.ts +9 -4
- package/utilities/models/src/order.model.d.ts +4 -5
- package/utilities/models/src/paging.model.d.ts +8 -16
- package/utilities/models/src/pattern.model.d.ts +13 -0
- package/utilities/models/src/size.model.d.ts +4 -1
- package/components/anchor-v2/index.d.ts +0 -1
- package/components/anchor-v2/src/components/anchor-item-v2/anchor-item-v2.component.d.ts +0 -12
- package/components/anchor-v2/src/components/anchor-v2/anchor-v2.component.d.ts +0 -19
- package/components/anchor-v2/src/components/anchor-vertical-v2/anchor-vertical-list-v2.component.d.ts +0 -16
- package/components/anchor-v2/src/components/index.d.ts +0 -2
- package/components/anchor-v2/src/index.d.ts +0 -2
- package/components/anchor-v2/src/models/index.d.ts +0 -1
- package/components/anchor-v2/src/models/sd-anchor-v2.model.d.ts +0 -7
- package/components/workflow/index.d.ts +0 -2
- package/components/workflow/src/configurations/index.d.ts +0 -1
- package/components/workflow/src/configurations/workflow.configuration.d.ts +0 -10
- package/fesm2022/sd-angular-core-components-anchor-v2.mjs +0 -151
- package/fesm2022/sd-angular-core-components-anchor-v2.mjs.map +0 -1
- package/fesm2022/sd-angular-core-components-workflow.mjs +0 -17
- package/fesm2022/sd-angular-core-components-workflow.mjs.map +0 -1
- package/fesm2022/sd-angular-core-services-firebase.mjs +0 -38
- package/fesm2022/sd-angular-core-services-firebase.mjs.map +0 -1
- package/sd-angular-core-19.0.0-beta.95.tgz +0 -0
- package/services/firebase/index.d.ts +0 -2
- package/services/firebase/src/firebase.model.d.ts +0 -8
- package/services/firebase/src/firebase.service.d.ts +0 -14
|
@@ -1,14 +1,40 @@
|
|
|
1
|
+
import { ValidationUtilities } from '@sdcorejs/utils/fns';
|
|
2
|
+
export { ValidationUtilities };
|
|
1
3
|
export declare const StringUtilities: {
|
|
2
|
-
|
|
3
|
-
REGEX_PHONE: string;
|
|
4
|
+
/** @deprecated Use REGEX_VN_PHONE instead */
|
|
4
5
|
REGEX_PHONE_VN: string;
|
|
6
|
+
/** @deprecated Use REGEX_VN_ID instead */
|
|
5
7
|
REGEX_IDVN: string;
|
|
6
|
-
|
|
8
|
+
/** @deprecated Use REGEX_VN_ID_OR_PASSPORT instead */
|
|
7
9
|
REGEX_IDVN_OR_PASSPORT: string;
|
|
8
|
-
|
|
10
|
+
/** @deprecated Use {@link ValidationUtilities.isEmail} instead */
|
|
9
11
|
isValidEmail: (value: any) => boolean;
|
|
12
|
+
/** @deprecated Use {@link ValidationUtilities.isPhone} instead */
|
|
10
13
|
isValidPhone: (value: any) => boolean;
|
|
14
|
+
/** @deprecated Use {@link ValidationUtilities.isCode} instead */
|
|
11
15
|
isValidCode: (value: any) => boolean;
|
|
16
|
+
REGEX_EMAIL: string;
|
|
17
|
+
REGEX_PHONE: string;
|
|
18
|
+
REGEX_VN_PHONE: string;
|
|
19
|
+
REGEX_VN_ID: string;
|
|
20
|
+
REGEX_PASSPORT: string;
|
|
21
|
+
REGEX_VN_ID_OR_PASSPORT: string;
|
|
22
|
+
REGEX_TIME: string;
|
|
23
|
+
REGEX_URL: string;
|
|
24
|
+
REGEX_DOMAIN: string;
|
|
25
|
+
REGEX_IPV4: string;
|
|
26
|
+
REGEX_IPV6: string;
|
|
27
|
+
REGEX_IMAGE_URL: string;
|
|
28
|
+
REGEX_SLUG: string;
|
|
29
|
+
REGEX_NUMBER: string;
|
|
30
|
+
REGEX_INTEGER: string;
|
|
31
|
+
REGEX_DECIMAL: string;
|
|
32
|
+
REGEX_POSITIVE_NUMBER: string;
|
|
33
|
+
REGEX_UUID: string;
|
|
34
|
+
REGEX_CODE_16: string;
|
|
35
|
+
REGEX_CODE_32: string;
|
|
36
|
+
REGEX_HEX_COLOR: string;
|
|
37
|
+
REGEX_BASE64: string;
|
|
12
38
|
changeAliasLowerCase: (alias: any) => string;
|
|
13
39
|
aliasIncludes: (alias: any, searchText: any) => boolean;
|
|
14
40
|
format: (template: string, ...arr: any[]) => string;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export { Utilities, BrowserUtilities } from '@sdcorejs/utils/fns';
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Use {@link Utilities} and {@link BrowserUtilities} from `@sdcorejs/utils/fns` instead.
|
|
4
|
+
* - upload/download/clipboard/isMobile → BrowserUtilities
|
|
5
|
+
* - allWithPaging (→ fetchAllByPaging) / randomId / hash / parseQueryParams / generateUuid / getNestedValue → Utilities
|
|
6
|
+
*/
|
|
1
7
|
declare const SdUtilities: {
|
|
2
8
|
upload: (option?: {
|
|
3
9
|
extensions?: string[];
|
|
@@ -1 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Color } from '@sdcorejs/utils/models';
|
|
2
|
+
export type { Color };
|
|
3
|
+
/** @deprecated Use {@link Color} from `@sdcorejs/utils/models` instead */
|
|
4
|
+
export type SdColor = Color;
|
|
@@ -1,24 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
from: string | number;
|
|
14
|
-
to: string | number;
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export interface SdFilterNoData<T = any> {
|
|
18
|
-
field: SdNestedKeyOf<T>;
|
|
19
|
-
operator: SdOperatorNoData;
|
|
20
|
-
}
|
|
21
|
-
export interface SdFilterAndOr<T = any> {
|
|
22
|
-
operator: 'AND' | 'OR';
|
|
23
|
-
data: SdFilter<T>[];
|
|
24
|
-
}
|
|
1
|
+
import type { Filter, FilterHasData, FilterBetween, FilterNoData, FilterAndOr } from '@sdcorejs/utils/models';
|
|
2
|
+
export type { Filter, FilterHasData, FilterBetween, FilterNoData, FilterAndOr };
|
|
3
|
+
/** @deprecated Use {@link Filter} from `@sdcorejs/utils/models` instead */
|
|
4
|
+
export type SdFilter<T = any> = Filter<T>;
|
|
5
|
+
/** @deprecated Use {@link FilterHasData} from `@sdcorejs/utils/models` instead */
|
|
6
|
+
export type SdFilterHasData<T = any> = FilterHasData<T>;
|
|
7
|
+
/** @deprecated Use {@link FilterBetween} from `@sdcorejs/utils/models` instead */
|
|
8
|
+
export type SdFilterBetween<T = any> = FilterBetween<T>;
|
|
9
|
+
/** @deprecated Use {@link FilterNoData} from `@sdcorejs/utils/models` instead */
|
|
10
|
+
export type SdFilterNoData<T = any> = FilterNoData<T>;
|
|
11
|
+
/** @deprecated Use {@link FilterAndOr} from `@sdcorejs/utils/models` instead */
|
|
12
|
+
export type SdFilterAndOr<T = any> = FilterAndOr<T>;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
export
|
|
1
|
+
import type { MaybeAsync } from '@sdcorejs/utils/models';
|
|
2
|
+
import { resolveMaybeAsync, normalizeAsync } from '@sdcorejs/utils/models';
|
|
3
|
+
export type { MaybeAsync };
|
|
4
|
+
export { resolveMaybeAsync, normalizeAsync };
|
|
5
|
+
/** @deprecated Use {@link MaybeAsync} from `@sdcorejs/utils/models` instead */
|
|
6
|
+
export type SdMaybeAsync<T> = MaybeAsync<T>;
|
|
7
|
+
/** @deprecated Use {@link resolveMaybeAsync} from `@sdcorejs/utils/models` instead */
|
|
8
|
+
export declare const SdResolveMaybeAsync: <T>(value: MaybeAsync<T>) => Promise<T>;
|
|
9
|
+
/** @deprecated Use {@link normalizeAsync} from `@sdcorejs/utils/models` instead */
|
|
10
|
+
export declare const SdNormalizeAsync: <T>(value: MaybeAsync<T>) => import("rxjs").Observable<T>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
type
|
|
2
|
-
export type
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export {};
|
|
1
|
+
import type { NestedKeyOf } from '@sdcorejs/utils/models';
|
|
2
|
+
export type { NestedKeyOf };
|
|
3
|
+
/** @deprecated Use {@link NestedKeyOf} from `@sdcorejs/utils/models` instead */
|
|
4
|
+
export type SdNestedKeyOf<T> = NestedKeyOf<T>;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
export type
|
|
3
|
-
|
|
1
|
+
import type { Operator, OperatorHasData, OperatorNoData } from '@sdcorejs/utils/models';
|
|
2
|
+
export type { Operator, OperatorHasData, OperatorNoData };
|
|
3
|
+
/** @deprecated Use {@link Operator} from `@sdcorejs/utils/models` instead */
|
|
4
|
+
export type SdOperator = Operator;
|
|
5
|
+
/** @deprecated Use {@link OperatorHasData} from `@sdcorejs/utils/models` instead */
|
|
6
|
+
export type SdOperatorHasData = OperatorHasData;
|
|
7
|
+
/** @deprecated Use {@link OperatorNoData} from `@sdcorejs/utils/models` instead */
|
|
8
|
+
export type SdOperatorNoData = OperatorNoData;
|
|
4
9
|
export declare const SdOperators: {
|
|
5
|
-
value:
|
|
10
|
+
value: Operator;
|
|
6
11
|
symbol?: string;
|
|
7
12
|
display: string;
|
|
8
13
|
}[];
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
1
|
+
import type { Order } from '@sdcorejs/utils/models';
|
|
2
|
+
export type { Order };
|
|
3
|
+
/** @deprecated Use {@link Order} from `@sdcorejs/utils/models` instead */
|
|
4
|
+
export type SdOrder<T = any> = Order<T>;
|
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
export
|
|
9
|
-
pageSize?: number;
|
|
10
|
-
pageNumber?: number;
|
|
11
|
-
orders?: SdOrder<T>[];
|
|
12
|
-
}
|
|
13
|
-
export interface SdPagingRes<T = any> {
|
|
14
|
-
items: T[];
|
|
15
|
-
total: number;
|
|
16
|
-
}
|
|
1
|
+
import type { QueryReq, PagingReq, PagingRes } from '@sdcorejs/utils/models';
|
|
2
|
+
export type { QueryReq, PagingReq, PagingRes };
|
|
3
|
+
/** @deprecated Use {@link QueryReq} from `@sdcorejs/utils/models` instead */
|
|
4
|
+
export type SdQueryReq<T = any> = QueryReq<T>;
|
|
5
|
+
/** @deprecated Use {@link PagingReq} from `@sdcorejs/utils/models` instead */
|
|
6
|
+
export type SdPagingReq<T = any> = PagingReq<T>;
|
|
7
|
+
/** @deprecated Use {@link PagingRes} from `@sdcorejs/utils/models` instead */
|
|
8
|
+
export type SdPagingRes<T = any> = PagingRes<T>;
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
+
import type { ValidationPatternType, ValidationPattern } from '@sdcorejs/utils/models';
|
|
2
|
+
import { VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';
|
|
3
|
+
export type { ValidationPatternType, ValidationPattern };
|
|
4
|
+
export { VALIDATION_PATTERNS };
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Use {@link ValidationPatternType} from `@sdcorejs/utils/models` instead.
|
|
7
|
+
* Note: member names changed — PHONE_VN → VN_PHONE, IDVN → VN_ID, IDVN_OR_PASSPORT → VN_ID_OR_PASSPORT.
|
|
8
|
+
*/
|
|
1
9
|
export type SdPatternType = 'EMAIL' | 'PHONE' | 'PHONE_VN' | 'IDVN' | 'PASSPORT' | 'IDVN_OR_PASSPORT' | 'TIME';
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated Use {@link ValidationPattern} from `@sdcorejs/utils/models` instead.
|
|
12
|
+
* Note: `regex` field renamed to `pattern` to align with Angular `Validators.pattern()`.
|
|
13
|
+
*/
|
|
2
14
|
export interface SdPatternCommon {
|
|
3
15
|
type: SdPatternType;
|
|
4
16
|
name: string;
|
|
5
17
|
regex: string;
|
|
6
18
|
errorMessage: string;
|
|
7
19
|
}
|
|
20
|
+
/** @deprecated Use `VALIDATION_PATTERNS` from `@sdcorejs/utils/constants` instead. */
|
|
8
21
|
export declare const SdPatternCommons: SdPatternCommon[];
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './src';
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ElementRef } from '@angular/core';
|
|
2
|
-
import { IAnchorItemV2 } from '../../models';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class SdAnchorItemV2 implements IAnchorItemV2 {
|
|
5
|
-
title: import("@angular/core").InputSignal<string>;
|
|
6
|
-
icon: import("@angular/core").InputSignal<string | undefined>;
|
|
7
|
-
id: string;
|
|
8
|
-
elementRef: ElementRef<any>;
|
|
9
|
-
constructor();
|
|
10
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SdAnchorItemV2, never>;
|
|
11
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdAnchorItemV2, "sd-anchor-item-v2", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
12
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ElementRef, OnDestroy } from '@angular/core';
|
|
2
|
-
import { SdAnchorItemV2 } from '../anchor-item-v2/anchor-item-v2.component';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class SdAnchorV2 implements OnDestroy {
|
|
5
|
-
#private;
|
|
6
|
-
wrapper: import("@angular/core").Signal<ElementRef<any>>;
|
|
7
|
-
sections: import("@angular/core").Signal<readonly SdAnchorItemV2[]>;
|
|
8
|
-
type: import("@angular/core").InputSignal<"vertical" | "horizontal">;
|
|
9
|
-
sidebarWidth: import("@angular/core").InputSignal<string>;
|
|
10
|
-
ellipsis: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
11
|
-
isOverscroll: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
12
|
-
isHiddenAnchorList: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
13
|
-
activeSectionId: import("@angular/core").WritableSignal<string>;
|
|
14
|
-
constructor();
|
|
15
|
-
scrollSectionByClick(idSectionTarget: string): void;
|
|
16
|
-
ngOnDestroy(): void;
|
|
17
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SdAnchorV2, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdAnchorV2, "sd-anchor-v2", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "sidebarWidth": { "alias": "sidebarWidth"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "isOverscroll": { "alias": "isOverscroll"; "required": false; "isSignal": true; }; "isHiddenAnchorList": { "alias": "isHiddenAnchorList"; "required": false; "isSignal": true; }; }, {}, ["sections"], ["*"], true, never>;
|
|
19
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { OnDestroy } from '@angular/core';
|
|
2
|
-
import { SdAnchorItemV2 } from '../anchor-item-v2/anchor-item-v2.component';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class SdAnchorVerticalListV2 implements OnDestroy {
|
|
5
|
-
#private;
|
|
6
|
-
sections: import("@angular/core").InputSignal<readonly SdAnchorItemV2[]>;
|
|
7
|
-
activeSectionId: import("@angular/core").InputSignal<string>;
|
|
8
|
-
ellipsis: import("@angular/core").InputSignal<boolean>;
|
|
9
|
-
sidebarWidth: import("@angular/core").InputSignal<string>;
|
|
10
|
-
sdClickSection: import("@angular/core").OutputEmitterRef<string>;
|
|
11
|
-
constructor();
|
|
12
|
-
onClickSection: (id: string) => void;
|
|
13
|
-
ngOnDestroy(): void;
|
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SdAnchorVerticalListV2, never>;
|
|
15
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdAnchorVerticalListV2, "sd-anchor-vertical-list-v2", never, { "sections": { "alias": "sections"; "required": true; "isSignal": true; }; "activeSectionId": { "alias": "activeSectionId"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "sidebarWidth": { "alias": "sidebarWidth"; "required": false; "isSignal": true; }; }, { "sdClickSection": "sdClickSection"; }, never, never, true, never>;
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './sd-anchor-v2.model';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './workflow.configuration';
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
import { ISdFormGenericConfiguration } from '@sd-angular/core/components/form-generic';
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated Sử dụng ISdFormGenericConfiguration từ '@sd-angular/core/components/form-generic' thay thế
|
|
5
|
-
*/
|
|
6
|
-
export type ISdWorkflowConfiguration = ISdFormGenericConfiguration;
|
|
7
|
-
/**
|
|
8
|
-
* @deprecated Sử dụng SD_FORM_GENERIC_CONFIGURATION từ '@sd-angular/core/components/form-generic' thay thế
|
|
9
|
-
*/
|
|
10
|
-
export declare const SD_WORKFLOW_CONFIGURATION: InjectionToken<ISdFormGenericConfiguration>;
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import * as i1$1 from '@angular/common';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import * as i0 from '@angular/core';
|
|
4
|
-
import { input, inject, ElementRef, effect, Component, output, ChangeDetectionStrategy, viewChild, contentChildren, booleanAttribute, signal, afterNextRender } from '@angular/core';
|
|
5
|
-
import { v4 } from 'uuid';
|
|
6
|
-
import { Subject, Subscription, debounceTime, fromEvent, auditTime, map, filter, take } from 'rxjs';
|
|
7
|
-
import * as i1 from '@angular/material/icon';
|
|
8
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
-
|
|
10
|
-
class SdAnchorItemV2 {
|
|
11
|
-
title = input.required();
|
|
12
|
-
icon = input();
|
|
13
|
-
id = v4();
|
|
14
|
-
elementRef = inject(ElementRef);
|
|
15
|
-
constructor() {
|
|
16
|
-
effect(() => {
|
|
17
|
-
if (this.title()) {
|
|
18
|
-
this.elementRef.nativeElement.removeAttribute('title');
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchorItemV2, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.21", type: SdAnchorItemV2, isStandalone: true, selector: "sd-anchor-item-v2", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<section>\r\n <ng-content></ng-content>\r\n</section>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
24
|
-
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchorItemV2, decorators: [{
|
|
26
|
-
type: Component,
|
|
27
|
-
args: [{ selector: 'sd-anchor-item-v2', imports: [CommonModule], standalone: true, template: "<section>\r\n <ng-content></ng-content>\r\n</section>\r\n" }]
|
|
28
|
-
}], ctorParameters: () => [] });
|
|
29
|
-
|
|
30
|
-
class SdAnchorVerticalListV2 {
|
|
31
|
-
sections = input.required();
|
|
32
|
-
activeSectionId = input('');
|
|
33
|
-
ellipsis = input(false);
|
|
34
|
-
sidebarWidth = input('');
|
|
35
|
-
sdClickSection = output();
|
|
36
|
-
#delay = 200;
|
|
37
|
-
#clickSectionSubject = new Subject();
|
|
38
|
-
#subscription = new Subscription();
|
|
39
|
-
constructor() {
|
|
40
|
-
this.#subscription.add(this.#clickSectionSubject
|
|
41
|
-
.pipe(debounceTime(this.#delay))
|
|
42
|
-
.subscribe((id) => this.sdClickSection.emit(id)));
|
|
43
|
-
}
|
|
44
|
-
onClickSection = (id) => {
|
|
45
|
-
this.#clickSectionSubject.next(id);
|
|
46
|
-
};
|
|
47
|
-
ngOnDestroy() {
|
|
48
|
-
this.#subscription.unsubscribe();
|
|
49
|
-
}
|
|
50
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchorVerticalListV2, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
51
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdAnchorVerticalListV2, isStandalone: true, selector: "sd-anchor-vertical-list-v2", inputs: { sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: true, transformFunction: null }, activeSectionId: { classPropertyName: "activeSectionId", publicName: "activeSectionId", isSignal: true, isRequired: false, transformFunction: null }, ellipsis: { classPropertyName: "ellipsis", publicName: "ellipsis", isSignal: true, isRequired: false, transformFunction: null }, sidebarWidth: { classPropertyName: "sidebarWidth", publicName: "sidebarWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sdClickSection: "sdClickSection" }, ngImport: i0, template: "<div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\n @for (section of sections(); track section.id) {\n <div\n class=\"c-anchor-list-item\"\n [class.active]=\"section.id === activeSectionId()\"\n (click)=\"onClickSection(section.id)\"\n (keydown.enter)=\"onClickSection(section.id)\"\n tabindex=\"0\">\n @if (section.icon()) {\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\n }\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\n {{ section.title() }}\n </div>\n </div>\n }\n</div>\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}.c-anchor-list{height:100%;display:flex;flex-direction:column}.c-anchor-list .c-anchor-list-item{border-left:2px solid var(--sd-secondary-light);color:var(--sd-black500);padding:.5rem 1.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c-anchor-list .c-anchor-list-item.active{border-left:2px solid var(--sd-primary);font-weight:700}.c-anchor-list .c-anchor-list-item:not(.active){border-left:2px solid var(--sd-secondary-light);font-weight:400}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
52
|
-
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchorVerticalListV2, decorators: [{
|
|
54
|
-
type: Component,
|
|
55
|
-
args: [{ selector: 'sd-anchor-vertical-list-v2', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, MatIconModule], standalone: true, template: "<div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\n @for (section of sections(); track section.id) {\n <div\n class=\"c-anchor-list-item\"\n [class.active]=\"section.id === activeSectionId()\"\n (click)=\"onClickSection(section.id)\"\n (keydown.enter)=\"onClickSection(section.id)\"\n tabindex=\"0\">\n @if (section.icon()) {\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\n }\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\n {{ section.title() }}\n </div>\n </div>\n }\n</div>\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}.c-anchor-list{height:100%;display:flex;flex-direction:column}.c-anchor-list .c-anchor-list-item{border-left:2px solid var(--sd-secondary-light);color:var(--sd-black500);padding:.5rem 1.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c-anchor-list .c-anchor-list-item.active{border-left:2px solid var(--sd-primary);font-weight:700}.c-anchor-list .c-anchor-list-item:not(.active){border-left:2px solid var(--sd-secondary-light);font-weight:400}\n"] }]
|
|
56
|
-
}], ctorParameters: () => [] });
|
|
57
|
-
|
|
58
|
-
class SdAnchorV2 {
|
|
59
|
-
wrapper = viewChild.required('wrapper');
|
|
60
|
-
sections = contentChildren(SdAnchorItemV2);
|
|
61
|
-
type = input('vertical');
|
|
62
|
-
sidebarWidth = input('200px');
|
|
63
|
-
ellipsis = input(false, { transform: booleanAttribute });
|
|
64
|
-
isOverscroll = input(false, { transform: booleanAttribute });
|
|
65
|
-
isHiddenAnchorList = input(false, { transform: booleanAttribute });
|
|
66
|
-
activeSectionId = signal('');
|
|
67
|
-
#scrollSubscription = new Subscription();
|
|
68
|
-
#clickScrollSubscription = new Subscription();
|
|
69
|
-
#delay = 100;
|
|
70
|
-
#currentScrollTop = 0;
|
|
71
|
-
#timeoutId = null;
|
|
72
|
-
constructor() {
|
|
73
|
-
afterNextRender(() => {
|
|
74
|
-
if (!this.isHiddenAnchorList()) {
|
|
75
|
-
this.activeSectionId.set(this.sections()[0]?.id ?? '');
|
|
76
|
-
this.#registerScrollSubscription();
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
#registerScrollSubscription = () => {
|
|
81
|
-
this.#disposeResources();
|
|
82
|
-
const wrapperEl = this.wrapper().nativeElement;
|
|
83
|
-
this.#scrollSubscription = fromEvent(wrapperEl, 'scroll')
|
|
84
|
-
.pipe(auditTime(50))
|
|
85
|
-
.subscribe((event) => {
|
|
86
|
-
const el = event.target;
|
|
87
|
-
this.#currentScrollTop = this.#updateCurrentScroll(el);
|
|
88
|
-
for (const section of this.sections()) {
|
|
89
|
-
const rect = section.elementRef.nativeElement;
|
|
90
|
-
const rectTop = rect.offsetTop;
|
|
91
|
-
const rectBottom = rectTop + rect.offsetHeight;
|
|
92
|
-
if (this.#currentScrollTop >= rectTop && this.#currentScrollTop < rectBottom) {
|
|
93
|
-
this.activeSectionId.set(section.id);
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
scrollSectionByClick(idSectionTarget) {
|
|
100
|
-
this.activeSectionId.set(idSectionTarget);
|
|
101
|
-
const targetSection = this.sections().find(s => s.id === idSectionTarget)?.elementRef;
|
|
102
|
-
if (!targetSection)
|
|
103
|
-
return;
|
|
104
|
-
this.#disposeResources();
|
|
105
|
-
const wrapperEl = this.wrapper().nativeElement;
|
|
106
|
-
const targetElement = targetSection.nativeElement;
|
|
107
|
-
const prevScrollTop = this.#currentScrollTop;
|
|
108
|
-
this.#clickScrollSubscription = fromEvent(wrapperEl, 'scroll')
|
|
109
|
-
.pipe(auditTime(this.#delay), map((event) => {
|
|
110
|
-
const el = event.target;
|
|
111
|
-
this.#currentScrollTop = this.#updateCurrentScroll(el);
|
|
112
|
-
const wrapperTop = wrapperEl.getBoundingClientRect().top;
|
|
113
|
-
const targetRect = targetElement.getBoundingClientRect();
|
|
114
|
-
const isVisible = targetRect.top >= 0 && targetRect.bottom <= window.innerHeight;
|
|
115
|
-
return Math.abs(targetRect.top - wrapperTop) < 1 || isVisible;
|
|
116
|
-
}), filter(Boolean), debounceTime(this.#delay + 100), take(1))
|
|
117
|
-
.subscribe(() => this.#registerScrollSubscription());
|
|
118
|
-
this.#timeoutId = setTimeout(() => {
|
|
119
|
-
if (prevScrollTop === this.#currentScrollTop) {
|
|
120
|
-
this.#registerScrollSubscription();
|
|
121
|
-
}
|
|
122
|
-
}, this.#delay + 100);
|
|
123
|
-
wrapperEl.scrollTo({ top: targetElement.offsetTop, behavior: 'smooth' });
|
|
124
|
-
}
|
|
125
|
-
#updateCurrentScroll(el) {
|
|
126
|
-
const style = getComputedStyle(el);
|
|
127
|
-
return el.scrollTop + parseFloat(style.paddingTop) + parseFloat(style.borderTopWidth);
|
|
128
|
-
}
|
|
129
|
-
#disposeResources = () => {
|
|
130
|
-
if (this.#timeoutId)
|
|
131
|
-
clearTimeout(this.#timeoutId);
|
|
132
|
-
this.#scrollSubscription?.unsubscribe();
|
|
133
|
-
this.#clickScrollSubscription?.unsubscribe();
|
|
134
|
-
};
|
|
135
|
-
ngOnDestroy() {
|
|
136
|
-
this.#disposeResources();
|
|
137
|
-
}
|
|
138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchorV2, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
139
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdAnchorV2, isStandalone: true, selector: "sd-anchor-v2", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, sidebarWidth: { classPropertyName: "sidebarWidth", publicName: "sidebarWidth", isSignal: true, isRequired: false, transformFunction: null }, ellipsis: { classPropertyName: "ellipsis", publicName: "ellipsis", isSignal: true, isRequired: false, transformFunction: null }, isOverscroll: { classPropertyName: "isOverscroll", publicName: "isOverscroll", isSignal: true, isRequired: false, transformFunction: null }, isHiddenAnchorList: { classPropertyName: "isHiddenAnchorList", publicName: "isHiddenAnchorList", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "sections", predicate: SdAnchorItemV2, isSignal: true }], viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"c-anchor-vertical\" [ngClass]=\"{ 'c-stop-scroll-propagation': !isOverscroll() }\" #wrapper>\n <div class=\"c-anchor-content\" [style.width]=\"'calc(100% - ' + sidebarWidth() + ' - 16px)'\">\n <ng-content></ng-content>\n </div>\n\n @if (!isHiddenAnchorList()) {\n <div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\n <sd-anchor-vertical-list-v2\n [sections]=\"sections()\"\n [ellipsis]=\"ellipsis()\"\n [sidebarWidth]=\"sidebarWidth()\"\n [activeSectionId]=\"activeSectionId()\"\n (sdClickSection)=\"scrollSectionByClick($event)\">\n </sd-anchor-vertical-list-v2>\n </div>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.c-anchor-vertical{position:relative;display:flex;height:100%;width:100%;gap:16px;overflow-y:auto}.c-anchor-vertical.c-stop-scroll-propagation{overscroll-behavior:contain}.c-anchor-vertical .c-anchor-content{width:100%}.c-anchor-vertical .c-anchor-list{position:sticky;top:0;right:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SdAnchorVerticalListV2, selector: "sd-anchor-vertical-list-v2", inputs: ["sections", "activeSectionId", "ellipsis", "sidebarWidth"], outputs: ["sdClickSection"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
140
|
-
}
|
|
141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchorV2, decorators: [{
|
|
142
|
-
type: Component,
|
|
143
|
-
args: [{ selector: 'sd-anchor-v2', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, SdAnchorVerticalListV2], standalone: true, template: "<div class=\"c-anchor-vertical\" [ngClass]=\"{ 'c-stop-scroll-propagation': !isOverscroll() }\" #wrapper>\n <div class=\"c-anchor-content\" [style.width]=\"'calc(100% - ' + sidebarWidth() + ' - 16px)'\">\n <ng-content></ng-content>\n </div>\n\n @if (!isHiddenAnchorList()) {\n <div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\n <sd-anchor-vertical-list-v2\n [sections]=\"sections()\"\n [ellipsis]=\"ellipsis()\"\n [sidebarWidth]=\"sidebarWidth()\"\n [activeSectionId]=\"activeSectionId()\"\n (sdClickSection)=\"scrollSectionByClick($event)\">\n </sd-anchor-vertical-list-v2>\n </div>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.c-anchor-vertical{position:relative;display:flex;height:100%;width:100%;gap:16px;overflow-y:auto}.c-anchor-vertical.c-stop-scroll-propagation{overscroll-behavior:contain}.c-anchor-vertical .c-anchor-content{width:100%}.c-anchor-vertical .c-anchor-list{position:sticky;top:0;right:6px}\n"] }]
|
|
144
|
-
}], ctorParameters: () => [] });
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Generated bundle index. Do not edit.
|
|
148
|
-
*/
|
|
149
|
-
|
|
150
|
-
export { SdAnchorItemV2, SdAnchorV2 };
|
|
151
|
-
//# sourceMappingURL=sd-angular-core-components-anchor-v2.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-components-anchor-v2.mjs","sources":["../../../projects/sd-angular/components/anchor-v2/src/components/anchor-item-v2/anchor-item-v2.component.ts","../../../projects/sd-angular/components/anchor-v2/src/components/anchor-item-v2/anchor-item-v2.component.html","../../../projects/sd-angular/components/anchor-v2/src/components/anchor-vertical-v2/anchor-vertical-list-v2.component.ts","../../../projects/sd-angular/components/anchor-v2/src/components/anchor-vertical-v2/anchor-vertical-list-v2.component.html","../../../projects/sd-angular/components/anchor-v2/src/components/anchor-v2/anchor-v2.component.ts","../../../projects/sd-angular/components/anchor-v2/src/components/anchor-v2/anchor-v2.component.html","../../../projects/sd-angular/components/anchor-v2/sd-angular-core-components-anchor-v2.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, effect, inject, input } from '@angular/core';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { IAnchorItemV2 } from '../../models';\r\n\r\n@Component({\r\n selector: 'sd-anchor-item-v2',\r\n templateUrl: './anchor-item-v2.component.html',\r\n styleUrls: ['./anchor-item-v2.component.scss'],\r\n imports: [CommonModule],\r\n standalone: true,\r\n})\r\nexport class SdAnchorItemV2 implements IAnchorItemV2 {\r\n title = input.required<string>();\r\n icon = input<string | undefined>();\r\n id: string = uuidv4();\r\n elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.title()) {\r\n this.elementRef.nativeElement.removeAttribute('title');\r\n }\r\n });\r\n }\r\n}\r\n","<section>\r\n <ng-content></ng-content>\r\n</section>\r\n","import { ChangeDetectionStrategy, Component, OnDestroy, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Subject, Subscription, debounceTime } from 'rxjs';\n\nimport { SdAnchorItemV2 } from '../anchor-item-v2/anchor-item-v2.component';\n\n@Component({\n selector: 'sd-anchor-vertical-list-v2',\n templateUrl: './anchor-vertical-list-v2.component.html',\n styleUrl: './anchor-vertical-list-v2.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, MatIconModule],\n standalone: true,\n})\nexport class SdAnchorVerticalListV2 implements OnDestroy {\n sections = input.required<readonly SdAnchorItemV2[]>();\n activeSectionId = input<string>('');\n ellipsis = input<boolean>(false);\n sidebarWidth = input<string>('');\n\n sdClickSection = output<string>();\n\n #delay = 200;\n #clickSectionSubject = new Subject<string>();\n #subscription = new Subscription();\n\n constructor() {\n this.#subscription.add(\n this.#clickSectionSubject\n .pipe(debounceTime(this.#delay))\n .subscribe((id: string) => this.sdClickSection.emit(id))\n );\n }\n\n onClickSection = (id: string): void => {\n this.#clickSectionSubject.next(id);\n };\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","<div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\n @for (section of sections(); track section.id) {\n <div\n class=\"c-anchor-list-item\"\n [class.active]=\"section.id === activeSectionId()\"\n (click)=\"onClickSection(section.id)\"\n (keydown.enter)=\"onClickSection(section.id)\"\n tabindex=\"0\">\n @if (section.icon()) {\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\n }\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\n {{ section.title() }}\n </div>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n afterNextRender,\n booleanAttribute,\n contentChildren,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription, auditTime, debounceTime, filter, fromEvent, map, take } from 'rxjs';\n\nimport { SdAnchorVerticalListV2 } from '../anchor-vertical-v2/anchor-vertical-list-v2.component';\nimport { SdAnchorItemV2 } from '../anchor-item-v2/anchor-item-v2.component';\n\n@Component({\n selector: 'sd-anchor-v2',\n templateUrl: './anchor-v2.component.html',\n styleUrls: ['./anchor-v2.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, SdAnchorVerticalListV2],\n standalone: true,\n})\nexport class SdAnchorV2 implements OnDestroy {\n wrapper = viewChild.required<ElementRef>('wrapper');\n sections = contentChildren(SdAnchorItemV2);\n\n type = input<'vertical' | 'horizontal'>('vertical');\n sidebarWidth = input<string>('200px');\n ellipsis = input(false, { transform: booleanAttribute });\n isOverscroll = input(false, { transform: booleanAttribute });\n isHiddenAnchorList = input(false, { transform: booleanAttribute });\n\n activeSectionId = signal<string>('');\n\n #scrollSubscription = new Subscription();\n #clickScrollSubscription = new Subscription();\n #delay = 100;\n #currentScrollTop = 0;\n #timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n afterNextRender(() => {\n if (!this.isHiddenAnchorList()) {\n this.activeSectionId.set(this.sections()[0]?.id ?? '');\n this.#registerScrollSubscription();\n }\n });\n }\n\n #registerScrollSubscription = (): void => {\n this.#disposeResources();\n const wrapperEl = this.wrapper().nativeElement;\n this.#scrollSubscription = fromEvent<UIEvent>(wrapperEl, 'scroll')\n .pipe(auditTime(50))\n .subscribe((event: UIEvent) => {\n const el = event.target as HTMLElement;\n this.#currentScrollTop = this.#updateCurrentScroll(el);\n for (const section of this.sections()) {\n const rect = section.elementRef.nativeElement;\n const rectTop = rect.offsetTop;\n const rectBottom = rectTop + rect.offsetHeight;\n if (this.#currentScrollTop >= rectTop && this.#currentScrollTop < rectBottom) {\n this.activeSectionId.set(section.id);\n break;\n }\n }\n });\n };\n\n scrollSectionByClick(idSectionTarget: string): void {\n this.activeSectionId.set(idSectionTarget);\n const targetSection = this.sections().find(s => s.id === idSectionTarget)?.elementRef;\n if (!targetSection) return;\n\n this.#disposeResources();\n const wrapperEl = this.wrapper().nativeElement;\n const targetElement = targetSection.nativeElement;\n const prevScrollTop = this.#currentScrollTop;\n\n this.#clickScrollSubscription = fromEvent<UIEvent>(wrapperEl, 'scroll')\n .pipe(\n auditTime(this.#delay),\n map((event: UIEvent) => {\n const el = event.target as HTMLElement;\n this.#currentScrollTop = this.#updateCurrentScroll(el);\n const wrapperTop = wrapperEl.getBoundingClientRect().top;\n const targetRect = targetElement.getBoundingClientRect();\n const isVisible = targetRect.top >= 0 && targetRect.bottom <= window.innerHeight;\n return Math.abs(targetRect.top - wrapperTop) < 1 || isVisible;\n }),\n filter(Boolean),\n debounceTime(this.#delay + 100),\n take(1)\n )\n .subscribe(() => this.#registerScrollSubscription());\n\n this.#timeoutId = setTimeout(() => {\n if (prevScrollTop === this.#currentScrollTop) {\n this.#registerScrollSubscription();\n }\n }, this.#delay + 100);\n\n wrapperEl.scrollTo({ top: targetElement.offsetTop, behavior: 'smooth' });\n }\n\n #updateCurrentScroll(el: HTMLElement): number {\n const style = getComputedStyle(el);\n return el.scrollTop + parseFloat(style.paddingTop) + parseFloat(style.borderTopWidth);\n }\n\n #disposeResources = (): void => {\n if (this.#timeoutId) clearTimeout(this.#timeoutId);\n this.#scrollSubscription?.unsubscribe();\n this.#clickScrollSubscription?.unsubscribe();\n };\n\n ngOnDestroy(): void {\n this.#disposeResources();\n }\n}\n","<div class=\"c-anchor-vertical\" [ngClass]=\"{ 'c-stop-scroll-propagation': !isOverscroll() }\" #wrapper>\n <div class=\"c-anchor-content\" [style.width]=\"'calc(100% - ' + sidebarWidth() + ' - 16px)'\">\n <ng-content></ng-content>\n </div>\n\n @if (!isHiddenAnchorList()) {\n <div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\n <sd-anchor-vertical-list-v2\n [sections]=\"sections()\"\n [ellipsis]=\"ellipsis()\"\n [sidebarWidth]=\"sidebarWidth()\"\n [activeSectionId]=\"activeSectionId()\"\n (sdClickSection)=\"scrollSectionByClick($event)\">\n </sd-anchor-vertical-list-v2>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuidv4"],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export * from '@sd-angular/core/components/form-generic';
|
|
2
|
-
import { InjectionToken } from '@angular/core';
|
|
3
|
-
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
-
/**
|
|
6
|
-
* @deprecated Sử dụng SD_FORM_GENERIC_CONFIGURATION từ '@sd-angular/core/components/form-generic' thay thế
|
|
7
|
-
*/
|
|
8
|
-
const SD_WORKFLOW_CONFIGURATION = new InjectionToken('sd.workflow.configuration');
|
|
9
|
-
|
|
10
|
-
// Re-export tất cả từ form-generic để giữ backward compatibility
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Generated bundle index. Do not edit.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
export { SD_WORKFLOW_CONFIGURATION };
|
|
17
|
-
//# sourceMappingURL=sd-angular-core-components-workflow.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-components-workflow.mjs","sources":["../../../projects/sd-angular/components/workflow/src/configurations/workflow.configuration.ts","../../../projects/sd-angular/components/workflow/index.ts","../../../projects/sd-angular/components/workflow/sd-angular-core-components-workflow.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { ISdFormGenericConfiguration } from '@sd-angular/core/components/form-generic';\r\n\r\n/**\r\n * @deprecated Sử dụng ISdFormGenericConfiguration từ '@sd-angular/core/components/form-generic' thay thế\r\n */\r\nexport type ISdWorkflowConfiguration = ISdFormGenericConfiguration;\r\n\r\n/**\r\n * @deprecated Sử dụng SD_FORM_GENERIC_CONFIGURATION từ '@sd-angular/core/components/form-generic' thay thế\r\n */\r\nexport const SD_WORKFLOW_CONFIGURATION = new InjectionToken<ISdWorkflowConfiguration>('sd.workflow.configuration');\r\n","// Re-export tất cả từ form-generic để giữ backward compatibility\r\nexport * from '@sd-angular/core/components/form-generic';\r\n\r\n// Giữ lại backward compatibility cho workflow configuration\r\n// Các consumer cũ sử dụng SD_WORKFLOW_CONFIGURATION vẫn hoạt động\r\nexport { type ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from './src/configurations';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAAA;AASA;;AAEG;MACU,yBAAyB,GAAG,IAAI,cAAc,CAA2B,2BAA2B;;ACZjH;;ACAA;;AAEG;;;;"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Inject, Optional, Injectable } from '@angular/core';
|
|
3
|
-
import * as i1 from '@sd-angular/core/services/api';
|
|
4
|
-
|
|
5
|
-
const SD_FIREBASE_CONFIG = new InjectionToken('sd.firebase.configuration');
|
|
6
|
-
|
|
7
|
-
class SdFirebaseService {
|
|
8
|
-
apiService;
|
|
9
|
-
firebaseConfiguration;
|
|
10
|
-
constructor(apiService, firebaseConfiguration) {
|
|
11
|
-
this.apiService = apiService;
|
|
12
|
-
this.firebaseConfiguration = firebaseConfiguration;
|
|
13
|
-
}
|
|
14
|
-
excel = {
|
|
15
|
-
uploadFile: () => { },
|
|
16
|
-
removeFile: () => { },
|
|
17
|
-
};
|
|
18
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdFirebaseService, deps: [{ token: i1.SdApiService }, { token: SD_FIREBASE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdFirebaseService, providedIn: 'root' });
|
|
20
|
-
}
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdFirebaseService, decorators: [{
|
|
22
|
-
type: Injectable,
|
|
23
|
-
args: [{
|
|
24
|
-
providedIn: 'root',
|
|
25
|
-
}]
|
|
26
|
-
}], ctorParameters: () => [{ type: i1.SdApiService }, { type: undefined, decorators: [{
|
|
27
|
-
type: Inject,
|
|
28
|
-
args: [SD_FIREBASE_CONFIG]
|
|
29
|
-
}, {
|
|
30
|
-
type: Optional
|
|
31
|
-
}] }] });
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Generated bundle index. Do not edit.
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
export { SD_FIREBASE_CONFIG, SdFirebaseService };
|
|
38
|
-
//# sourceMappingURL=sd-angular-core-services-firebase.mjs.map
|