@sd-angular/core 19.0.0-beta.84 → 19.0.0-beta.86

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 (130) hide show
  1. package/README.md +716 -716
  2. package/assets/fonts/fonts.scss +115 -115
  3. package/assets/scss/bootstrap-4.6.2/_alert.scss +52 -52
  4. package/assets/scss/bootstrap-4.6.2/_badge.scss +54 -54
  5. package/assets/scss/bootstrap-4.6.2/_breadcrumb.scss +42 -42
  6. package/assets/scss/bootstrap-4.6.2/_button-group.scss +163 -163
  7. package/assets/scss/bootstrap-4.6.2/_buttons.scss +142 -142
  8. package/assets/scss/bootstrap-4.6.2/_card.scss +286 -286
  9. package/assets/scss/bootstrap-4.6.2/_carousel.scss +200 -200
  10. package/assets/scss/bootstrap-4.6.2/_close.scss +40 -40
  11. package/assets/scss/bootstrap-4.6.2/_code.scss +48 -48
  12. package/assets/scss/bootstrap-4.6.2/_custom-forms.scss +526 -526
  13. package/assets/scss/bootstrap-4.6.2/_dropdown.scss +192 -192
  14. package/assets/scss/bootstrap-4.6.2/_forms.scss +347 -347
  15. package/assets/scss/bootstrap-4.6.2/_functions.scss +190 -190
  16. package/assets/scss/bootstrap-4.6.2/_grid.scss +73 -73
  17. package/assets/scss/bootstrap-4.6.2/_images.scss +42 -42
  18. package/assets/scss/bootstrap-4.6.2/_input-group.scss +211 -211
  19. package/assets/scss/bootstrap-4.6.2/_jumbotron.scss +17 -17
  20. package/assets/scss/bootstrap-4.6.2/_list-group.scss +154 -154
  21. package/assets/scss/bootstrap-4.6.2/_media.scss +8 -8
  22. package/assets/scss/bootstrap-4.6.2/_mixins.scss +47 -47
  23. package/assets/scss/bootstrap-4.6.2/_modal.scss +240 -240
  24. package/assets/scss/bootstrap-4.6.2/_nav.scss +125 -125
  25. package/assets/scss/bootstrap-4.6.2/_navbar.scss +332 -332
  26. package/assets/scss/bootstrap-4.6.2/_pagination.scss +74 -74
  27. package/assets/scss/bootstrap-4.6.2/_popover.scss +170 -170
  28. package/assets/scss/bootstrap-4.6.2/_print.scss +132 -132
  29. package/assets/scss/bootstrap-4.6.2/_progress.scss +47 -47
  30. package/assets/scss/bootstrap-4.6.2/_reboot.scss +484 -484
  31. package/assets/scss/bootstrap-4.6.2/_root.scss +19 -19
  32. package/assets/scss/bootstrap-4.6.2/_spinners.scss +65 -65
  33. package/assets/scss/bootstrap-4.6.2/_tables.scss +185 -185
  34. package/assets/scss/bootstrap-4.6.2/_toasts.scss +46 -46
  35. package/assets/scss/bootstrap-4.6.2/_tooltip.scss +115 -115
  36. package/assets/scss/bootstrap-4.6.2/_transitions.scss +26 -26
  37. package/assets/scss/bootstrap-4.6.2/_type.scss +125 -125
  38. package/assets/scss/bootstrap-4.6.2/_utilities.scss +18 -18
  39. package/assets/scss/bootstrap-4.6.2/_variables.scss +1150 -1150
  40. package/assets/scss/bootstrap-4.6.2/bootstrap-grid.scss +30 -30
  41. package/assets/scss/bootstrap-4.6.2/bootstrap-reboot.scss +12 -12
  42. package/assets/scss/bootstrap-4.6.2/bootstrap.scss +44 -44
  43. package/assets/scss/bootstrap-4.6.2/mixins/_alert.scss +13 -13
  44. package/assets/scss/bootstrap-4.6.2/mixins/_background-variant.scss +23 -23
  45. package/assets/scss/bootstrap-4.6.2/mixins/_badge.scss +17 -17
  46. package/assets/scss/bootstrap-4.6.2/mixins/_border-radius.scss +76 -76
  47. package/assets/scss/bootstrap-4.6.2/mixins/_box-shadow.scss +20 -20
  48. package/assets/scss/bootstrap-4.6.2/mixins/_breakpoints.scss +123 -123
  49. package/assets/scss/bootstrap-4.6.2/mixins/_buttons.scss +110 -110
  50. package/assets/scss/bootstrap-4.6.2/mixins/_caret.scss +62 -62
  51. package/assets/scss/bootstrap-4.6.2/mixins/_clearfix.scss +7 -7
  52. package/assets/scss/bootstrap-4.6.2/mixins/_deprecate.scss +10 -10
  53. package/assets/scss/bootstrap-4.6.2/mixins/_float.scss +14 -14
  54. package/assets/scss/bootstrap-4.6.2/mixins/_forms.scss +195 -195
  55. package/assets/scss/bootstrap-4.6.2/mixins/_gradients.scss +45 -45
  56. package/assets/scss/bootstrap-4.6.2/mixins/_grid-framework.scss +80 -80
  57. package/assets/scss/bootstrap-4.6.2/mixins/_grid.scss +69 -69
  58. package/assets/scss/bootstrap-4.6.2/mixins/_hover.scss +37 -37
  59. package/assets/scss/bootstrap-4.6.2/mixins/_image.scss +36 -36
  60. package/assets/scss/bootstrap-4.6.2/mixins/_list-group.scss +21 -21
  61. package/assets/scss/bootstrap-4.6.2/mixins/_lists.scss +7 -7
  62. package/assets/scss/bootstrap-4.6.2/mixins/_nav-divider.scss +11 -11
  63. package/assets/scss/bootstrap-4.6.2/mixins/_pagination.scss +22 -22
  64. package/assets/scss/bootstrap-4.6.2/mixins/_reset-text.scss +17 -17
  65. package/assets/scss/bootstrap-4.6.2/mixins/_resize.scss +6 -6
  66. package/assets/scss/bootstrap-4.6.2/mixins/_screen-reader.scss +34 -34
  67. package/assets/scss/bootstrap-4.6.2/mixins/_size.scss +7 -7
  68. package/assets/scss/bootstrap-4.6.2/mixins/_table-row.scss +39 -39
  69. package/assets/scss/bootstrap-4.6.2/mixins/_text-emphasis.scss +17 -17
  70. package/assets/scss/bootstrap-4.6.2/mixins/_text-hide.scss +11 -11
  71. package/assets/scss/bootstrap-4.6.2/mixins/_text-truncate.scss +8 -8
  72. package/assets/scss/bootstrap-4.6.2/mixins/_transition.scss +26 -26
  73. package/assets/scss/bootstrap-4.6.2/mixins/_visibility.scss +8 -8
  74. package/assets/scss/bootstrap-4.6.2/utilities/_align.scss +8 -8
  75. package/assets/scss/bootstrap-4.6.2/utilities/_background.scss +19 -19
  76. package/assets/scss/bootstrap-4.6.2/utilities/_borders.scss +75 -75
  77. package/assets/scss/bootstrap-4.6.2/utilities/_clearfix.scss +3 -3
  78. package/assets/scss/bootstrap-4.6.2/utilities/_display.scss +26 -26
  79. package/assets/scss/bootstrap-4.6.2/utilities/_embed.scss +39 -39
  80. package/assets/scss/bootstrap-4.6.2/utilities/_flex.scss +51 -51
  81. package/assets/scss/bootstrap-4.6.2/utilities/_float.scss +11 -11
  82. package/assets/scss/bootstrap-4.6.2/utilities/_interactions.scss +5 -5
  83. package/assets/scss/bootstrap-4.6.2/utilities/_overflow.scss +5 -5
  84. package/assets/scss/bootstrap-4.6.2/utilities/_position.scss +32 -32
  85. package/assets/scss/bootstrap-4.6.2/utilities/_screenreaders.scss +11 -11
  86. package/assets/scss/bootstrap-4.6.2/utilities/_shadows.scss +6 -6
  87. package/assets/scss/bootstrap-4.6.2/utilities/_sizing.scss +20 -20
  88. package/assets/scss/bootstrap-4.6.2/utilities/_spacing.scss +73 -73
  89. package/assets/scss/bootstrap-4.6.2/utilities/_stretched-link.scss +19 -19
  90. package/assets/scss/bootstrap-4.6.2/utilities/_text.scss +72 -72
  91. package/assets/scss/bootstrap-4.6.2/utilities/_visibility.scss +13 -13
  92. package/assets/scss/bootstrap-4.6.2/vendor/_rfs.scss +228 -228
  93. package/assets/scss/core/print.scss +47 -47
  94. package/assets/scss/core/scrollbar.scss +30 -30
  95. package/assets/scss/core/typography.scss +121 -121
  96. package/fesm2022/sd-angular-core-components-anchor-v2.mjs +4 -4
  97. package/fesm2022/sd-angular-core-components-anchor-v2.mjs.map +1 -1
  98. package/fesm2022/sd-angular-core-components-avatar.mjs +2 -2
  99. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -1
  100. package/fesm2022/sd-angular-core-components-chart.mjs +40 -40
  101. package/fesm2022/sd-angular-core-components-chart.mjs.map +1 -1
  102. package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
  103. package/fesm2022/sd-angular-core-components-tab-router.mjs +4 -4
  104. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  105. package/fesm2022/sd-angular-core-components-table.mjs +20 -20
  106. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  107. package/fesm2022/sd-angular-core-components-upload-file.mjs +4 -4
  108. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  109. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  110. package/fesm2022/sd-angular-core-forms-directives.mjs.map +1 -1
  111. package/fesm2022/sd-angular-core-forms-models.mjs.map +1 -1
  112. package/fesm2022/sd-angular-core-forms-select.mjs +2 -2
  113. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  114. package/fesm2022/sd-angular-core-forms.mjs.map +1 -1
  115. package/fesm2022/sd-angular-core-modules-authom.mjs.map +1 -1
  116. package/fesm2022/sd-angular-core-modules-layout.mjs +2 -2
  117. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  118. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  119. package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
  120. package/fesm2022/sd-angular-core-services-cache.mjs.map +1 -1
  121. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  122. package/fesm2022/sd-angular-core-services-firebase.mjs.map +1 -1
  123. package/fesm2022/sd-angular-core-services-license.mjs.map +1 -1
  124. package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
  125. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  126. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  127. package/fesm2022/sd-angular-core.mjs.map +1 -1
  128. package/package.json +36 -36
  129. package/sd-angular-core-19.0.0-beta.86.tgz +0 -0
  130. package/sd-angular-core-19.0.0-beta.84.tgz +0 -0
