@energycap/components 0.45.2-multi-select-component.20260303-1603 → 0.45.2-multi-select-component.20260303-1239

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 (61) hide show
  1. package/README.md +188 -188
  2. package/fesm2022/energycap-components.mjs +183 -109
  3. package/fesm2022/energycap-components.mjs.map +1 -1
  4. package/package.json +1 -1
  5. package/schematics/collection.json +4 -4
  6. package/src/assets/images/favicon-ech.svg +14 -14
  7. package/src/assets/images/favicon-esa.svg +6 -6
  8. package/src/assets/images/favicon-eum.svg +13 -13
  9. package/src/assets/images/favicon-whitelabel.svg +4 -4
  10. package/src/assets/images/favicon.svg +12 -12
  11. package/src/assets/images/icon-carbonhub.svg +10 -10
  12. package/src/assets/images/icon-eum.svg +5 -5
  13. package/src/assets/images/icon-ucp.svg +12 -12
  14. package/src/assets/images/icon-wattics.svg +5 -5
  15. package/src/assets/images/icon.svg +11 -11
  16. package/src/assets/images/logo.svg +10 -10
  17. package/src/assets/images/splash-electric.svg +3 -3
  18. package/src/assets/images/splash-interval.svg +3 -3
  19. package/src/assets/images/splash-seedling.svg +11 -11
  20. package/src/assets/images/splash-water.svg +3 -3
  21. package/src/assets/locales/en_US.json +61 -61
  22. package/src/assets/scripts/unsupported-browser.js +17 -17
  23. package/src/styles/_base.scss +38 -38
  24. package/src/styles/_colors.scss +96 -96
  25. package/src/styles/_core.scss +3 -3
  26. package/src/styles/_functions.scss +114 -114
  27. package/src/styles/_global-variables.scss +230 -230
  28. package/src/styles/_icons.scss +23 -23
  29. package/src/styles/bootstrap/_grid.scss +33 -33
  30. package/src/styles/bootstrap/_reboot.scss +322 -322
  31. package/src/styles/components/_badge.scss +14 -14
  32. package/src/styles/components/_card.scss +21 -21
  33. package/src/styles/components/_link-icons.scss +37 -37
  34. package/src/styles/components/_splash.scss +188 -188
  35. package/src/styles/components/_tag.scss +18 -18
  36. package/src/styles/components/_unsupported-browsers.scss +23 -23
  37. package/src/styles/email/_email-base.scss +227 -227
  38. package/src/styles/email/email.scss +42 -42
  39. package/src/styles/index.scss +29 -29
  40. package/src/styles/mixins/_animations.scss +17 -17
  41. package/src/styles/mixins/_button-base.scss +206 -206
  42. package/src/styles/mixins/_card-base.scss +40 -40
  43. package/src/styles/mixins/_common.scss +51 -51
  44. package/src/styles/mixins/_dialog-base.scss +95 -95
  45. package/src/styles/mixins/_form-control-base.scss +674 -674
  46. package/src/styles/mixins/_login.scss +74 -74
  47. package/src/styles/mixins/_menu-base.scss +153 -153
  48. package/src/styles/mixins/_overlay-base.scss +32 -32
  49. package/src/styles/mixins/_resizable-base.scss +57 -57
  50. package/src/styles/mixins/_spinner-base.scss +34 -34
  51. package/src/styles/mixins/_table-base.scss +297 -297
  52. package/src/styles/mixins/_tabs-base.scss +146 -146
  53. package/src/styles/mixins/_tags-base.scss +121 -121
  54. package/src/styles/mixins/_text.scss +89 -89
  55. package/src/styles/mixins.scss +14 -14
  56. package/src/styles/utilities/_borders.scss +29 -29
  57. package/src/styles/utilities/_common.scss +49 -49
  58. package/src/styles/utilities/_layout.scss +115 -115
  59. package/src/styles/utilities/_spacing.scss +64 -64
  60. package/src/styles/utilities/_text.scss +139 -139
  61. package/types/energycap-components.d.ts +25 -1
