@@ -31,58 +31,89 @@ import { TextArea } from "./text-area.directive";
3131@Component ( {
3232 selector : "cds-textarea-label, ibm-textarea-label" ,
3333 template : `
34- <label
35- [for]="labelInputID"
36- [attr.aria-label]="ariaLabel"
37- class="cds--label"
38- [ngClass]="{
39- 'cds--label--disabled': disabled,
40- 'cds--skeleton': skeleton
41- }">
42- <ng-template *ngIf="labelTemplate; else labelContent" [ngTemplateOutlet]="labelTemplate"></ng-template>
43- <ng-template #labelContent>
44- <ng-content></ng-content>
45- </ng-template>
46- </label>
47- <div
48- class="cds--text-area__wrapper"
49- [ngClass]="{
50- 'cds--text-input__field-wrapper--warning': warn
51- }"
52- [attr.data-invalid]="(invalid ? true : null)"
53- #wrapper>
54- <svg
55- *ngIf="invalid"
56- cdsIcon="warning--filled"
57- size="16"
58- class="cds--text-area__invalid-icon">
59- </svg>
60- <svg
61- *ngIf="!invalid && warn"
62- cdsIcon="warning--alt--filled"
63- size="16"
64- class="cds--text-input__invalid-icon cds--text-input__invalid-icon--warning">
65- </svg>
66- <ng-template *ngIf="textAreaTemplate; else textAreaContent" [ngTemplateOutlet]="textAreaTemplate"></ng-template>
67- <ng-template #textAreaContent>
68- <ng-content select="[cdsTextArea],[ibmTextArea],textarea"></ng-content>
69- </ng-template>
70- </div>
71- <div
72- *ngIf="!skeleton && helperText && !invalid && !warn"
73- class="cds--form__helper-text"
74- [ngClass]="{'cds--form__helper-text--disabled': disabled}">
75- <ng-container *ngIf="!isTemplate(helperText)">{{helperText}}</ng-container>
76- <ng-template *ngIf="isTemplate(helperText)" [ngTemplateOutlet]="helperText"></ng-template>
77- </div>
78- <div *ngIf="invalid" class="cds--form-requirement">
79- <ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container>
80- <ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template>
81- </div>
82- <div *ngIf="!invalid && warn" class="cds--form-requirement">
83- <ng-container *ngIf="!isTemplate(warnText)">{{warnText}}</ng-container>
84- <ng-template *ngIf="isTemplate(warnText)" [ngTemplateOutlet]="warnText"></ng-template>
85- </div>
34+ <ng-container *ngIf="skeleton">
35+ <span class="cds--label cds--skeleton"></span>
36+ <div class="cds--text-area cds--skeleton"></div>
37+ </ng-container>
38+ <ng-container *ngIf="!skeleton">
39+ <div class="cds--text-area__label-wrapper">
40+ <label
41+ [for]="labelInputID"
42+ [attr.aria-label]="ariaLabel"
43+ class="cds--label"
44+ [ngClass]="{
45+ 'cds--label--disabled': disabled
46+ }">
47+ <ng-template *ngIf="labelTemplate; else labelContent" [ngTemplateOutlet]="labelTemplate"></ng-template>
48+ <ng-template #labelContent>
49+ <ng-content></ng-content>
50+ </ng-template>
51+ </label>
52+ </div>
53+ <div
54+ class="cds--text-area__wrapper"
55+ [ngClass]="{
56+ 'cds--text-area__wrapper--warn': warn
57+ }"
58+ [attr.data-invalid]="(invalid ? true : null)"
59+ #wrapper>
60+ <svg
61+ *ngIf="!fluid && invalid"
62+ cdsIcon="warning--filled"
63+ size="16"
64+ class="cds--text-area__invalid-icon">
65+ </svg>
66+ <svg
67+ *ngIf="!fluid && !invalid && warn"
68+ cdsIcon="warning--alt--filled"
69+ size="16"
70+ class="cds--text-area__invalid-icon cds--text-area__invalid-icon--warning">
71+ </svg>
72+ <ng-template *ngIf="textAreaTemplate; else textAreaContent" [ngTemplateOutlet]="textAreaTemplate"></ng-template>
73+ <ng-template #textAreaContent>
74+ <ng-content select="[cdsTextArea],[ibmTextArea],textarea"></ng-content>
75+ </ng-template>
76+
77+ <ng-container *ngIf="fluid">
78+ <hr class="cds--text-area__divider" />
79+ <div *ngIf="invalid" class="cds--form-requirement">
80+ <ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container>
81+ <ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template>
82+ <svg
83+ cdsIcon="warning--filled"
84+ size="16"
85+ class="cds--text-area__invalid-icon">
86+ </svg>
87+ </div>
88+ <div *ngIf="!invalid && warn" class="cds--form-requirement">
89+ <ng-container *ngIf="!isTemplate(warnText)">{{warnText}}</ng-container>
90+ <ng-template *ngIf="isTemplate(warnText)" [ngTemplateOutlet]="warnText"></ng-template>
91+ <svg
92+ cdsIcon="warning--alt--filled"
93+ size="16"
94+ class="cds--text-area__invalid-icon cds--text-area__invalid-icon--warning">
95+ </svg>
96+ </div>
97+ </ng-container>
98+ </div>
99+ <ng-container *ngIf="!fluid">
100+ <div
101+ *ngIf="helperText && !invalid && !warn"
102+ class="cds--form__helper-text"
103+ [ngClass]="{'cds--form__helper-text--disabled': disabled}">
104+ <ng-container *ngIf="!isTemplate(helperText)">{{helperText}}</ng-container>
105+ <ng-template *ngIf="isTemplate(helperText)" [ngTemplateOutlet]="helperText"></ng-template>
106+ </div>
107+ <div *ngIf="invalid" class="cds--form-requirement">
108+ <ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container>
109+ <ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template>
110+ </div>
111+ <div *ngIf="!invalid && warn" class="cds--form-requirement">
112+ <ng-container *ngIf="!isTemplate(warnText)">{{warnText}}</ng-container>
113+ <ng-template *ngIf="isTemplate(warnText)" [ngTemplateOutlet]="warnText"></ng-template>
114+ </div>
115+ </ng-container>
116+ </ng-container>
86117 `
87118} )
88119export class TextareaLabelComponent implements AfterViewInit {
@@ -136,6 +167,11 @@ export class TextareaLabelComponent implements AfterViewInit {
136167 */
137168 @Input ( ) ariaLabel : string ;
138169
170+ /**
171+ * Experimental: enable fluid state
172+ */
173+ @Input ( ) fluid = false ;
174+
139175 // @ts -ignore
140176 @ViewChild ( "wrapper" , { static : false } ) wrapper : ElementRef < HTMLDivElement > ;
141177
@@ -148,6 +184,14 @@ export class TextareaLabelComponent implements AfterViewInit {
148184 return this . wrapper ?. nativeElement . querySelector ( "textarea" ) ?. readOnly ?? false ;
149185 }
150186
187+ @HostBinding ( "class.cds--text-area--fluid" ) get fluidClass ( ) {
188+ return this . fluid && ! this . skeleton ;
189+ }
190+
191+ @HostBinding ( "class.cds--text-area--fluid__skeleton" ) get fluidSkeletonClass ( ) {
192+ return this . fluid && this . skeleton ;
193+ }
194+
151195 /**
152196 * Creates an instance of Label.
153197 */
0 commit comments