@sd-angular/core 19.0.0-beta.95 → 19.0.0-beta.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +8 -9
  2. package/components/badge/src/badge.component.d.ts +3 -4
  3. package/components/button/src/button.component.d.ts +2 -2
  4. package/components/index.d.ts +0 -2
  5. package/components/modal/src/modal.component.d.ts +1 -2
  6. package/components/section/src/section.component.d.ts +1 -2
  7. package/components/table/src/components/column-filter/column-filter.component.d.ts +3 -3
  8. package/fesm2022/sd-angular-core-components-form-generic.mjs +4 -4
  9. package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
  10. package/fesm2022/sd-angular-core-components-tab-router.mjs +29 -24
  11. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  12. package/fesm2022/sd-angular-core-components.mjs +0 -2
  13. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  14. package/fesm2022/sd-angular-core-forms-input.mjs +20 -5
  15. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  16. package/fesm2022/sd-angular-core-i18n.mjs +35 -0
  17. package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
  18. package/fesm2022/sd-angular-core-models.mjs +1 -4
  19. package/fesm2022/sd-angular-core-models.mjs.map +1 -1
  20. package/fesm2022/sd-angular-core-services-notify.mjs +21 -21
  21. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  22. package/fesm2022/sd-angular-core-utilities-extensions.mjs +29 -819
  23. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  24. package/fesm2022/sd-angular-core-utilities-models.mjs +36 -136
  25. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  26. package/forms/autocomplete/src/autocomplete.component.d.ts +1 -2
  27. package/forms/chip/src/chip.component.d.ts +1 -2
  28. package/forms/chip-calendar/src/chip-calendar.component.d.ts +1 -2
  29. package/forms/date/src/date.component.d.ts +1 -2
  30. package/forms/date-range/src/date-range.component.d.ts +1 -2
  31. package/forms/datetime/src/datetime.component.d.ts +1 -2
  32. package/forms/input/src/input.component.d.ts +1 -2
  33. package/forms/input-number/src/input-number.component.d.ts +1 -2
  34. package/forms/select/src/select.component.d.ts +5 -5
  35. package/forms/textarea/src/textarea.component.d.ts +1 -2
  36. package/i18n/src/en.d.ts +6 -0
  37. package/models/src/language.model.d.ts +2 -4
  38. package/package.json +75 -86
  39. package/sd-angular-core-19.0.0-beta.96.tgz +0 -0
  40. package/services/notify/index.d.ts +1 -1
  41. package/services/notify/src/components/toast/toast.component.d.ts +3 -3
  42. package/services/notify/src/components/toast-container.component.d.ts +3 -4
  43. package/services/notify/src/notify.model.d.ts +1 -1
  44. package/services/notify/src/notify.service.d.ts +5 -5
  45. package/utilities/extensions/src/array.extension.d.ts +1 -7
  46. package/utilities/extensions/src/color.extension.d.ts +5 -20
  47. package/utilities/extensions/src/date.extension.d.ts +1 -18
  48. package/utilities/extensions/src/number.extension.d.ts +1 -10
  49. package/utilities/extensions/src/string.extension.d.ts +30 -4
  50. package/utilities/extensions/src/utility.extension.d.ts +6 -0
  51. package/utilities/models/src/color.model.d.ts +4 -1
  52. package/utilities/models/src/empty.model.d.ts +3 -0
  53. package/utilities/models/src/filter.model.d.ts +12 -24
  54. package/utilities/models/src/maybe-async.model.d.ts +10 -4
  55. package/utilities/models/src/nested-key-of.model.d.ts +4 -5
  56. package/utilities/models/src/operator.model.d.ts +9 -4
  57. package/utilities/models/src/order.model.d.ts +4 -5
  58. package/utilities/models/src/paging.model.d.ts +8 -16
  59. package/utilities/models/src/pattern.model.d.ts +13 -0
  60. package/utilities/models/src/size.model.d.ts +4 -1
  61. package/components/anchor-v2/index.d.ts +0 -1
  62. package/components/anchor-v2/src/components/anchor-item-v2/anchor-item-v2.component.d.ts +0 -12
  63. package/components/anchor-v2/src/components/anchor-v2/anchor-v2.component.d.ts +0 -19
  64. package/components/anchor-v2/src/components/anchor-vertical-v2/anchor-vertical-list-v2.component.d.ts +0 -16
  65. package/components/anchor-v2/src/components/index.d.ts +0 -2
  66. package/components/anchor-v2/src/index.d.ts +0 -2
  67. package/components/anchor-v2/src/models/index.d.ts +0 -1
  68. package/components/anchor-v2/src/models/sd-anchor-v2.model.d.ts +0 -7
  69. package/components/workflow/index.d.ts +0 -2
  70. package/components/workflow/src/configurations/index.d.ts +0 -1
  71. package/components/workflow/src/configurations/workflow.configuration.d.ts +0 -10
  72. package/fesm2022/sd-angular-core-components-anchor-v2.mjs +0 -151
  73. package/fesm2022/sd-angular-core-components-anchor-v2.mjs.map +0 -1
  74. package/fesm2022/sd-angular-core-components-workflow.mjs +0 -17
  75. package/fesm2022/sd-angular-core-components-workflow.mjs.map +0 -1
  76. package/fesm2022/sd-angular-core-services-firebase.mjs +0 -38
  77. package/fesm2022/sd-angular-core-services-firebase.mjs.map +0 -1
  78. package/sd-angular-core-19.0.0-beta.95.tgz +0 -0
  79. package/services/firebase/index.d.ts +0 -2
  80. package/services/firebase/src/firebase.model.d.ts +0 -8
  81. 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
