@sd-angular/core 19.0.0-beta.94 → 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 (194) hide show
  1. package/README.md +10 -10
  2. package/components/anchor/src/components/anchor/anchor.component.d.ts +4 -1
  3. package/components/anchor/src/components/anchor-item/anchor-item.component.d.ts +2 -1
  4. package/components/anchor/src/components/anchor-vertical/anchor-vertical-list.component.d.ts +3 -1
  5. package/components/badge/src/badge.component.d.ts +3 -4
  6. package/components/button/src/button.component.d.ts +2 -2
  7. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +2 -2
  8. package/components/document-builder/src/document-builder.model.d.ts +2 -2
  9. package/components/editor/src/models/editor.model.d.ts +2 -2
  10. package/components/editor/src/plugins/image-upload/utils/validate.utils.d.ts +2 -2
  11. package/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.d.ts +4 -2
  12. package/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.d.ts +2 -2
  13. package/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.d.ts +2 -2
  14. package/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.d.ts +23 -0
  15. package/components/form-generic/src/components/form-builder/components/group/index.d.ts +1 -0
  16. package/components/form-generic/src/components/form-builder/components/index.d.ts +1 -0
  17. package/components/form-generic/src/components/form-builder/components/table/control/table-control.component.d.ts +3 -0
  18. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +61 -18
  19. package/components/form-generic/src/components/form-render/form-render.component.d.ts +2 -2
  20. package/components/form-generic/src/models/form-generic-component.model.d.ts +22 -2
  21. package/components/index.d.ts +1 -2
  22. package/components/modal/src/modal.component.d.ts +5 -3
  23. package/components/preview/index.d.ts +3 -0
  24. package/components/preview/src/preview-image/preview-image.component.d.ts +84 -24
  25. package/components/preview/src/preview-image/preview-image.types.d.ts +53 -0
  26. package/components/preview/src/preview-pdf/preview-pdf.component.d.ts +186 -0
  27. package/components/preview/src/preview-pdf/preview-pdf.types.d.ts +84 -0
  28. package/components/quick-action/src/quick-action.component.d.ts +5 -6
  29. package/components/section/src/section.component.d.ts +1 -2
  30. package/components/table/src/components/column-filter/column-filter.component.d.ts +3 -3
  31. package/components/table/src/table.component.d.ts +2 -2
  32. package/components/upload-file/src/upload-file.component.d.ts +4 -1
  33. package/configurations/src/sd-core.configuration.d.ts +2 -1
  34. package/fesm2022/sd-angular-core-components-anchor.mjs +19 -6
  35. package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
  36. package/fesm2022/sd-angular-core-components-button.mjs +1 -1
  37. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  38. package/fesm2022/sd-angular-core-components-code-editor.mjs +3 -3
  39. package/fesm2022/sd-angular-core-components-code-editor.mjs.map +1 -1
  40. package/fesm2022/sd-angular-core-components-document-builder.mjs +3 -3
  41. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  42. package/fesm2022/sd-angular-core-components-editor.mjs +3 -3
  43. package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -1
  44. package/fesm2022/sd-angular-core-components-form-generic.mjs +627 -317
  45. package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
  46. package/fesm2022/sd-angular-core-components-history.mjs +3 -3
  47. package/fesm2022/sd-angular-core-components-history.mjs.map +1 -1
  48. package/fesm2022/sd-angular-core-components-import-excel.mjs +5 -5
  49. package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
  50. package/fesm2022/sd-angular-core-components-modal.mjs +8 -3
  51. package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
  52. package/fesm2022/sd-angular-core-components-preview.mjs +1963 -91
  53. package/fesm2022/sd-angular-core-components-preview.mjs.map +1 -1
  54. package/fesm2022/sd-angular-core-components-quick-action.mjs +8 -19
  55. package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
  56. package/fesm2022/sd-angular-core-components-tab-router.mjs +31 -26
  57. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  58. package/fesm2022/sd-angular-core-components-table.mjs +32 -29
  59. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  60. package/fesm2022/sd-angular-core-components-upload-file.mjs +12 -8
  61. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  62. package/fesm2022/sd-angular-core-components.mjs +1 -2
  63. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  64. package/fesm2022/sd-angular-core-configurations.mjs.map +1 -1
  65. package/fesm2022/sd-angular-core-directives.mjs +2 -2
  66. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  67. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +2 -2
  68. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  69. package/fesm2022/sd-angular-core-forms-checkbox.mjs +6 -13
  70. package/fesm2022/sd-angular-core-forms-checkbox.mjs.map +1 -1
  71. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs +6 -5
  72. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
  73. package/fesm2022/sd-angular-core-forms-chip.mjs +6 -12
  74. package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
  75. package/fesm2022/sd-angular-core-forms-date-range.mjs +33 -26
  76. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  77. package/fesm2022/sd-angular-core-forms-date.mjs +29 -19
  78. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  79. package/fesm2022/sd-angular-core-forms-datetime.mjs +98 -57
  80. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  81. package/fesm2022/sd-angular-core-forms-input-number.mjs +2 -2
  82. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  83. package/fesm2022/sd-angular-core-forms-input.mjs +25 -10
  84. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  85. package/fesm2022/sd-angular-core-forms-radio.mjs +7 -15
  86. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  87. package/fesm2022/sd-angular-core-forms-select.mjs +4 -4
  88. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  89. package/fesm2022/sd-angular-core-forms-switch.mjs +6 -14
  90. package/fesm2022/sd-angular-core-forms-switch.mjs.map +1 -1
  91. package/fesm2022/sd-angular-core-forms-textarea.mjs +5 -5
  92. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  93. package/fesm2022/sd-angular-core-handlers.mjs +2 -2
  94. package/fesm2022/sd-angular-core-handlers.mjs.map +1 -1
  95. package/fesm2022/sd-angular-core-i18n.mjs +1610 -38
  96. package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
  97. package/fesm2022/sd-angular-core-interceptors.mjs +2 -2
  98. package/fesm2022/sd-angular-core-interceptors.mjs.map +1 -1
  99. package/fesm2022/sd-angular-core-models.mjs +6 -0
  100. package/fesm2022/sd-angular-core-models.mjs.map +1 -0
  101. package/fesm2022/sd-angular-core-modules-layout.mjs +87 -39
  102. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  103. package/fesm2022/sd-angular-core-services-confirm.mjs +2 -2
  104. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  105. package/fesm2022/sd-angular-core-services-docx.mjs +2 -2
  106. package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -1
  107. package/fesm2022/sd-angular-core-services-excel.mjs +27 -23
  108. package/fesm2022/sd-angular-core-services-excel.mjs.map +1 -1
  109. package/fesm2022/sd-angular-core-services-notify.mjs +21 -21
  110. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  111. package/fesm2022/sd-angular-core-utilities-extensions.mjs +74 -830
  112. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  113. package/fesm2022/sd-angular-core-utilities-models.mjs +36 -136
  114. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  115. package/fesm2022/sd-angular-core.mjs +0 -1
  116. package/fesm2022/sd-angular-core.mjs.map +1 -1
  117. package/forms/autocomplete/src/autocomplete.component.d.ts +1 -2
  118. package/forms/checkbox/src/checkbox.component.d.ts +3 -3
  119. package/forms/chip/src/chip.component.d.ts +4 -4
  120. package/forms/chip-calendar/src/chip-calendar.component.d.ts +4 -4
  121. package/forms/date/src/date.component.d.ts +3 -5
  122. package/forms/date-range/src/date-range.component.d.ts +3 -5
  123. package/forms/datetime/src/datetime.component.d.ts +2 -2
  124. package/forms/datetime/src/popup/sd-datetime-picker.component.d.ts +10 -11
  125. package/forms/input/src/input.component.d.ts +1 -2
  126. package/forms/input-number/src/input-number.component.d.ts +1 -2
  127. package/forms/radio/src/radio.component.d.ts +3 -3
  128. package/forms/select/src/select.component.d.ts +5 -5
  129. package/forms/switch/src/switch.component.d.ts +3 -3
  130. package/forms/textarea/src/textarea.component.d.ts +1 -2
  131. package/i18n/index.d.ts +5 -5
  132. package/i18n/src/en.d.ts +406 -2
  133. package/i18n/src/i18n.messages.d.ts +2 -0
  134. package/i18n/src/i18n.pipe.d.ts +9 -0
  135. package/i18n/src/i18n.service.d.ts +14 -0
  136. package/i18n/src/i18n.token.d.ts +1 -0
  137. package/i18n/src/i18n.types.d.ts +31 -0
  138. package/i18n/src/ja.d.ts +2 -0
  139. package/i18n/src/ko.d.ts +2 -0
  140. package/i18n/src/vi.d.ts +2 -312
  141. package/i18n/src/zh.d.ts +2 -0
  142. package/models/index.d.ts +1 -0
  143. package/models/src/language.model.d.ts +2 -0
  144. package/modules/layout/modules/home/components/home-page/home-page.component.d.ts +25 -0
  145. package/package.json +82 -89
  146. package/public-api.d.ts +0 -1
  147. package/sd-angular-core-19.0.0-beta.96.tgz +0 -0
  148. package/services/notify/index.d.ts +1 -1
  149. package/services/notify/src/components/toast/toast.component.d.ts +3 -3
  150. package/services/notify/src/components/toast-container.component.d.ts +3 -4
  151. package/services/notify/src/notify.model.d.ts +1 -1
  152. package/services/notify/src/notify.service.d.ts +5 -5
  153. package/utilities/extensions/src/array.extension.d.ts +1 -7
  154. package/utilities/extensions/src/color.extension.d.ts +5 -20
  155. package/utilities/extensions/src/date.extension.d.ts +1 -18
  156. package/utilities/extensions/src/number.extension.d.ts +1 -10
  157. package/utilities/extensions/src/string.extension.d.ts +30 -4
  158. package/utilities/extensions/src/utility.extension.d.ts +6 -0
  159. package/utilities/models/src/color.model.d.ts +4 -1
  160. package/utilities/models/src/empty.model.d.ts +3 -0
  161. package/utilities/models/src/filter.model.d.ts +12 -24
  162. package/utilities/models/src/maybe-async.model.d.ts +10 -4
  163. package/utilities/models/src/nested-key-of.model.d.ts +4 -5
  164. package/utilities/models/src/operator.model.d.ts +9 -4
  165. package/utilities/models/src/order.model.d.ts +4 -5
  166. package/utilities/models/src/paging.model.d.ts +8 -16
  167. package/utilities/models/src/pattern.model.d.ts +13 -0
  168. package/utilities/models/src/size.model.d.ts +4 -1
  169. package/components/anchor-v2/index.d.ts +0 -1
  170. package/components/anchor-v2/src/components/anchor-item-v2/anchor-item-v2.component.d.ts +0 -12
  171. package/components/anchor-v2/src/components/anchor-v2/anchor-v2.component.d.ts +0 -19
  172. package/components/anchor-v2/src/components/anchor-vertical-v2/anchor-vertical-list-v2.component.d.ts +0 -16
  173. package/components/anchor-v2/src/components/index.d.ts +0 -2
  174. package/components/anchor-v2/src/index.d.ts +0 -2
  175. package/components/anchor-v2/src/models/index.d.ts +0 -1
  176. package/components/anchor-v2/src/models/sd-anchor-v2.model.d.ts +0 -7
  177. package/components/workflow/index.d.ts +0 -2
  178. package/components/workflow/src/configurations/index.d.ts +0 -1
  179. package/components/workflow/src/configurations/workflow.configuration.d.ts +0 -10
  180. package/fesm2022/sd-angular-core-components-anchor-v2.mjs +0 -151
  181. package/fesm2022/sd-angular-core-components-anchor-v2.mjs.map +0 -1
  182. package/fesm2022/sd-angular-core-components-workflow.mjs +0 -17
  183. package/fesm2022/sd-angular-core-components-workflow.mjs.map +0 -1
  184. package/fesm2022/sd-angular-core-services-firebase.mjs +0 -38
  185. package/fesm2022/sd-angular-core-services-firebase.mjs.map +0 -1
  186. package/i18n/src/sd-i18n.messages.d.ts +0 -2
  187. package/i18n/src/sd-i18n.pipe.d.ts +0 -9
  188. package/i18n/src/sd-i18n.service.d.ts +0 -12
  189. package/i18n/src/sd-i18n.token.d.ts +0 -1
  190. package/i18n/src/sd-i18n.types.d.ts +0 -5
  191. package/sd-angular-core-19.0.0-beta.94.tgz +0 -0
  192. package/services/firebase/index.d.ts +0 -2
  193. package/services/firebase/src/firebase.model.d.ts +0 -8
  194. package/services/firebase/src/firebase.service.d.ts +0 -14
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"sd-angular-core-services-firebase.mjs","sources":["../../../projects/sd-angular/services/firebase/src/firebase.model.ts","../../../projects/sd-angular/services/firebase/src/firebase.service.ts","../../../projects/sd-angular/services/firebase/sd-angular-core-services-firebase.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface ISdFirebaseConfiguration {\n functionUrl: string;\n project: string;\n env: string;\n folder?: string | (() => string);\n}\n\nexport const SD_FIREBASE_CONFIG = new InjectionToken<ISdFirebaseConfiguration>('sd.firebase.configuration');\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { SdApiService } from '@sd-angular/core/services/api';\nimport { ISdFirebaseConfiguration, SD_FIREBASE_CONFIG } from './firebase.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdFirebaseService {\n constructor(\n private apiService: SdApiService,\n @Inject(SD_FIREBASE_CONFIG)\n @Optional()\n private firebaseConfiguration: ISdFirebaseConfiguration\n ) {}\n\n excel = {\n uploadFile: () => {},\n removeFile: () => {},\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MASa,kBAAkB,GAAG,IAAI,cAAc,CAA2B,2BAA2B;;MCF7F,iBAAiB,CAAA;AAElB,IAAA,UAAA;AAGA,IAAA,qBAAA;IAJV,WAAA,CACU,UAAwB,EAGxB,qBAA+C,EAAA;QAH/C,IAAA,CAAA,UAAU,GAAV,UAAU;QAGV,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;IAC5B;AAEH,IAAA,KAAK,GAAG;AACN,QAAA,UAAU,EAAE,MAAK,EAAE,CAAC;AACpB,QAAA,UAAU,EAAE,MAAK,EAAE,CAAC;KACrB;AAXU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,8CAGlB,kBAAkB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAHjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;4FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;0BAII,MAAM;2BAAC,kBAAkB;;0BACzB;;;ACXL;;AAEG;;;;"}
@@ -1,2 +0,0 @@
1
- import type { SdLanguage } from './sd-i18n.types';
2
- export declare const SD_MESSAGES: Record<SdLanguage, Readonly<Record<string, string>>>;
@@ -1,9 +0,0 @@
1
- import { PipeTransform } from '@angular/core';
2
- import { SdI18nParams } from './sd-i18n.types';
3
- import * as i0 from "@angular/core";
4
- export declare class SdTPipe implements PipeTransform {
5
- #private;
6
- transform(key: string, params?: SdI18nParams): string;
7
- static ɵfac: i0.ɵɵFactoryDeclaration<SdTPipe, never>;
8
- static ɵpipe: i0.ɵɵPipeDeclaration<SdTPipe, "sdT", true>;
9
- }
@@ -1,12 +0,0 @@
1
- import { Signal } from '@angular/core';
2
- import { SdI18nParams, SdLanguage } from './sd-i18n.types';
3
- import * as i0 from "@angular/core";
4
- export declare class SdI18nService {
5
- #private;
6
- readonly language: Signal<SdLanguage>;
7
- readonly messages: Signal<Readonly<Record<string, string>>>;
8
- setLanguage(lang: SdLanguage): void;
9
- t(key: string, params?: SdI18nParams): string;
10
- static ɵfac: i0.ɵɵFactoryDeclaration<SdI18nService, never>;
11
- static ɵprov: i0.ɵɵInjectableDeclaration<SdI18nService>;
12
- }
@@ -1 +0,0 @@
1
- export declare const SD_I18N_STORAGE_KEY = "sd-core.language";
@@ -1,5 +0,0 @@
1
- import type { VI_MESSAGES } from './vi';
2
- export type SdLanguage = 'vi' | 'en';
3
- export declare const SD_SUPPORTED_LANGUAGES: readonly SdLanguage[];
4
- export type SdI18nKey = keyof typeof VI_MESSAGES;
5
- export type SdI18nParams = Record<string, string | number>;
Binary file
@@ -1,2 +0,0 @@
1
- export * from './src/firebase.service';
2
- export * from './src/firebase.model';
@@ -1,8 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- export interface ISdFirebaseConfiguration {
3
- functionUrl: string;
4
- project: string;
5
- env: string;
6
- folder?: string | (() => string);
7
- }
8
- export declare const SD_FIREBASE_CONFIG: InjectionToken<ISdFirebaseConfiguration>;
@@ -1,14 +0,0 @@
1
- import { SdApiService } from '@sd-angular/core/services/api';
2
- import { ISdFirebaseConfiguration } from './firebase.model';
3
- import * as i0 from "@angular/core";
4
- export declare class SdFirebaseService {
5
- private apiService;
6
- private firebaseConfiguration;
7
- constructor(apiService: SdApiService, firebaseConfiguration: ISdFirebaseConfiguration);
8
- excel: {
9
- uploadFile: () => void;
10
- removeFile: () => void;
11
- };
12
- static ɵfac: i0.ɵɵFactoryDeclaration<SdFirebaseService, [null, { optional: true; }]>;
13
- static ɵprov: i0.ɵɵInjectableDeclaration<SdFirebaseService>;
14
- }