@@ -1,65 +1,65 @@
1
- // TODO: implement after removing bootstrap.grid.min.css dependency
2
-
3
- // @mixin spacer-prop($selector, $prop, $i, $rem) {
4
- // .#{$selector}-#{$i} {
5
- // #{$prop}: $rem !important;
6
- // }
7
- // .#{$selector}x-#{$i} {
8
- // #{$prop}-left: $rem !important;
9
- // #{$prop}-right: $rem !important;
10
- // }
11
- // .#{$selector}y-#{$i} {
12
- // #{$prop}-top: $rem !important;
13
- // #{$prop}-bottom: $rem !important;
14
- // }
15
- // .#{$selector}l-#{$i} {
16
- // #{$prop}-left: $rem !important;
17
- // }
18
- // .#{$selector}t-#{$i} {
19
- // #{$prop}-top: $rem !important;
20
- // }
21
- // .#{$selector}r-#{$i} {
22
- // #{$prop}-right: $rem !important;
23
- // }
24
- // .#{$selector}b-#{$i} {
25
- // #{$prop}-bottom: $rem !important;
26
- // }
27
- // }
28
-
29
- // @mixin spacers() {
30
- // $i: 0;
31
- // $rem: 0;
32
- // @while $i < 6 {
33
- // @include spacer-prop(p, padding, $i, $rem);
34
- // @include spacer-prop(m, margin, $i, $rem);
35
-
36
- // @if $i == 0 {
37
- // $rem: .25rem;
38
- // } @else {
39
- // $rem: ($rem * 2);
40
- // }
41
- // $i: $i + 1;
42
- // }
43
- // }
44
-
45
- // .ml-auto {
46
- // margin-left: auto !important;
47
- // }
48
-
49
- // .mr-auto {
50
- // margin-right: auto !important;
51
- // }
52
-
53
- // .mt-auto {
54
- // margin-top: auto !important;
55
- // }
56
-
57
- // .mb-auto {
58
- // margin-bottom: auto !important;
59
- // }
60
-
61
- // .m-auto {
62
- // margin: auto !important;
63
- // }
64
-
1
+ // TODO: implement after removing bootstrap.grid.min.css dependency
2
+
3
+ // @mixin spacer-prop($selector, $prop, $i, $rem) {
4
+ // .#{$selector}-#{$i} {
5
+ // #{$prop}: $rem !important;
6
+ // }
7
+ // .#{$selector}x-#{$i} {
8
+ // #{$prop}-left: $rem !important;
9
+ // #{$prop}-right: $rem !important;
10
+ // }
11
+ // .#{$selector}y-#{$i} {
12
+ // #{$prop}-top: $rem !important;
13
+ // #{$prop}-bottom: $rem !important;
14
+ // }
15
+ // .#{$selector}l-#{$i} {
16
+ // #{$prop}-left: $rem !important;
17
+ // }
18
+ // .#{$selector}t-#{$i} {
19
+ // #{$prop}-top: $rem !important;
20
+ // }
21
+ // .#{$selector}r-#{$i} {
22
+ // #{$prop}-right: $rem !important;
23
+ // }
24
+ // .#{$selector}b-#{$i} {
25
+ // #{$prop}-bottom: $rem !important;
26
+ // }
27
+ // }
28
+
29
+ // @mixin spacers() {
30
+ // $i: 0;
31
+ // $rem: 0;
32
+ // @while $i < 6 {
33
+ // @include spacer-prop(p, padding, $i, $rem);
34
+ // @include spacer-prop(m, margin, $i, $rem);
35
+
36
+ // @if $i == 0 {
37
+ // $rem: .25rem;
38
+ // } @else {
39
+ // $rem: ($rem * 2);
40
+ // }
41
+ // $i: $i + 1;
42
+ // }
43
+ // }
44
+
45
+ // .ml-auto {
46
+ // margin-left: auto !important;
47
+ // }
48
+
49
+ // .mr-auto {
50
+ // margin-right: auto !important;
51
+ // }
52
+
53
+ // .mt-auto {
54
+ // margin-top: auto !important;
55
+ // }
56
+
57
+ // .mb-auto {
58
+ // margin-bottom: auto !important;
59
+ // }
60
+
61
+ // .m-auto {
62
+ // margin: auto !important;
63
+ // }
64
+
65
65
  // @include spacers();