@@ -1,121 +1,121 @@
1
- $fw-lighter: 400;
2
- $fw-normal: 500;
3
- $fw-bold: 600;
4
-
5
- $fs-xs: 11.2px;
6
- $fs-small: 14px;
7
- $fs-normal: 16px;
8
- $fs-regular: 18px;
9
- $fs-medium: 21px;
10
- $fs-large: 24px;
11
- $fs-xl: 28px;
12
- $fs-xxl: 38px;
13
- $fs-xxxl: 42px;
14
-
15
- .T48M {
16
- font-size: 48px;
17
- font-weight: 500;
18
- line-height: 56px;
19
- }
20
-
21
- .T48R {
22
- font-size: 48px;
23
- font-weight: normal;
24
- line-height: 56px;
25
- }
26
-
27
- .T32M {
28
- font-size: 32px;
29
- font-weight: 500;
30
- line-height: 48px;
31
- }
32
-
33
- .T32R {
34
- font-size: 32px;
35
- font-weight: normal;
36
- line-height: 48px;
37
- }
38
-
39
- .T24M {
40
- font-weight: 500;
41
- font-size: 24px;
42
- line-height: 28px;
43
- }
44
-
45
- .T24R {
46
- font-weight: normal;
47
- font-size: 20px;
48
- line-height: 28px;
49
- }
50
-
51
- .T20M {
52
- font-weight: 500;
53
- font-size: 20px;
54
- line-height: 28px;
55
- }
56
-
57
- .T20R {
58
- font-weight: normal;
59
- font-size: 20px;
60
- line-height: 28px;
61
- }
62
-
63
- .T18M {
64
- font-weight: 500;
65
- font-size: 18px;
66
- line-height: 28px;
67
- }
68
-
69
- .T18R {
70
- font-weight: normal;
71
- font-size: 18px;
72
- line-height: 28px;
73
- }
74
-
75
- .T16M {
76
- font-weight: 500;
77
- font-size: 16px;
78
- line-height: 24px;
79
- }
80
-
81
- .T16R {
82
- font-weight: normal;
83
- font-size: 16px;
84
- line-height: 24px;
85
- }
86
-
87
- .T14M {
88
- font-weight: 500;
89
- font-size: 14px;
90
- line-height: 20px;
91
- }
92
-
93
- .T14R {
94
- font-weight: normal;
95
- font-size: 14px;
96
- line-height: 20px;
97
- }
98
-
99
- .T12M {
100
- font-weight: 500;
101
- font-size: 12px;
102
- line-height: 16px;
103
- }
104
-
105
- .T12R {
106
- font-weight: normal;
107
- font-size: 12px !important;
108
- line-height: 16px;
109
- }
110
-
111
- .T10M {
112
- font-weight: 500;
113
- font-size: 10px;
114
- line-height: 12px;
115
- }
116
-
117
- .T10R {
118
- font-weight: normal;
119
- font-size: 10px;
120
- line-height: 12px;
121
- }
1
+ $fw-lighter: 400;
2
+ $fw-normal: 500;
3
+ $fw-bold: 600;
4
+
5
+ $fs-xs: 11.2px;
6
+ $fs-small: 14px;
7
+ $fs-normal: 16px;
8
+ $fs-regular: 18px;
9
+ $fs-medium: 21px;
10
+ $fs-large: 24px;
11
+ $fs-xl: 28px;
12
+ $fs-xxl: 38px;
13
+ $fs-xxxl: 42px;
14
+
15
+ .T48M {
16
+ font-size: 48px;
17
+ font-weight: 500;
18
+ line-height: 56px;
19
+ }
20
+
21
+ .T48R {
22
+ font-size: 48px;
23
+ font-weight: normal;
24
+ line-height: 56px;
25
+ }
26
+
27
+ .T32M {
28
+ font-size: 32px;
29
+ font-weight: 500;
30
+ line-height: 48px;
31
+ }
32
+
33
+ .T32R {
34
+ font-size: 32px;
35
+ font-weight: normal;
36
+ line-height: 48px;
37
+ }
38
+
39
+ .T24M {
40
+ font-weight: 500;
41
+ font-size: 24px;
42
+ line-height: 28px;
43
+ }
44
+
45
+ .T24R {
46
+ font-weight: normal;
47
+ font-size: 20px;
48
+ line-height: 28px;
49
+ }
50
+
51
+ .T20M {
52
+ font-weight: 500;
53
+ font-size: 20px;
54
+ line-height: 28px;
55
+ }
56
+
57
+ .T20R {
58
+ font-weight: normal;
59
+ font-size: 20px;
60
+ line-height: 28px;
61
+ }
62
+
63
+ .T18M {
64
+ font-weight: 500;
65
+ font-size: 18px;
66
+ line-height: 28px;
67
+ }
68
+
69
+ .T18R {
70
+ font-weight: normal;
71
+ font-size: 18px;
72
+ line-height: 28px;
73
+ }
74
+
75
+ .T16M {
76
+ font-weight: 500;
77
+ font-size: 16px;
78
+ line-height: 24px;
79
+ }
80
+
81
+ .T16R {
82
+ font-weight: normal;
83
+ font-size: 16px;
84
+ line-height: 24px;
85
+ }
86
+
87
+ .T14M {
88
+ font-weight: 500;
89
+ font-size: 14px;
90
+ line-height: 20px;
91
+ }
92
+
93
+ .T14R {
94
+ font-weight: normal;
95
+ font-size: 14px;
96
+ line-height: 20px;
97
+ }
98
+
99
+ .T12M {
100
+ font-weight: 500;
101
+ font-size: 12px;
102
+ line-height: 16px;
103
+ }
104
+
105
+ .T12R {
106
+ font-weight: normal;
107
+ font-size: 12px !important;
108
+ line-height: 16px;
109
+ }
110
+
111
+ .T10M {
112
+ font-weight: 500;
113
+ font-size: 10px;
114
+ line-height: 12px;
115
+ }
116
+
117
+ .T10R {
118
+ font-weight: normal;
119
+ font-size: 10px;
120
+ line-height: 12px;
121
+ }
@@ -48,11 +48,11 @@ class SdAnchorVerticalListV2 {
48
48
  this.#subscription.unsubscribe();
49
49
  }
