@energinet/watt 4.3.79 → 4.3.81

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.
@@ -49,7 +49,7 @@ class WattChipComponent {
49
49
  <watt-icon class="dismissible-icon" name="close" size="s" [attr.aria-hidden]="true" />
50
50
  }
51
51
  </label>
52
- `, isInline: true, styles: ["label{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;position:relative;background:var(--input-background, var(--watt-color-neutral-white));border-radius:var(--watt-space-m);border:1px solid var(--input-border-color, var(--watt-on-light-low-emphasis));color:var(--watt-on-light-high-emphasis);cursor:pointer;display:inline-flex;align-items:center;padding:5px 12px;-webkit-user-select:none;user-select:none;white-space:nowrap;max-width:100%}label:hover{border:1px solid var(--watt-on-light-medium-emphasis)}label:active:not(.disabled,.read-only),label:focus-within{background:var(--watt-color-primary-ultralight);border:1px solid var(--watt-on-light-medium-emphasis);outline:none}label.selected{background:var(--watt-color-primary);color:var(--watt-on-dark-high-emphasis);border-color:transparent}label.selected:hover,label.selected:focus-within{background:var(--watt-color-primary-dark);border-color:transparent}label.disabled{border:1px solid var(--watt-on-light-surface-overlay);color:var(--watt-on-light-low-emphasis);cursor:not-allowed}label.read-only{cursor:inherit;border:1px solid var(--watt-on-light-surface-overlay)}label.read-only:hover,label.read-only:focus-within{background:transparent}label .selected-icon{margin-right:var(--watt-space-s)}label .dismissible-icon{margin-left:var(--watt-space-s)}\n"], dependencies: [{ kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
52
+ `, isInline: true, styles: ["label{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;position:relative;background:var(--input-background, var(--watt-color-neutral-white));border-radius:var(--watt-space-m);border:1px solid var(--input-border-color, var(--watt-on-light-low-emphasis));color:var(--watt-on-light-high-emphasis);cursor:pointer;display:inline-flex;align-items:center;padding:5px 12px;-webkit-user-select:none;user-select:none;white-space:nowrap;max-width:100%}label:hover{border:1px solid var(--watt-on-light-medium-emphasis)}label:active:not(.disabled,.read-only),label:focus-within{background:var(--watt-color-primary-ultralight);border:1px solid var(--watt-on-light-medium-emphasis);outline:none}label.selected{background:var(--watt-color-primary);border-color:transparent;color:var(--watt-on-dark-high-emphasis)}label.selected:hover,label.selected:focus-within{background:var(--watt-color-primary-dark);border-color:transparent}label.disabled{border:1px solid var(--watt-on-light-surface-overlay);color:var(--watt-on-light-low-emphasis);cursor:not-allowed}label.read-only{cursor:inherit;border:1px solid var(--watt-on-light-surface-overlay)}label.read-only:hover,label.read-only:focus-within{background:transparent}label .selected-icon{margin-right:var(--watt-space-s)}label .dismissible-icon{margin-left:var(--watt-space-s)}\n"], dependencies: [{ kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
53
  }
54
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WattChipComponent, decorators: [{
55
55
  type: Component,
@@ -68,7 +68,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
68
68
  <watt-icon class="dismissible-icon" name="close" size="s" [attr.aria-hidden]="true" />
69
69
  }
70
70
  </label>
71
- `, styles: ["label{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;position:relative;background:var(--input-background, var(--watt-color-neutral-white));border-radius:var(--watt-space-m);border:1px solid var(--input-border-color, var(--watt-on-light-low-emphasis));color:var(--watt-on-light-high-emphasis);cursor:pointer;display:inline-flex;align-items:center;padding:5px 12px;-webkit-user-select:none;user-select:none;white-space:nowrap;max-width:100%}label:hover{border:1px solid var(--watt-on-light-medium-emphasis)}label:active:not(.disabled,.read-only),label:focus-within{background:var(--watt-color-primary-ultralight);border:1px solid var(--watt-on-light-medium-emphasis);outline:none}label.selected{background:var(--watt-color-primary);color:var(--watt-on-dark-high-emphasis);border-color:transparent}label.selected:hover,label.selected:focus-within{background:var(--watt-color-primary-dark);border-color:transparent}label.disabled{border:1px solid var(--watt-on-light-surface-overlay);color:var(--watt-on-light-low-emphasis);cursor:not-allowed}label.read-only{cursor:inherit;border:1px solid var(--watt-on-light-surface-overlay)}label.read-only:hover,label.read-only:focus-within{background:transparent}label .selected-icon{margin-right:var(--watt-space-s)}label .dismissible-icon{margin-left:var(--watt-space-s)}\n"] }]
71
+ `, styles: ["label{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;position:relative;background:var(--input-background, var(--watt-color-neutral-white));border-radius:var(--watt-space-m);border:1px solid var(--input-border-color, var(--watt-on-light-low-emphasis));color:var(--watt-on-light-high-emphasis);cursor:pointer;display:inline-flex;align-items:center;padding:5px 12px;-webkit-user-select:none;user-select:none;white-space:nowrap;max-width:100%}label:hover{border:1px solid var(--watt-on-light-medium-emphasis)}label:active:not(.disabled,.read-only),label:focus-within{background:var(--watt-color-primary-ultralight);border:1px solid var(--watt-on-light-medium-emphasis);outline:none}label.selected{background:var(--watt-color-primary);border-color:transparent;color:var(--watt-on-dark-high-emphasis)}label.selected:hover,label.selected:focus-within{background:var(--watt-color-primary-dark);border-color:transparent}label.disabled{border:1px solid var(--watt-on-light-surface-overlay);color:var(--watt-on-light-low-emphasis);cursor:not-allowed}label.read-only{cursor:inherit;border:1px solid var(--watt-on-light-surface-overlay)}label.read-only:hover,label.read-only:focus-within{background:transparent}label .selected-icon{margin-right:var(--watt-space-s)}label .dismissible-icon{margin-left:var(--watt-space-s)}\n"] }]
72
72
  }], propDecorators: { selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
73
73
 
74
74
  //#region License
@@ -1,11 +1,8 @@
1
- import { NgTemplateOutlet } from '@angular/common';
2
- import { RouterLinkWithHref, RouterLinkActive } from '@angular/router';
3
- import * as i2 from '@angular/forms';
4
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
1
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
2
  import * as i0 from '@angular/core';
6
- import { viewChild, TemplateRef, input, Component, inject, ElementRef, contentChildren, model, signal, forwardRef, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
7
- import * as i1 from '@angular/material/button-toggle';
8
- import { MatButtonToggleModule } from '@angular/material/button-toggle';
3
+ import { input, signal, inject, ElementRef, ChangeDetectionStrategy, Component, contentChildren, model, effect, forwardRef } from '@angular/core';
4
+ import { NgTemplateOutlet } from '@angular/common';
5
+ import { RouterLink, RouterLinkActive } from '@angular/router';
9
6
 
10
7
  //#region License
11
8
  /**
@@ -26,23 +23,90 @@ import { MatButtonToggleModule } from '@angular/material/button-toggle';
26
23
  */
27
24
  //#endregion
28
25
  class WattSegmentedButtonComponent {
29
- templateRef = viewChild.required(TemplateRef);
30
26
  value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
31
27
  link = input(...(ngDevMode ? [undefined, { debugName: "link" }] : /* istanbul ignore next */ []));
28
+ selected = signal(false, ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
29
+ disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
30
+ tabIndex = signal(0, ...(ngDevMode ? [{ debugName: "tabIndex" }] : /* istanbul ignore next */ []));
31
+ elementRef = inject(ElementRef);
32
+ focus() {
33
+ const host = this.elementRef.nativeElement;
34
+ const interactive = host.querySelector('a, button');
35
+ interactive?.focus();
36
+ }
37
+ onClick() {
38
+ if (this.disabled())
39
+ return;
40
+ const value = this.value();
41
+ if (value === undefined)
42
+ return;
43
+ this.elementRef.nativeElement.dispatchEvent(new CustomEvent('segmentSelect', { bubbles: true, detail: value }));
44
+ }
32
45
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WattSegmentedButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.5", type: WattSegmentedButtonComponent, isStandalone: true, selector: "watt-segmented-button", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: ` <ng-template>
34
- <ng-content />
35
- </ng-template>`, isInline: true });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: WattSegmentedButtonComponent, isStandalone: true, selector: "watt-segmented-button", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
47
+ <ng-template #labelTemplate><ng-content /></ng-template>
48
+
49
+ @if (link()) {
50
+ <a
51
+ role="radio"
52
+ [routerLink]="disabled() ? null : link()"
53
+ queryParamsHandling="merge"
54
+ routerLinkActive
55
+ #rla="routerLinkActive"
56
+ [class.active]="rla.isActive"
57
+ [attr.aria-checked]="selected() || rla.isActive"
58
+ [attr.aria-disabled]="disabled() ? true : null"
59
+ [attr.tabindex]="tabIndex()"
60
+ >
61
+ <ng-container *ngTemplateOutlet="labelTemplate" />
62
+ </a>
63
+ } @else {
64
+ <button
65
+ type="button"
66
+ role="radio"
67
+ [attr.aria-checked]="selected()"
68
+ [attr.tabindex]="tabIndex()"
69
+ [disabled]="disabled()"
70
+ (click)="onClick()"
71
+ >
72
+ <ng-container *ngTemplateOutlet="labelTemplate" />
73
+ </button>
74
+ }
75
+ `, isInline: true, styles: [":host{display:flex}a,button{display:flex;align-items:center;justify-content:center;min-width:6.5rem;height:2.5rem;padding:0 .75rem;border:1px solid var(--watt-color-neutral-grey-700);border-radius:4px;font-size:1rem;font-weight:600;color:var(--watt-on-light-high-emphasis);background:none;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;box-sizing:border-box;font-family:inherit}a:hover,button:hover,:host(.hover) a,:host(.hover) button{background-color:var(--watt-color-neutral-grey-200)}a:focus-visible,button:focus-visible{outline:none;box-shadow:0 0 0 2px var(--watt-color-primary-dark);position:relative;z-index:1}a.active,:host(.selected) a,:host(.selected) button{background-color:var(--watt-color-primary);color:var(--watt-color-neutral-white)}:host(.disabled) a,:host(.disabled) button{cursor:default;background-color:var(--watt-color-neutral-grey-200);color:#00000042}:host(.disabled.selected) a,:host(.disabled.selected) button{background-color:var(--watt-color-neutral-grey-400);color:var( --watt-on-light-high-emphasis )}:host(.start) a,:host(.start) button{border-right-width:0;border-radius:4px 0 0 4px}:host(.middle) a,:host(.middle) button{border-right-width:0;border-radius:0}:host(.end) a,:host(.end) button{border-radius:0 4px 4px 0}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
36
76
  }
37
77
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WattSegmentedButtonComponent, decorators: [{
38
78
  type: Component,
39
- args: [{
40
- selector: 'watt-segmented-button',
41
- template: ` <ng-template>
42
- <ng-content />
43
- </ng-template>`,
44
- }]
45
- }], propDecorators: { templateRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: false }] }] } });
79
+ args: [{ selector: 'watt-segmented-button', changeDetection: ChangeDetectionStrategy.OnPush, imports: [RouterLink, RouterLinkActive, NgTemplateOutlet], template: `
80
+ <ng-template #labelTemplate><ng-content /></ng-template>
81
+
82
+ @if (link()) {
83
+ <a
84
+ role="radio"
85
+ [routerLink]="disabled() ? null : link()"
86
+ queryParamsHandling="merge"
87
+ routerLinkActive
88
+ #rla="routerLinkActive"
89
+ [class.active]="rla.isActive"
90
+ [attr.aria-checked]="selected() || rla.isActive"
91
+ [attr.aria-disabled]="disabled() ? true : null"
92
+ [attr.tabindex]="tabIndex()"
93
+ >
94
+ <ng-container *ngTemplateOutlet="labelTemplate" />
95
+ </a>
96
+ } @else {
97
+ <button
98
+ type="button"
99
+ role="radio"
100
+ [attr.aria-checked]="selected()"
101
+ [attr.tabindex]="tabIndex()"
102
+ [disabled]="disabled()"
103
+ (click)="onClick()"
104
+ >
105
+ <ng-container *ngTemplateOutlet="labelTemplate" />
106
+ </button>
107
+ }
108
+ `, styles: [":host{display:flex}a,button{display:flex;align-items:center;justify-content:center;min-width:6.5rem;height:2.5rem;padding:0 .75rem;border:1px solid var(--watt-color-neutral-grey-700);border-radius:4px;font-size:1rem;font-weight:600;color:var(--watt-on-light-high-emphasis);background:none;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;box-sizing:border-box;font-family:inherit}a:hover,button:hover,:host(.hover) a,:host(.hover) button{background-color:var(--watt-color-neutral-grey-200)}a:focus-visible,button:focus-visible{outline:none;box-shadow:0 0 0 2px var(--watt-color-primary-dark);position:relative;z-index:1}a.active,:host(.selected) a,:host(.selected) button{background-color:var(--watt-color-primary);color:var(--watt-color-neutral-white)}:host(.disabled) a,:host(.disabled) button{cursor:default;background-color:var(--watt-color-neutral-grey-200);color:#00000042}:host(.disabled.selected) a,:host(.disabled.selected) button{background-color:var(--watt-color-neutral-grey-400);color:var( --watt-on-light-high-emphasis )}:host(.start) a,:host(.start) button{border-right-width:0;border-radius:4px 0 0 4px}:host(.middle) a,:host(.middle) button{border-right-width:0;border-radius:0}:host(.end) a,:host(.end) button{border-radius:0 4px 4px 0}\n"] }]
109
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: false }] }] } });
46
110
 