@@ -1,139 +1,139 @@
1
- @import "../mixins/overlay-base";
2
- @import "../mixins/text";
3
-
4
- // Text styles
5
- .text-title-1 {
6
- @include text-title-1;
7
- }
8
-
9
- .text-title-2 {
10
- @include text-title-2;
11
- }
12
-
13
- .text-heading-1 {
14
- @include text-heading-1;
15
- }
16
-
17
- .text-heading-2 {
18
- @include text-heading-2;
19
- }
20
-
21
- .text-heading-3 {
22
- @include text-heading-3;
23
- }
24
-
25
- .text-body-1 {
26
- @include text-body-1;
27
- }
28
-
29
- .text-body-2 {
30
- @include text-body-2;
31
- }
32
-
33
- .text-caption-1 {
34
- @include text-caption-1;
35
- }
36
-
37
- .text-caption-2 {
38
- @include text-caption-2;
39
- }
40
-
41
- .text-display-1 {
42
- @include text-display-1;
43
- }
44
-
45
- .text-link {
46
- @include text-link;
47
- }
48
-
49
- @each $alignment in (left, right, center) {
50
- .text-#{$alignment} {
51
- text-align: $alignment !important;
52
- }
53
- }
54
-
55
- // Font property utilities
56
- .font-weight-bold {
57
- font-weight: var(--ec-font-weight-bold) !important;
58
- }
59
-
60
- .font-weight-normal {
61
- font-weight: var(--ec-font-weight-normal) !important;
62
- }
63
-
64
- .font-size-small {
65
- font-size: var(--ec-font-size-label) !important;
66
- }
67
-
68
- .font-size-medium {
69
- font-size: var(--ec-font-size-body) !important;
70
- }
71
-
72
- .font-size-base {
73
- font-size: var(--ec-font-size) !important;
74
- }
75
-
76
- .font-size-large {
77
- font-size: var(--ec-font-size-title) !important;
78
- }
79
-
80
- .font-color-primary {
81
- color: var(--ec-color-primary-dark) !important;
82
- }
83
-
84
- .font-color-primary-light {
85
- color: var(--ec-color-primary-light) !important;
86
- }
87
-
88
- .font-color-secondary {
89
- color: var(--ec-color-secondary-dark) !important;
90
- }
91
-
92
- .font-color-secondary-light {
93
- color: var(--ec-color-secondary-light) !important;
94
- }
95
-
96
- // font-color-muted is deprecated, use .font-color-hint instead
97
- .font-color-muted,
98
- .font-color-hint {
99
- color: var(--ec-color-hint-dark) !important;
100
- }
101
-
102
- // @deprecated, use .text-link instead.
103
- .font-color-link {
104
- color: var(--ec-color-link) !important;
105
- }
106
-
107
- .font-color-error {
108
- color: var(--ec-color-danger) !important;
109
- }
110
-
111
- .font-color-success {
112
- color: var(--ec-color-success) !important;
113
- }
114
-
115
- .font-color-interactive {
116
- color: var(--ec-color-interactive) !important;
117
- }
118
-
119
- // @deprecated use .text-display-1 instead
120
- .font-message {
121
- @include overlay-message;
122
- }
123
-
124
- // @deprecated use .text-display-1 instead
125
- .font-message-medium {
126
- @include overlay-message($font-size: var(--ec-font-size-body));
127
- }
128
-
129
- .text-truncate {
130
- @include truncate();
131
- }
132
-
133
- .text-break-all {
134
- word-break: break-all;
135
- }
136
-
137
- .text-wrap {
138
- white-space: normal;
139
- }
1
+ @import "../mixins/overlay-base";
2
+ @import "../mixins/text";
3
+
4
+ // Text styles
5
+ .text-title-1 {
6
+ @include text-title-1;
7
+ }
8
+
9
+ .text-title-2 {
10
+ @include text-title-2;
11
+ }
12
+
13
+ .text-heading-1 {
14
+ @include text-heading-1;
15
+ }
16
+
17
+ .text-heading-2 {
18
+ @include text-heading-2;
19
+ }
20
+
21
+ .text-heading-3 {
22
+ @include text-heading-3;
23
+ }
24
+
25
+ .text-body-1 {
26
+ @include text-body-1;
27
+ }
28
+
29
+ .text-body-2 {
30
+ @include text-body-2;
31
+ }
32
+
33
+ .text-caption-1 {
34
+ @include text-caption-1;
35
+ }
36
+
37
+ .text-caption-2 {
38
+ @include text-caption-2;
39
+ }
40
+
41
+ .text-display-1 {
42
+ @include text-display-1;
43
+ }
44
+
45
+ .text-link {
46
+ @include text-link;
47
+ }
48
+
49
+ @each $alignment in (left, right, center) {
50
+ .text-#{$alignment} {
51
+ text-align: $alignment !important;
52
+ }
53
+ }
54
+
55
+ // Font property utilities
56
+ .font-weight-bold {
57
+ font-weight: var(--ec-font-weight-bold) !important;
58
+ }
59
+
60
+ .font-weight-normal {
61
+ font-weight: var(--ec-font-weight-normal) !important;
62
+ }
63
+
64
+ .font-size-small {
65
+ font-size: var(--ec-font-size-label) !important;
66
+ }
67
+
68
+ .font-size-medium {
69
+ font-size: var(--ec-font-size-body) !important;
70
+ }
71
+
72
+ .font-size-base {
73
+ font-size: var(--ec-font-size) !important;
74
+ }
75
+
76
+ .font-size-large {
77
+ font-size: var(--ec-font-size-title) !important;
78
+ }
79
+
80
+ .font-color-primary {
81
+ color: var(--ec-color-primary-dark) !important;
82
+ }
83
+
84
+ .font-color-primary-light {
85
+ color: var(--ec-color-primary-light) !important;
86
+ }
87
+
88
+ .font-color-secondary {
89
+ color: var(--ec-color-secondary-dark) !important;
90
+ }
91
+
92
+ .font-color-secondary-light {
93
+ color: var(--ec-color-secondary-light) !important;
94
+ }
95
+
96
+ // font-color-muted is deprecated, use .font-color-hint instead
97
+ .font-color-muted,
98
+ .font-color-hint {
99
+ color: var(--ec-color-hint-dark) !important;
100
+ }
101
+
102
+ // @deprecated, use .text-link instead.
103
+ .font-color-link {
104
+ color: var(--ec-color-link) !important;
105
+ }
106
+
107
+ .font-color-error {
108
+ color: var(--ec-color-danger) !important;
109
+ }
110
+
111
+ .font-color-success {
112
+ color: var(--ec-color-success) !important;
113
+ }
114
+
115
+ .font-color-interactive {
116
+ color: var(--ec-color-interactive) !important;
117
+ }
118
+
119
+ // @deprecated use .text-display-1 instead
120
+ .font-message {
121
+ @include overlay-message;
122
+ }
123
+
124
+ // @deprecated use .text-display-1 instead
125
+ .font-message-medium {
126
+ @include overlay-message($font-size: var(--ec-font-size-body));
127
+ }
128
+
129
+ .text-truncate {
130
+ @include truncate();
131
+ }
132
+
133
+ .text-break-all {
134
+ word-break: break-all;
135
+ }
136
+
137
+ .text-wrap {
138
+ white-space: normal;
139
+ }
@@ -6038,6 +6038,12 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6038
6038
  * Truncate menu items when true