50
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 });
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()\">\r\n @for (section of sections(); track section.id) {\r\n <div\r\n class=\"c-anchor-list-item\"\r\n [class.active]=\"section.id === activeSectionId()\"\r\n (click)=\"onClickSection(section.id)\"\r\n (keydown.enter)=\"onClickSection(section.id)\"\r\n tabindex=\"0\">\r\n @if (section.icon()) {\r\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\r\n }\r\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\r\n {{ section.title() }}\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.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
52
  }
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchorVerticalListV2, decorators: [{
54
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"] }]
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()\">\r\n @for (section of sections(); track section.id) {\r\n <div\r\n class=\"c-anchor-list-item\"\r\n [class.active]=\"section.id === activeSectionId()\"\r\n (click)=\"onClickSection(section.id)\"\r\n (keydown.enter)=\"onClickSection(section.id)\"\r\n tabindex=\"0\">\r\n @if (section.icon()) {\r\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\r\n }\r\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\r\n {{ section.title() }}\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.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
56
  }], ctorParameters: () => [] });
57
57
 
58
58
  class SdAnchorV2 {
@@ -136,11 +136,11 @@ class SdAnchorV2 {
136
136
  this.#disposeResources();
137
137
  }
138
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 });
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>\r\n <div class=\"c-anchor-content\" [style.width]=\"'calc(100% - ' + sidebarWidth() + ' - 16px)'\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (!isHiddenAnchorList()) {\r\n <div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\r\n <sd-anchor-vertical-list-v2\r\n [sections]=\"sections()\"\r\n [ellipsis]=\"ellipsis()\"\r\n [sidebarWidth]=\"sidebarWidth()\"\r\n [activeSectionId]=\"activeSectionId()\"\r\n (sdClickSection)=\"scrollSectionByClick($event)\">\r\n </sd-anchor-vertical-list-v2>\r\n </div>\r\n }\r\n</div>\r\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
140
  }