47
111
  //#region License
48
112
  /**
@@ -62,14 +126,84 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
62
126
  * limitations under the License.
63
127
  */
64
128
  //#endregion
65
- /**
66
- * Segmented buttons.
67
- */
129
+ const POSITION_CLASSES = ['start', 'middle', 'end'];
130
+ function resolvePosition(index, total) {
131
+ if (total === 1)
132
+ return null;
133
+ if (index === 0)
134
+ return 'start';
135
+ if (index === total - 1)
136
+ return 'end';
137
+ return 'middle';
138
+ }
139
+ function findIndexByValue(buttons, value) {
140
+ const index = buttons.findIndex((button) => button.value() === value);
141
+ return index === -1 ? 0 : index;
142
+ }
143
+ function nextKeyboardIndex(key, current, total) {
144
+ switch (key) {
145
+ case 'ArrowRight':
146
+ case 'ArrowDown':
147
+ return (current + 1) % total;
148
+ case 'ArrowLeft':
149
+ case 'ArrowUp':
150
+ return (current - 1 + total) % total;
151
+ case 'Home':
152
+ return 0;
153
+ case 'End':
154
+ return total - 1;
155
+ default:
156
+ return null;
157
+ }
158
+ }
68
159
  class WattSegmentedButtonsComponent {
69
160
  element = inject(ElementRef);
70
- segmentedButtonElements = contentChildren(WattSegmentedButtonComponent, ...(ngDevMode ? [{ debugName: "segmentedButtonElements" }] : /* istanbul ignore next */ []));
161
+ buttons = contentChildren(WattSegmentedButtonComponent, ...(ngDevMode ? [{ debugName: "buttons" }] : /* istanbul ignore next */ []));
71
162
  selected = model('', ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
72
163
  disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
164
+ constructor() {
165
+ effect(() => {
166
+ const buttons = this.buttons();
167
+ const selected = this.selected();
168
+ const disabled = this.disabled();
169
+ const focusedIndex = findIndexByValue(buttons, selected);
170
+ for (let i = 0; i < buttons.length; i++) {
171
+ const button = buttons[i];
172
+ const isSelected = button.value() === selected;
173
+ button.selected.set(isSelected);
174
+ button.disabled.set(disabled);
175
+ button.tabIndex.set(!disabled && i === focusedIndex ? 0 : -1);
176
+ const position = resolvePosition(i, buttons.length);
177
+ const classList = button.elementRef.nativeElement.classList;
178
+ for (const cls of POSITION_CLASSES)
179
+ classList.toggle(cls, cls === position);
180
+ classList.toggle('selected', isSelected);
181
+ classList.toggle('disabled', disabled);
182
+ }
183
+ });
184
+ }
185
+ onSegmentSelect(event) {
186
+ if (this.disabled())
187
+ return;
188
+ this.selected.set(event.detail);
189
+ }
190
+ onKeydown(event) {
191
+ if (this.disabled())
192
+ return;
193
+ const buttons = this.buttons();
194
+ if (buttons.length === 0)
195
+ return;
196
+ const currentIndex = findIndexByValue(buttons, this.selected());
197
+ const nextIndex = nextKeyboardIndex(event.key, currentIndex, buttons.length);
198
+ if (nextIndex === null)
199
+ return;
200
+ event.preventDefault();
201
+ const nextButton = buttons[nextIndex];
202
+ const nextValue = nextButton.value();
203
+ if (nextValue !== undefined)
204
+ this.selected.set(nextValue);
205
+ nextButton.focus();
206
+ }
73
207
  writeValue(selected) {
74
208
  this.selected.set(selected);
75
209
  }
@@ -83,68 +217,28 @@ class WattSegmentedButtonsComponent {
83
217
  this.disabled.set(isDisabled);
84
218
  }
85
219
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WattSegmentedButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
86
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: WattSegmentedButtonsComponent, isStandalone: true, selector: "watt-segmented-buttons", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange" }, providers: [
220
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.5", type: WattSegmentedButtonsComponent, isStandalone: true, selector: "watt-segmented-buttons", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange" }, host: { attributes: { "role": "radiogroup" }, listeners: { "segmentSelect": "onSegmentSelect($event)", "keydown": "onKeydown($event)" } }, providers: [
87
221
  {
88
222
  provide: NG_VALUE_ACCESSOR,
89
223
  useExisting: forwardRef(() => WattSegmentedButtonsComponent),
90
224
  multi: true,
91
225
  },
92
- ], queries: [{ propertyName: "segmentedButtonElements", predicate: WattSegmentedButtonComponent, isSignal: true }], ngImport: i0, template: `
93
- <mat-button-toggle-group
94
- [(ngModel)]="selected"
95
- [multiple]="false"
96
- [hideSingleSelectionIndicator]="true"
97
- [disabled]="disabled()"
98
- >
99
- @for (segmentedButton of segmentedButtonElements(); track segmentedButton) {
100
- <mat-button-toggle
101
- [routerLink]="segmentedButton.link()"
102
- queryParamsHandling="merge"
103
- routerLinkActive="mat-button-toggle-checked"
104
- [disableRipple]="true"
105
- [value]="segmentedButton.value()"
106
- >
107
- <ng-container *ngTemplateOutlet="segmentedButton.templateRef()" />
108
- </mat-button-toggle>
109
- }
110
- </mat-button-toggle-group>
111
- `, isInline: true, styles: ["@use \"@energinet/watt/utils\" as watt;@use \"@angular/material\" as mat;:root{@include mat.button-toggle-overrides((selected-state-text-color: white,selected-state-background-color: var(--watt-color-primary),height: 2.5rem,));}:root mat-button-toggle-group{border-color:var(--watt-color-neutral-grey-700)}:root mat-button-toggle-group mat-button-toggle{border-color:var(--watt-color-neutral-grey-700)!important}:root mat-button-toggle-group mat-button-toggle button{min-width:6.5rem}:root mat-button-toggle-group mat-button-toggle button span{font-size:.875rem;font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLinkWithHref, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
226
+ ], queries: [{ propertyName: "buttons", predicate: WattSegmentedButtonComponent, isSignal: true }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:inline-flex}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
112
227
  }