6039
6039
  */
6040
6040
  truncateItems: boolean;
6041
+ /**
6042
+ * When true, allows the user to add a custom value that is not in the options list.
6043
+ * The custom item will use the typed text as both its label and value.
6044
+ * @default false
6045
+ */
6046
+ allowCustom: boolean;
6041
6047
  /**
6042
6048
  * Maximum number of items that can be selected. 0 means no limit.
6043
6049
  * @default 0
@@ -6122,8 +6128,17 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6122
6128
  * Selectable items flattened from the options
6123
6129
  */
6124
6130
  selectableItems: MenuItem[];
6131
+ /**
6132
+ * Whether to show the "Add custom" option in the dropdown.
6133
+ * Visible when allowCustom is true, the filter text is non-empty,
6134
+ * no existing option exactly matches the filter text (case-insensitive),
6135
+ * and the value has not already been added as a custom item.
6136
+ */
6137
+ get showAddCustomOption(): boolean;
6125
6138
  /** Placeholder text for 'Choose' */
6126
6139
  private choosePlaceholder;
6140
+ /** Items added by the user via the allowCustom feature */
6141
+ private customItems;
6127
6142
  /** Flag to prevent valueChanges subscriptions from reacting during programmatic sync */
6128
6143
  private ignoreCheckboxChanges;