- REGEX_EMAIL: string;
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
- REGEX_PASSPORT: string;
8
+ /** @deprecated Use REGEX_VN_ID_OR_PASSPORT instead */
7
9
  REGEX_IDVN_OR_PASSPORT: string;
8
- REGEX_TIME: string;
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
- export type SdColor = 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error';
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 +1,4 @@
1
+ import { EMPTY_STR } from '@sdcorejs/utils/constants';
2
+ export { EMPTY_STR };
3
+ /** @deprecated Use {@link EMPTY_STR} from `@sdcorejs/utils/constants` instead */
1
4
  export declare const SD_EMPTY_STR = "--";
@@ -1,24 +1,12 @@
1
- import { SdNestedKeyOf } from './nested-key-of.model';
2
- import { SdOperatorHasData, SdOperatorNoData } from './operator.model';
3
- export type SdFilter<T = any> = SdFilterHasData<T> | SdFilterBetween<T> | SdFilterNoData<T> | SdFilterAndOr<T>;
4
- export interface SdFilterHasData<T = any> {
5
- field: SdNestedKeyOf<T>;
6
- operator: Exclude<SdOperatorHasData, 'BETWEEN'>;
7
- data: any;
8
- }
9
- export interface SdFilterBetween<T = any> {
10
- field: SdNestedKeyOf<T>;
11
- operator: 'BETWEEN';
12
- data: {
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 { Observable } from 'rxjs';
2
- export type SdMaybeAsync<T> = T | Promise<T> | Observable<T>;
3
- export declare const SdResolveMaybeAsync: <T>(value: SdMaybeAsync<T>) => Promise<T>;
4
- export declare const SdNormalizeAsync: <T>(value: SdMaybeAsync<T>) => Observable<T>;
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 Primitive = string | number | boolean | null | undefined | Date | Function;
2
- export type SdNestedKeyOf<ObjectType, Depth extends number[] = []> = Depth['length'] extends 4 ? never : ObjectType extends object ? {
3
- [Key in keyof ObjectType & string]: ObjectType[Key] extends Primitive ? Key : ObjectType[Key] extends Array<any> ? Key : ObjectType[Key] extends object ? Key | `${Key}.${SdNestedKeyOf<ObjectType[Key], [...Depth, 1]>}` : Key;
4
- }[keyof ObjectType & string] : string;
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
- export type SdOperator = SdOperatorHasData | SdOperatorNoData;
2
- export type SdOperatorHasData = 'EQUAL' | 'NOT_EQUAL' | 'CONTAIN' | 'NOT_CONTAIN' | 'IN' | 'NOT_IN' | 'START_WITH' | 'END_WITH' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'BETWEEN';
3
- export type SdOperatorNoData = 'NULL' | 'NOT_NULL';
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: SdOperator;
10
+ value: Operator;
6
11
  symbol?: string;
7
12
  display: string;
8
13
  }[];
@@ -1,5 +1,4 @@
1
- import { SdNestedKeyOf } from "./nested-key-of.model";
2
- export interface SdOrder<T = any> {
3
- field: SdNestedKeyOf<T>;
4
- direction: 'ASC' | 'DESC';
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 { SdFilter } from './filter.model';
2
- import { SdNestedKeyOf } from './nested-key-of.model';
3
- import { SdOrder } from './order.model';
4
- export interface SdQueryReq<T = any> {
5
- filters?: SdFilter<T>[];
6
- fields?: SdNestedKeyOf<T>[];
7
- }
8
- export interface SdPagingReq<T = any> extends SdQueryReq<T> {
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 +1,4 @@
1
- export type SdSize = 'sm' | 'md' | 'lg';
1
+ import type { Size } from '@sdcorejs/utils/models';
2
+ export type { Size };
3
+ /** @deprecated Use {@link Size} from `@sdcorejs/utils/models` instead */
4
+ export type SdSize = Size;
@@ -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,2 +0,0 @@
1
- export * from './anchor-item-v2/anchor-item-v2.component';
2
- export * from './anchor-v2/anchor-v2.component';
@@ -1,2 +0,0 @@
1
- export * from './components';
2
- export * from './models';
@@ -1 +0,0 @@
1
- export * from './sd-anchor-v2.model';
@@ -1,7 +0,0 @@
1
- import { ElementRef, InputSignal } from "@angular/core";
2
- export interface IAnchorItemV2 {
3
- id: string;
4
- title: InputSignal<string>;
5
- icon: InputSignal<string | undefined>;
6
- elementRef: ElementRef;
7
- }
@@ -1,2 +0,0 @@
1
- export * from '@sd-angular/core/components/form-generic';
2
- export { type ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from './src/configurations';
@@ -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