141
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchorV2, decorators: [{
142
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"] }]
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>\r\n <div class=\"c-anchor-content\" [style.width]=\"'calc(100% - ' + sidebarWidth() + ' - 16px)'\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (!isHiddenAnchorList()) {\r\n <div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\r\n <sd-anchor-vertical-list-v2\r\n [sections]=\"sections()\"\r\n [ellipsis]=\"ellipsis()\"\r\n [sidebarWidth]=\"sidebarWidth()\"\r\n [activeSectionId]=\"activeSectionId()\"\r\n (sdClickSection)=\"scrollSectionByClick($event)\">\r\n </sd-anchor-vertical-list-v2>\r\n </div>\r\n }\r\n</div>\r\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
144
  }], ctorParameters: () => [] });
145
145
 
146
146
  /**
@@ -1 +1 @@
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
+ {"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';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { Subject, Subscription, debounceTime } from 'rxjs';\r\n\r\nimport { SdAnchorItemV2 } from '../anchor-item-v2/anchor-item-v2.component';\r\n\r\n@Component({\r\n selector: 'sd-anchor-vertical-list-v2',\r\n templateUrl: './anchor-vertical-list-v2.component.html',\r\n styleUrl: './anchor-vertical-list-v2.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule, MatIconModule],\r\n standalone: true,\r\n})\r\nexport class SdAnchorVerticalListV2 implements OnDestroy {\r\n sections = input.required<readonly SdAnchorItemV2[]>();\r\n activeSectionId = input<string>('');\r\n ellipsis = input<boolean>(false);\r\n sidebarWidth = input<string>('');\r\n\r\n sdClickSection = output<string>();\r\n\r\n #delay = 200;\r\n #clickSectionSubject = new Subject<string>();\r\n #subscription = new Subscription();\r\n\r\n constructor() {\r\n this.#subscription.add(\r\n this.#clickSectionSubject\r\n .pipe(debounceTime(this.#delay))\r\n .subscribe((id: string) => this.sdClickSection.emit(id))\r\n );\r\n }\r\n\r\n onClickSection = (id: string): void => {\r\n this.#clickSectionSubject.next(id);\r\n };\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","<div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\r\n @for (section of sections(); track section.id) {\r\n <div\r\n class=\"c-anchor-list-item\"\r\n [class.active]=\"section.id === activeSectionId()\"\r\n (click)=\"onClickSection(section.id)\"\r\n (keydown.enter)=\"onClickSection(section.id)\"\r\n tabindex=\"0\">\r\n @if (section.icon()) {\r\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\r\n }\r\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\r\n {{ section.title() }}\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n afterNextRender,\r\n booleanAttribute,\r\n contentChildren,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription, auditTime, debounceTime, filter, fromEvent, map, take } from 'rxjs';\r\n\r\nimport { SdAnchorVerticalListV2 } from '../anchor-vertical-v2/anchor-vertical-list-v2.component';\r\nimport { SdAnchorItemV2 } from '../anchor-item-v2/anchor-item-v2.component';\r\n\r\n@Component({\r\n selector: 'sd-anchor-v2',\r\n templateUrl: './anchor-v2.component.html',\r\n styleUrls: ['./anchor-v2.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule, SdAnchorVerticalListV2],\r\n standalone: true,\r\n})\r\nexport class SdAnchorV2 implements OnDestroy {\r\n wrapper = viewChild.required<ElementRef>('wrapper');\r\n sections = contentChildren(SdAnchorItemV2);\r\n\r\n type = input<'vertical' | 'horizontal'>('vertical');\r\n sidebarWidth = input<string>('200px');\r\n ellipsis = input(false, { transform: booleanAttribute });\r\n isOverscroll = input(false, { transform: booleanAttribute });\r\n isHiddenAnchorList = input(false, { transform: booleanAttribute });\r\n\r\n activeSectionId = signal<string>('');\r\n\r\n #scrollSubscription = new Subscription();\r\n #clickScrollSubscription = new Subscription();\r\n #delay = 100;\r\n #currentScrollTop = 0;\r\n #timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n if (!this.isHiddenAnchorList()) {\r\n this.activeSectionId.set(this.sections()[0]?.id ?? '');\r\n this.#registerScrollSubscription();\r\n }\r\n });\r\n }\r\n\r\n #registerScrollSubscription = (): void => {\r\n this.#disposeResources();\r\n const wrapperEl = this.wrapper().nativeElement;\r\n this.#scrollSubscription = fromEvent<UIEvent>(wrapperEl, 'scroll')\r\n .pipe(auditTime(50))\r\n .subscribe((event: UIEvent) => {\r\n const el = event.target as HTMLElement;\r\n this.#currentScrollTop = this.#updateCurrentScroll(el);\r\n for (const section of this.sections()) {\r\n const rect = section.elementRef.nativeElement;\r\n const rectTop = rect.offsetTop;\r\n const rectBottom = rectTop + rect.offsetHeight;\r\n if (this.#currentScrollTop >= rectTop && this.#currentScrollTop < rectBottom) {\r\n this.activeSectionId.set(section.id);\r\n break;\r\n }\r\n }\r\n });\r\n };\r\n\r\n scrollSectionByClick(idSectionTarget: string): void {\r\n this.activeSectionId.set(idSectionTarget);\r\n const targetSection = this.sections().find(s => s.id === idSectionTarget)?.elementRef;\r\n if (!targetSection) return;\r\n\r\n this.#disposeResources();\r\n const wrapperEl = this.wrapper().nativeElement;\r\n const targetElement = targetSection.nativeElement;\r\n const prevScrollTop = this.#currentScrollTop;\r\n\r\n this.#clickScrollSubscription = fromEvent<UIEvent>(wrapperEl, 'scroll')\r\n .pipe(\r\n auditTime(this.#delay),\r\n map((event: UIEvent) => {\r\n const el = event.target as HTMLElement;\r\n this.#currentScrollTop = this.#updateCurrentScroll(el);\r\n const wrapperTop = wrapperEl.getBoundingClientRect().top;\r\n const targetRect = targetElement.getBoundingClientRect();\r\n const isVisible = targetRect.top >= 0 && targetRect.bottom <= window.innerHeight;\r\n return Math.abs(targetRect.top - wrapperTop) < 1 || isVisible;\r\n }),\r\n filter(Boolean),\r\n debounceTime(this.#delay + 100),\r\n take(1)\r\n )\r\n .subscribe(() => this.#registerScrollSubscription());\r\n\r\n this.#timeoutId = setTimeout(() => {\r\n if (prevScrollTop === this.#currentScrollTop) {\r\n this.#registerScrollSubscription();\r\n }\r\n }, this.#delay + 100);\r\n\r\n wrapperEl.scrollTo({ top: targetElement.offsetTop, behavior: 'smooth' });\r\n }\r\n\r\n #updateCurrentScroll(el: HTMLElement): number {\r\n const style = getComputedStyle(el);\r\n return el.scrollTop + parseFloat(style.paddingTop) + parseFloat(style.borderTopWidth);\r\n }\r\n\r\n #disposeResources = (): void => {\r\n if (this.#timeoutId) clearTimeout(this.#timeoutId);\r\n this.#scrollSubscription?.unsubscribe();\r\n this.#clickScrollSubscription?.unsubscribe();\r\n };\r\n\r\n ngOnDestroy(): void {\r\n this.#disposeResources();\r\n }\r\n}\r\n","<div class=\"c-anchor-vertical\" [ngClass]=\"{ 'c-stop-scroll-propagation': !isOverscroll() }\" #wrapper>\r\n <div class=\"c-anchor-content\" [style.width]=\"'calc(100% - ' + sidebarWidth() + ' - 16px)'\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (!isHiddenAnchorList()) {\r\n <div class=\"c-anchor-list\" [style.width]=\"sidebarWidth()\">\r\n <sd-anchor-vertical-list-v2\r\n [sections]=\"sections()\"\r\n [ellipsis]=\"ellipsis()\"\r\n [sidebarWidth]=\"sidebarWidth()\"\r\n [activeSectionId]=\"activeSectionId()\"\r\n (sdClickSection)=\"scrollSectionByClick($event)\">\r\n </sd-anchor-vertical-list-v2>\r\n </div>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuidv4"],"mappings":"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"}
@@ -88,11 +88,11 @@ class SdAvatar {
88
88
  return colors[Math.abs(hash) % colors.length];
89
89
  };
90
90
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
91
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdAvatar, isStandalone: true, selector: "sd-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"sd-avatar\" [style.width.px]=\"size()\" [style.height.px]=\"size()\" [style.line-height.px]=\"size()\" [style.backgroundColor]=\"bgColor()\">\n @if (isUrl()) {\n <img [src]=\"src()\" (error)=\"handleError()\" alt=\"avatar\" />\n } @else {\n <span class=\"sd-avatar-text\" [style.fontSize.px]=\"size() / 2.5\">\n {{ initials() }}\n </span>\n }\n</div>\n", styles: [".sd-avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;overflow:hidden;color:#fff;font-weight:500;-webkit-user-select:none;user-select:none;background-size:cover}.sd-avatar img{width:100%;height:100%;object-fit:cover}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
91
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdAvatar, isStandalone: true, selector: "sd-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"sd-avatar\" [style.width.px]=\"size()\" [style.height.px]=\"size()\" [style.line-height.px]=\"size()\" [style.backgroundColor]=\"bgColor()\">\r\n @if (isUrl()) {\r\n <img [src]=\"src()\" (error)=\"handleError()\" alt=\"avatar\" />\r\n } @else {\r\n <span class=\"sd-avatar-text\" [style.fontSize.px]=\"size() / 2.5\">\r\n {{ initials() }}\r\n </span>\r\n }\r\n</div>\r\n", styles: [".sd-avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;overflow:hidden;color:#fff;font-weight:500;-webkit-user-select:none;user-select:none;background-size:cover}.sd-avatar img{width:100%;height:100%;object-fit:cover}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
92
92
  }
93
93
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAvatar, decorators: [{
94
94
  type: Component,
95
- args: [{ selector: 'sd-avatar', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sd-avatar\" [style.width.px]=\"size()\" [style.height.px]=\"size()\" [style.line-height.px]=\"size()\" [style.backgroundColor]=\"bgColor()\">\n @if (isUrl()) {\n <img [src]=\"src()\" (error)=\"handleError()\" alt=\"avatar\" />\n } @else {\n <span class=\"sd-avatar-text\" [style.fontSize.px]=\"size() / 2.5\">\n {{ initials() }}\n </span>\n }\n</div>\n", styles: [".sd-avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;overflow:hidden;color:#fff;font-weight:500;-webkit-user-select:none;user-select:none;background-size:cover}.sd-avatar img{width:100%;height:100%;object-fit:cover}\n"] }]
95
+ args: [{ selector: 'sd-avatar', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sd-avatar\" [style.width.px]=\"size()\" [style.height.px]=\"size()\" [style.line-height.px]=\"size()\" [style.backgroundColor]=\"bgColor()\">\r\n @if (isUrl()) {\r\n <img [src]=\"src()\" (error)=\"handleError()\" alt=\"avatar\" />\r\n } @else {\r\n <span class=\"sd-avatar-text\" [style.fontSize.px]=\"size() / 2.5\">\r\n {{ initials() }}\r\n </span>\r\n }\r\n</div>\r\n", styles: [".sd-avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;overflow:hidden;color:#fff;font-weight:500;-webkit-user-select:none;user-select:none;background-size:cover}.sd-avatar img{width:100%;height:100%;object-fit:cover}\n"] }]
96
96
  }], ctorParameters: () => [] });
97
97
 
98
98
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-components-avatar.mjs","sources":["../../../projects/sd-angular/components/avatar/src/avatar.component.ts","../../../projects/sd-angular/components/avatar/src/avatar.component.html","../../../projects/sd-angular/components/avatar/sd-angular-core-components-avatar.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, input, signal } from '@angular/core';\n\n@Component({\n selector: 'sd-avatar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SdAvatar {\n /**\n * The source string to be used for the avatar.\n * - If it matches a URL pattern, an image is displayed.\n * - If it is a string representing a name, initials and a colored background are generated.\n * - If undefined, it falls back to a neutral ? initial.\n */\n readonly src = input.required<string | undefined | null>();\n readonly size = input<number>(32);\n\n readonly #imageError = signal<boolean>(false);\n\n constructor() {\n // Reset image error state whenever src changes\n effect(() => {\n this.src();\n this.#imageError.set(false);\n });\n }\n\n readonly isUrl = computed(() => {\n // If image has failed to load, treat it as a non-url to fallback to initials using the literal URL text\n if (this.#imageError()) {\n return false;\n }\n const val = this.src() || '';\n const urlPattern = /^(http|https|data:image|\\/)/;\n return urlPattern.test(val);\n });\n\n readonly bgColor = computed(() => {\n if (this.isUrl()) {\n return 'transparent';\n }\n const val = this.src() || '';\n if (!val) {\n return '#bdc3c7';\n }\n return this.#generateColor(val);\n });\n\n readonly initials = computed(() => {\n if (this.isUrl()) {\n return '';\n }\n const val = this.src() || '';\n if (!val) {\n return '?';\n }\n return this.#getInitials(val);\n });\n\n handleError() {\n this.#imageError.set(true);\n }\n\n #getInitials = (name: string): string => {\n const words = name.trim().split(' ').filter(Boolean);\n if (!words.length) return '';\n if (words.length === 1) return words[0][0].toUpperCase();\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n };\n\n #generateColor = (name: string): string => {\n const colors = [\n '#1abc9c',\n '#2ecc71',\n '#3498db',\n '#9b59b6',\n '#34495e',\n '#16a085',\n '#27ae60',\n '#2980b9',\n '#8e44ad',\n '#2c3e50',\n '#f1c40f',\n '#e67e22',\n '#e74c3c',\n '#95a5a6',\n '#f39c12',\n '#d35400',\n '#c0392b',\n '#bdc3c7',\n '#7f8c8d',\n ];\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\n };\n}\n","<div class=\"sd-avatar\" [style.width.px]=\"size()\" [style.height.px]=\"size()\" [style.line-height.px]=\"size()\" [style.backgroundColor]=\"bgColor()\">\n @if (isUrl()) {\n <img [src]=\"src()\" (error)=\"handleError()\" alt=\"avatar\" />\n } @else {\n <span class=\"sd-avatar-text\" [style.fontSize.px]=\"size() / 2.5\">\n {{ initials() }}\n </span>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-components-avatar.mjs","sources":["../../../projects/sd-angular/components/avatar/src/avatar.component.ts","../../../projects/sd-angular/components/avatar/src/avatar.component.html","../../../projects/sd-angular/components/avatar/sd-angular-core-components-avatar.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, effect, input, signal } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sd-avatar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './avatar.component.html',\r\n styleUrls: ['./avatar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdAvatar {\r\n /**\r\n * The source string to be used for the avatar.\r\n * - If it matches a URL pattern, an image is displayed.\r\n * - If it is a string representing a name, initials and a colored background are generated.\r\n * - If undefined, it falls back to a neutral ? initial.\r\n */\r\n readonly src = input.required<string | undefined | null>();\r\n readonly size = input<number>(32);\r\n\r\n readonly #imageError = signal<boolean>(false);\r\n\r\n constructor() {\r\n // Reset image error state whenever src changes\r\n effect(() => {\r\n this.src();\r\n this.#imageError.set(false);\r\n });\r\n }\r\n\r\n readonly isUrl = computed(() => {\r\n // If image has failed to load, treat it as a non-url to fallback to initials using the literal URL text\r\n if (this.#imageError()) {\r\n return false;\r\n }\r\n const val = this.src() || '';\r\n const urlPattern = /^(http|https|data:image|\\/)/;\r\n return urlPattern.test(val);\r\n });\r\n\r\n readonly bgColor = computed(() => {\r\n if (this.isUrl()) {\r\n return 'transparent';\r\n }\r\n const val = this.src() || '';\r\n if (!val) {\r\n return '#bdc3c7';\r\n }\r\n return this.#generateColor(val);\r\n });\r\n\r\n readonly initials = computed(() => {\r\n if (this.isUrl()) {\r\n return '';\r\n }\r\n const val = this.src() || '';\r\n if (!val) {\r\n return '?';\r\n }\r\n return this.#getInitials(val);\r\n });\r\n\r\n handleError() {\r\n this.#imageError.set(true);\r\n }\r\n\r\n #getInitials = (name: string): string => {\r\n const words = name.trim().split(' ').filter(Boolean);\r\n if (!words.length) return '';\r\n if (words.length === 1) return words[0][0].toUpperCase();\r\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\r\n };\r\n\r\n #generateColor = (name: string): string => {\r\n const colors = [\r\n '#1abc9c',\r\n '#2ecc71',\r\n '#3498db',\r\n '#9b59b6',\r\n '#34495e',\r\n '#16a085',\r\n '#27ae60',\r\n '#2980b9',\r\n '#8e44ad',\r\n '#2c3e50',\r\n '#f1c40f',\r\n '#e67e22',\r\n '#e74c3c',\r\n '#95a5a6',\r\n '#f39c12',\r\n '#d35400',\r\n '#c0392b',\r\n '#bdc3c7',\r\n '#7f8c8d',\r\n ];\r\n let hash = 0;\r\n for (let i = 0; i < name.length; i++) {\r\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return colors[Math.abs(hash) % colors.length];\r\n };\r\n}\r\n","<div class=\"sd-avatar\" [style.width.px]=\"size()\" [style.height.px]=\"size()\" [style.line-height.px]=\"size()\" [style.backgroundColor]=\"bgColor()\">\r\n @if (isUrl()) {\r\n <img [src]=\"src()\" (error)=\"handleError()\" alt=\"avatar\" />\r\n } @else {\r\n <span class=\"sd-avatar-text\" [style.fontSize.px]=\"size() / 2.5\">\r\n {{ initials() }}\r\n </span>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}