6129
6144
  /** Fired when options change to clean up previous item FormControl subscriptions */
@@ -6157,6 +6172,11 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6157
6172
  * Handle filter input changes
6158
6173
  */
6159
6174
  onFilterInput(): void;
6175
+ /**
6176
+ * Add a custom item from the current filter text and select it.
6177
+ * The item uses the typed text as both label and value.
6178
+ */
6179
+ addCustomItem(): void;
6160
6180
  /**
6161
6181
  * Handle keyboard navigation
6162
6182
  */
@@ -6177,6 +6197,10 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6177
6197
  * Get selectable items from the current filtered options, excluding the select-all item
6178
6198
  */
6179
6199
  getVisibleSelectableItems(): MenuItem[];
6200
+ /**
6201
+ * Get all options including any custom items added by the user
6202
+ */
6203
+ getAllOptions(): MenuItem[];
6180
6204
  /**
6181
6205
  * Unfilter options and update selectable items
6182
6206
  */
@@ -6233,7 +6257,7 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6233
6257
  */
6234
6258
  private buildCheckboxFormControls;
6235
6259
  static ɵfac: i0.ɵɵFactoryDeclaration<MultiselectComponent, never>;
6236
- static ɵcmp: i0.ɵɵComponentDeclaration<MultiselectComponent, "ec-multiselect", never, { "options": { "alias": "options"; "required": false; }; "menuPosition": { "alias": "menuPosition"; "required": false; }; "popupFixed": { "alias": "popupFixed"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "tagType": { "alias": "tagType"; "required": false; }; "hideNoMatches": { "alias": "hideNoMatches"; "required": false; }; "noMatchesText": { "alias": "noMatchesText"; "required": false; }; "truncateItems": { "alias": "truncateItems"; "required": false; }; "maxSelections": { "alias": "maxSelections"; "required": false; }; }, { "search": "search"; "selectionChanged": "selectionChanged"; }, never, never, false, never>;
6260
+ static ɵcmp: i0.ɵɵComponentDeclaration<MultiselectComponent, "ec-multiselect", never, { "options": { "alias": "options"; "required": false; }; "menuPosition": { "alias": "menuPosition"; "required": false; }; "popupFixed": { "alias": "popupFixed"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "tagType": { "alias": "tagType"; "required": false; }; "hideNoMatches": { "alias": "hideNoMatches"; "required": false; }; "noMatchesText": { "alias": "noMatchesText"; "required": false; }; "truncateItems": { "alias": "truncateItems"; "required": false; }; "allowCustom": { "alias": "allowCustom"; "required": false; }; "maxSelections": { "alias": "maxSelections"; "required": false; }; }, { "search": "search"; "selectionChanged": "selectionChanged"; }, never, never, false, never>;
6237
6261
  }
6238
6262
 
6239
6263
  type ComponentsModuleConfig = {