113
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WattSegmentedButtonsComponent, decorators: [{
114
229
  type: Component,
115
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
116
- MatButtonToggleModule,
117
- FormsModule,
118
- NgTemplateOutlet,
119
- RouterLinkWithHref,
120
- RouterLinkActive,
121
- ], providers: [
230
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, providers: [
122
231
  {
123
232
  provide: NG_VALUE_ACCESSOR,
124
233
  useExisting: forwardRef(() => WattSegmentedButtonsComponent),
125
234
  multi: true,
126
235
  },
127
- ], selector: 'watt-segmented-buttons', template: `
128
- <mat-button-toggle-group
129
- [(ngModel)]="selected"
130
- [multiple]="false"
131
- [hideSingleSelectionIndicator]="true"
132
- [disabled]="disabled()"
133
- >
134
- @for (segmentedButton of segmentedButtonElements(); track segmentedButton) {
135
- <mat-button-toggle
136
- [routerLink]="segmentedButton.link()"
137
- queryParamsHandling="merge"
138
- routerLinkActive="mat-button-toggle-checked"
139
- [disableRipple]="true"
140
- [value]="segmentedButton.value()"
141
- >
142
- <ng-container *ngTemplateOutlet="segmentedButton.templateRef()" />
143
- </mat-button-toggle>
144
- }
145
- </mat-button-toggle-group>
146
- `, styles: ["@use \"@energinet/watt/utils\" as watt;@use \"@angular/material\" as mat;:root{@include mat.button-toggle-overrides((selected-state-text-color: white,selected-state-background-color: var(--watt-color-primary),height: 2.5rem,));}:root mat-button-toggle-group{border-color:var(--watt-color-neutral-grey-700)}:root mat-button-toggle-group mat-button-toggle{border-color:var(--watt-color-neutral-grey-700)!important}:root mat-button-toggle-group mat-button-toggle button{min-width:6.5rem}:root mat-button-toggle-group mat-button-toggle button span{font-size:.875rem;font-weight:600}\n"] }]
147
- }], propDecorators: { segmentedButtonElements: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => WattSegmentedButtonComponent), { isSignal: true }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }] } });
236
+ ], selector: 'watt-segmented-buttons', host: {
237
+ role: 'radiogroup',
238
+ '(segmentSelect)': 'onSegmentSelect($event)',
239
+ '(keydown)': 'onKeydown($event)',
240
+ }, template: `<ng-content />`, styles: [":host{display:inline-flex}\n"] }]
241
+ }], ctorParameters: () => [], propDecorators: { buttons: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => WattSegmentedButtonComponent), { isSignal: true }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }] } });
148
242
 
149
243
  //#region License
150
244
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"energinet-watt-segmented-buttons.mjs","sources":["../../../libs/watt/package/segmented-buttons/watt-segmented-button.component.ts","../../../libs/watt/package/segmented-buttons/watt-segmented-buttons.component.ts","../../../libs/watt/package/segmented-buttons/index.ts","../../../libs/watt/package/segmented-buttons/energinet-watt-segmented-buttons.ts"],"sourcesContent":["//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport { Component, input, TemplateRef, viewChild } from '@angular/core';\n\n@Component({\n selector: 'watt-segmented-button',\n template: ` <ng-template>\n <ng-content />\n </ng-template>`,\n})\nexport class WattSegmentedButtonComponent {\n templateRef = viewChild.required<TemplateRef<unknown>>(TemplateRef);\n value = input<string>();\n link = input<string>();\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLinkWithHref, RouterLinkActive } from '@angular/router';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n model,\n signal,\n inject,\n Component,\n ElementRef,\n forwardRef,\n contentChildren,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { WattSegmentedButtonComponent } from './watt-segmented-button.component';\n\n/**\n * Segmented buttons.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n MatButtonToggleModule,\n FormsModule,\n NgTemplateOutlet,\n RouterLinkWithHref,\n RouterLinkActive,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WattSegmentedButtonsComponent),\n multi: true,\n },\n ],\n selector: 'watt-segmented-buttons',\n styles: `\n @use '@energinet/watt/utils' as watt;\n @use '@angular/material' as mat;\n\n :root {\n @include mat.button-toggle-overrides(\n (\n selected-state-text-color: white,\n selected-state-background-color: var(--watt-color-primary),\n height: 2.5rem,\n )\n );\n\n mat-button-toggle-group {\n border-color: var(--watt-color-neutral-grey-700);\n\n mat-button-toggle {\n border-color: var(--watt-color-neutral-grey-700) !important;\n\n button {\n min-width: 6.5rem;\n\n span {\n font-size: 0.875rem;\n font-weight: 600;\n }\n }\n }\n }\n }\n `,\n template: `\n <mat-button-toggle-group\n [(ngModel)]=\"selected\"\n [multiple]=\"false\"\n [hideSingleSelectionIndicator]=\"true\"\n [disabled]=\"disabled()\"\n >\n @for (segmentedButton of segmentedButtonElements(); track segmentedButton) {\n <mat-button-toggle\n [routerLink]=\"segmentedButton.link()\"\n queryParamsHandling=\"merge\"\n routerLinkActive=\"mat-button-toggle-checked\"\n [disableRipple]=\"true\"\n [value]=\"segmentedButton.value()\"\n >\n <ng-container *ngTemplateOutlet=\"segmentedButton.templateRef()\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n `,\n})\nexport class WattSegmentedButtonsComponent implements ControlValueAccessor {\n private element = inject(ElementRef);\n segmentedButtonElements = contentChildren(WattSegmentedButtonComponent);\n selected = model<string>('');\n disabled = signal(false);\n\n writeValue(selected: string): void {\n this.selected.set(selected);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.selected.subscribe(fn);\n }\n\n registerOnTouched(fn: (value: boolean) => void): void {\n this.element.nativeElement.addEventListener('focusout', fn);\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport { WattSegmentedButtonsComponent } from './watt-segmented-buttons.component';\nimport { WattSegmentedButtonComponent } from './watt-segmented-button.component';\n\nexport { WattSegmentedButtonsComponent } from './watt-segmented-buttons.component';\nexport { WattSegmentedButtonComponent } from './watt-segmented-button.component';\nexport const WATT_SEGMENTED_BUTTONS = [\n WattSegmentedButtonsComponent,\n WattSegmentedButtonComponent,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"energinet-watt-segmented-buttons.mjs","sources":["../../../libs/watt/package/segmented-buttons/watt-segmented-button.component.ts","../../../libs/watt/package/segmented-buttons/watt-segmented-buttons.component.ts","../../../libs/watt/package/segmented-buttons/index.ts","../../../libs/watt/package/segmented-buttons/energinet-watt-segmented-buttons.ts"],"sourcesContent":["//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport {\n Component,\n ChangeDetectionStrategy,\n input,\n signal,\n inject,\n ElementRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\n\nexport type WattSegmentedButtonPosition = 'first' | 'middle' | 'last' | 'standalone';\n\n@Component({\n selector: 'watt-segmented-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, NgTemplateOutlet],\n styles: `\n :host {\n display: flex;\n }\n\n a,\n button {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 6.5rem;\n height: 2.5rem;\n padding: 0 0.75rem;\n border: 1px solid var(--watt-color-neutral-grey-700);\n border-radius: 4px;\n font-size: 1rem;\n font-weight: 600;\n color: var(--watt-on-light-high-emphasis);\n background: none;\n text-decoration: none;\n cursor: pointer;\n user-select: none;\n box-sizing: border-box;\n font-family: inherit;\n }\n\n a:hover,\n button:hover,\n :host(.hover) a,\n :host(.hover) button {\n background-color: var(--watt-color-neutral-grey-200);\n }\n\n a:focus-visible,\n button:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--watt-color-primary-dark);\n position: relative;\n z-index: 1;\n }\n\n a.active,\n :host(.selected) a,\n :host(.selected) button {\n background-color: var(--watt-color-primary);\n color: var(--watt-color-neutral-white);\n }\n\n :host(.disabled) a,\n :host(.disabled) button {\n cursor: default;\n background-color: var(--watt-color-neutral-grey-200);\n color: rgba(\n 0,\n 0,\n 0,\n 0.26\n ); /* Not part of Watt foundations — see Figma note on disabled segmented buttons */\n }\n\n :host(.disabled.selected) a,\n :host(.disabled.selected) button {\n background-color: var(--watt-color-neutral-grey-400);\n color: var(\n --watt-on-light-high-emphasis\n ); /* Not part of Watt foundations — see Figma note on disabled segmented buttons */\n }\n\n :host(.start) a,\n :host(.start) button {\n border-right-width: 0;\n border-radius: 4px 0 0 4px;\n }\n\n :host(.middle) a,\n :host(.middle) button {\n border-right-width: 0;\n border-radius: 0;\n }\n\n :host(.end) a,\n :host(.end) button {\n border-radius: 0 4px 4px 0;\n }\n `,\n template: `\n <ng-template #labelTemplate><ng-content /></ng-template>\n\n @if (link()) {\n <a\n role=\"radio\"\n [routerLink]=\"disabled() ? null : link()\"\n queryParamsHandling=\"merge\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [class.active]=\"rla.isActive\"\n [attr.aria-checked]=\"selected() || rla.isActive\"\n [attr.aria-disabled]=\"disabled() ? true : null\"\n [attr.tabindex]=\"tabIndex()\"\n >\n <ng-container *ngTemplateOutlet=\"labelTemplate\" />\n </a>\n } @else {\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"selected()\"\n [attr.tabindex]=\"tabIndex()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick()\"\n >\n <ng-container *ngTemplateOutlet=\"labelTemplate\" />\n </button>\n }\n `,\n})\nexport class WattSegmentedButtonComponent {\n value = input<string>();\n link = input<string>();\n\n selected = signal(false);\n disabled = signal(false);\n tabIndex = signal(0);\n\n readonly elementRef = inject(ElementRef);\n\n focus(): void {\n const host = this.elementRef.nativeElement as HTMLElement;\n const interactive = host.querySelector<HTMLElement>('a, button');\n interactive?.focus();\n }\n\n onClick(): void {\n if (this.disabled()) return;\n const value = this.value();\n if (value === undefined) return;\n this.elementRef.nativeElement.dispatchEvent(\n new CustomEvent('segmentSelect', { bubbles: true, detail: value })\n );\n }\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n model,\n signal,\n inject,\n effect,\n Component,\n ElementRef,\n forwardRef,\n contentChildren,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { WattSegmentedButtonComponent } from './watt-segmented-button.component';\n\ntype ReadonlyButtons = readonly WattSegmentedButtonComponent[];\n\nconst POSITION_CLASSES = ['start', 'middle', 'end'] as const;\ntype PositionClass = (typeof POSITION_CLASSES)[number] | null;\n\nfunction resolvePosition(index: number, total: number): PositionClass {\n if (total === 1) return null;\n if (index === 0) return 'start';\n if (index === total - 1) return 'end';\n return 'middle';\n}\n\nfunction findIndexByValue(buttons: ReadonlyButtons, value: string): number {\n const index = buttons.findIndex((button) => button.value() === value);\n return index === -1 ? 0 : index;\n}\n\nfunction nextKeyboardIndex(key: string, current: number, total: number): number | null {\n switch (key) {\n case 'ArrowRight':\n case 'ArrowDown':\n return (current + 1) % total;\n case 'ArrowLeft':\n case 'ArrowUp':\n return (current - 1 + total) % total;\n case 'Home':\n return 0;\n case 'End':\n return total - 1;\n default:\n return null;\n }\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WattSegmentedButtonsComponent),\n multi: true,\n },\n ],\n selector: 'watt-segmented-buttons',\n host: {\n role: 'radiogroup',\n '(segmentSelect)': 'onSegmentSelect($event)',\n '(keydown)': 'onKeydown($event)',\n },\n styles: `\n :host {\n display: inline-flex;\n }\n `,\n template: `<ng-content />`,\n})\nexport class WattSegmentedButtonsComponent implements ControlValueAccessor {\n private readonly element = inject(ElementRef);\n private readonly buttons = contentChildren(WattSegmentedButtonComponent);\n selected = model<string>('');\n disabled = signal(false);\n\n constructor() {\n effect(() => {\n const buttons = this.buttons();\n const selected = this.selected();\n const disabled = this.disabled();\n const focusedIndex = findIndexByValue(buttons, selected);\n\n for (let i = 0; i < buttons.length; i++) {\n const button = buttons[i];\n const isSelected = button.value() === selected;\n button.selected.set(isSelected);\n button.disabled.set(disabled);\n button.tabIndex.set(!disabled && i === focusedIndex ? 0 : -1);\n\n const position = resolvePosition(i, buttons.length);\n const classList = button.elementRef.nativeElement.classList;\n for (const cls of POSITION_CLASSES) classList.toggle(cls, cls === position);\n classList.toggle('selected', isSelected);\n classList.toggle('disabled', disabled);\n }\n });\n }\n\n onSegmentSelect(event: Event): void {\n if (this.disabled()) return;\n this.selected.set((event as CustomEvent<string>).detail);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n const buttons = this.buttons();\n if (buttons.length === 0) return;\n\n const currentIndex = findIndexByValue(buttons, this.selected());\n const nextIndex = nextKeyboardIndex(event.key, currentIndex, buttons.length);\n if (nextIndex === null) return;\n\n event.preventDefault();\n const nextButton = buttons[nextIndex];\n const nextValue = nextButton.value();\n if (nextValue !== undefined) this.selected.set(nextValue);\n nextButton.focus();\n }\n\n writeValue(selected: string): void {\n this.selected.set(selected);\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.selected.subscribe(fn);\n }\n\n registerOnTouched(fn: (value: boolean) => void): void {\n this.element.nativeElement.addEventListener('focusout', fn);\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport { WattSegmentedButtonsComponent } from './watt-segmented-buttons.component';\nimport { WattSegmentedButtonComponent } from './watt-segmented-button.component';\n\nexport { WattSegmentedButtonsComponent } from './watt-segmented-buttons.component';\nexport { WattSegmentedButtonComponent } from './watt-segmented-button.component';\nexport const WATT_SEGMENTED_BUTTONS = [\n WattSegmentedButtonsComponent,\n WattSegmentedButtonComponent,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -80,8 +80,8 @@ class WattTextAreaFieldComponent {
80
80
  </vater-stack>
81
81
  </div>
82
82
 
83
- <ng-content ngProjectAs="watt-field-hint" select="watt-field-hint" />
84
83
  <ng-content ngProjectAs="watt-field-error" select="watt-field-error" />
84
+ <ng-content ngProjectAs="watt-field-hint" select="watt-field-hint" />
85
85
  </watt-field>`, isInline: true, styles: ["watt-textarea-field{display:block;width:100%;--watt-textarea-min-height: 200px}watt-textarea-field[small=true]{--watt-textarea-min-height: 80px}watt-textarea-field .textarea-wrapper{width:100%}watt-textarea-field textarea{border:none;width:100%;outline:none;padding:var(--watt-space-s);padding-left:0;background-color:transparent;min-height:var(--watt-textarea-min-height)}watt-textarea-field .textarea-footer{padding:0 0 var(--watt-space-s) 0}watt-textarea-field .textarea-footer:empty{display:none}watt-textarea-field[resize=none] textarea{resize:none}watt-textarea-field[resize=horizontal] textarea{resize:horizontal}watt-textarea-field[resize=vertical] textarea{resize:vertical}watt-textarea-field[resize=both] textarea{resize:both}watt-textarea-field .watt-field-wrapper{padding:0!important}watt-textarea-field .watt-field-wrapper textarea,watt-textarea-field .watt-field-wrapper .textarea-footer{padding:var(--watt-space-m) var(--watt-space-s) var(--watt-space-s) var(--watt-space-s)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName", "displayMode", "autoFocus", "showErrors"] }, { kind: "component", type: VaterStackComponent, selector: "vater-stack, [vater-stack]" }], encapsulation: i0.ViewEncapsulation.None });
86
86
  }
87
87
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: WattTextAreaFieldComponent, decorators: [{
@@ -109,8 +109,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
109
109
  </vater-stack>
110
110
  </div>
111
111
 
112
- <ng-content ngProjectAs="watt-field-hint" select="watt-field-hint" />
113
112
  <ng-content ngProjectAs="watt-field-error" select="watt-field-error" />
113
+ <ng-content ngProjectAs="watt-field-hint" select="watt-field-hint" />
114
114
  </watt-field>`, host: {
115
115
  '[attr.watt-field-disabled]': 'isDisabled()',
116
116
  '[attr.small]': 'small()',
@@ -1 +1 @@
1
- {"version":3,"file":"energinet-watt-textarea-field.mjs","sources":["../../../libs/watt/package/textarea-field/watt-textarea-field.component.ts","../../../libs/watt/package/textarea-field/watt-textarea-notice.component.ts","../../../libs/watt/package/textarea-field/index.ts","../../../libs/watt/package/textarea-field/energinet-watt-textarea-field.ts"],"sourcesContent":["//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport {\n Component,\n forwardRef,\n ViewEncapsulation,\n inject,\n ElementRef,\n input,\n model,\n signal,\n booleanAttribute,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { WattFieldComponent } from '@energinet/watt/field';\nimport { VaterStackComponent } from '@energinet/watt/vater';\n\n@Component({\n imports: [FormsModule, WattFieldComponent, VaterStackComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WattTextAreaFieldComponent),\n multi: true,\n },\n ],\n selector: 'watt-textarea-field',\n styleUrls: ['./watt-textarea-field.component.scss'],\n encapsulation: ViewEncapsulation.None,\n template: `<watt-field [label]=\"label()\" [control]=\"formControl()\">\n <div class=\"textarea-wrapper\">\n <ng-content select=\"watt-textarea-notice\" />\n <textarea\n [attr.placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n (input)=\"onInput($event)\"\n ></textarea>\n\n <vater-stack direction=\"row\" wrap gap=\"s\" class=\"textarea-footer\">\n <ng-content />\n </vater-stack>\n </div>\n\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n </watt-field>`,\n host: {\n '[attr.watt-field-disabled]': 'isDisabled()',\n '[attr.small]': 'small()',\n '[attr.resize]': 'resize()',\n },\n})\nexport class WattTextAreaFieldComponent implements ControlValueAccessor {\n /** @ignore */\n private element = inject(ElementRef);\n formControl = input.required<FormControl>();\n placeholder = input<string>();\n required = input(false);\n maxLength = input<string | number | null>(null);\n label = input<string>();\n small = input(false, { transform: booleanAttribute });\n resize = input<'none' | 'horizontal' | 'vertical' | 'both'>('none');\n\n onInput(event: Event) {\n const target = event.target as HTMLTextAreaElement;\n this.value.set(target.value);\n }\n\n /** @ignore */\n value = model<string>('');\n\n /** @ignore */\n isDisabled = signal(false);\n\n /** @ignore */\n writeValue(value: string): void {\n this.value.set(value);\n }\n\n /** @ignore */\n registerOnChange(fn: (value: string) => void): void {\n this.value.subscribe(fn);\n }\n\n /** @ignore */\n registerOnTouched(fn: () => void): void {\n this.element.nativeElement.addEventListener('focusout', fn);\n }\n\n /** @ignore */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport { Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'watt-textarea-notice',\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n styles: `\n watt-textarea-notice {\n display: flex;\n align-items: center;\n gap: var(--watt-space-s);\n padding: var(--watt-space-xs) var(--watt-space-s);\n color: var(--watt-on-light-high-emphasis);\n background: var(--watt-color-neutral-grey-200);\n\n &[type='danger'] {\n color: var(--watt-color-state-danger);\n background: var(--watt-color-state-danger-light);\n }\n }\n `,\n host: {\n '[attr.type]': 'type()',\n },\n})\nexport class WattTextareaNoticeComponent {\n type = input<'info' | 'danger'>('info');\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nexport { WattTextAreaFieldComponent } from './watt-textarea-field.component';\nexport { WattTextareaNoticeComponent } from './watt-textarea-notice.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"energinet-watt-textarea-field.mjs","sources":["../../../libs/watt/package/textarea-field/watt-textarea-field.component.ts","../../../libs/watt/package/textarea-field/watt-textarea-notice.component.ts","../../../libs/watt/package/textarea-field/index.ts","../../../libs/watt/package/textarea-field/energinet-watt-textarea-field.ts"],"sourcesContent":["//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport {\n Component,\n forwardRef,\n ViewEncapsulation,\n inject,\n ElementRef,\n input,\n model,\n signal,\n booleanAttribute,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { WattFieldComponent } from '@energinet/watt/field';\nimport { VaterStackComponent } from '@energinet/watt/vater';\n\n@Component({\n imports: [FormsModule, WattFieldComponent, VaterStackComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WattTextAreaFieldComponent),\n multi: true,\n },\n ],\n selector: 'watt-textarea-field',\n styleUrls: ['./watt-textarea-field.component.scss'],\n encapsulation: ViewEncapsulation.None,\n template: `<watt-field [label]=\"label()\" [control]=\"formControl()\">\n <div class=\"textarea-wrapper\">\n <ng-content select=\"watt-textarea-notice\" />\n <textarea\n [attr.placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n (input)=\"onInput($event)\"\n ></textarea>\n\n <vater-stack direction=\"row\" wrap gap=\"s\" class=\"textarea-footer\">\n <ng-content />\n </vater-stack>\n </div>\n\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n </watt-field>`,\n host: {\n '[attr.watt-field-disabled]': 'isDisabled()',\n '[attr.small]': 'small()',\n '[attr.resize]': 'resize()',\n },\n})\nexport class WattTextAreaFieldComponent implements ControlValueAccessor {\n /** @ignore */\n private element = inject(ElementRef);\n formControl = input.required<FormControl>();\n placeholder = input<string>();\n required = input(false);\n maxLength = input<string | number | null>(null);\n label = input<string>();\n small = input(false, { transform: booleanAttribute });\n resize = input<'none' | 'horizontal' | 'vertical' | 'both'>('none');\n\n onInput(event: Event) {\n const target = event.target as HTMLTextAreaElement;\n this.value.set(target.value);\n }\n\n /** @ignore */\n value = model<string>('');\n\n /** @ignore */\n isDisabled = signal(false);\n\n /** @ignore */\n writeValue(value: string): void {\n this.value.set(value);\n }\n\n /** @ignore */\n registerOnChange(fn: (value: string) => void): void {\n this.value.subscribe(fn);\n }\n\n /** @ignore */\n registerOnTouched(fn: () => void): void {\n this.element.nativeElement.addEventListener('focusout', fn);\n }\n\n /** @ignore */\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport { Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'watt-textarea-notice',\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n styles: `\n watt-textarea-notice {\n display: flex;\n align-items: center;\n gap: var(--watt-space-s);\n padding: var(--watt-space-xs) var(--watt-space-s);\n color: var(--watt-on-light-high-emphasis);\n background: var(--watt-color-neutral-grey-200);\n\n &[type='danger'] {\n color: var(--watt-color-state-danger);\n background: var(--watt-color-state-danger-light);\n }\n }\n `,\n host: {\n '[attr.type]': 'type()',\n },\n})\nexport class WattTextareaNoticeComponent {\n type = input<'info' | 'danger'>('info');\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nexport { WattTextAreaFieldComponent } from './watt-textarea-field.component';\nexport { WattTextareaNoticeComponent } from './watt-textarea-notice.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@energinet/watt",
4
- "version": "4.3.79",
4
+ "version": "4.3.81",
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
7
7
  ".": {
@@ -1,29 +1,34 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef } from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
3
  import { ControlValueAccessor } from '@angular/forms';
4
4
 
5
- declare class WattSegmentedButtonComponent {
6
- templateRef: _angular_core.Signal<TemplateRef<unknown>>;
7
- value: _angular_core.InputSignal<string | undefined>;
8
- link: _angular_core.InputSignal<string | undefined>;
9
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<WattSegmentedButtonComponent, never>;
10
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WattSegmentedButtonComponent, "watt-segmented-button", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
11
- }
12
-
13
- /**
14
- * Segmented buttons.
15
- */
16
5
  declare class WattSegmentedButtonsComponent implements ControlValueAccessor {
17
- private element;
18
- segmentedButtonElements: _angular_core.Signal<readonly WattSegmentedButtonComponent[]>;
6
+ private readonly element;
7
+ private readonly buttons;
19
8
  selected: _angular_core.ModelSignal<string>;
20
9
  disabled: _angular_core.WritableSignal<boolean>;
10
+ constructor();
11
+ onSegmentSelect(event: Event): void;
12
+ onKeydown(event: KeyboardEvent): void;
21
13
  writeValue(selected: string): void;
22
14
  registerOnChange(fn: (value: string) => void): void;
23
15
  registerOnTouched(fn: (value: boolean) => void): void;
24
16
  setDisabledState?(isDisabled: boolean): void;
25
17
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WattSegmentedButtonsComponent, never>;
26
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WattSegmentedButtonsComponent, "watt-segmented-buttons", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; }, ["segmentedButtonElements"], never, true, never>;
18
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WattSegmentedButtonsComponent, "watt-segmented-buttons", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; }, ["buttons"], ["*"], true, never>;
19
+ }
20
+
21
+ declare class WattSegmentedButtonComponent {
22
+ value: _angular_core.InputSignal<string | undefined>;
23
+ link: _angular_core.InputSignal<string | undefined>;
24
+ selected: _angular_core.WritableSignal<boolean>;
25
+ disabled: _angular_core.WritableSignal<boolean>;
26
+ tabIndex: _angular_core.WritableSignal<number>;
27
+ readonly elementRef: ElementRef<any>;
28
+ focus(): void;
29
+ onClick(): void;
30
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WattSegmentedButtonComponent, never>;
31
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WattSegmentedButtonComponent, "watt-segmented-button", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
27
32
  }
28
33
 
29
34
  /**
@@ -25,7 +25,7 @@ declare class WattTextAreaFieldComponent implements ControlValueAccessor {
25
25
  /** @ignore */
26
26
  setDisabledState(isDisabled: boolean): void;
27
27
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WattTextAreaFieldComponent, never>;
28
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WattTextAreaFieldComponent, "watt-textarea-field", never, { "formControl": { "alias": "formControl"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "small": { "alias": "small"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["watt-textarea-notice", "*", "watt-field-hint", "watt-field-error"], true, never>;
28
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WattTextAreaFieldComponent, "watt-textarea-field", never, { "formControl": { "alias": "formControl"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "small": { "alias": "small"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["watt-textarea-notice", "*", "watt-field-error", "watt-field-hint"], true, never>;
29
29
  }
30
30
 
31
31
  declare class WattTextareaNoticeComponent {