Skip to content

Commit 77fdb13

Browse files
authored
Merge pull request #2614 from Akshat55/toggle-skeleton
feat: Add skeleton state
2 parents c4154ed + 0920b60 commit 77fdb13

File tree

4 files changed

+65
-53
lines changed

4 files changed

+65
-53
lines changed

package-lock.json

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
"@angular/platform-browser-dynamic": "14.3.0",
8282
"@angular/router": "14.3.0",
8383
"@babel/core": "7.9.6",
84-
"@carbon/styles": "1.31.2",
84+
"@carbon/styles": "1.32.0",
8585
"@carbon/themes": "11.20.0",
8686
"@commitlint/cli": "17.0.3",
8787
"@commitlint/config-conventional": "17.0.3",

src/toggle/toggle.component.ts

Lines changed: 51 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -30,50 +30,56 @@ export enum ToggleState {
3030
@Component({
3131
selector: "cds-toggle, ibm-toggle",
3232
template: `
33-
<button
34-
class="cds--toggle__button"
35-
[disabled]="disabled"
36-
[id]="id"
37-
role="switch"
38-
type="button"
39-
[attr.aria-checked]="checked"
40-
(click)="onClick($event)">
41-
</button>
42-
<label
43-
class="cds--toggle__label"
44-
[for]="id">
45-
<span
46-
class="cds--toggle__label-text"
47-
[ngClass]="{
48-
'cds--visually-hidden': hideLabel
49-
}">
50-
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
51-
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
52-
</span>
53-
<div
54-
class="cds--toggle__appearance"
55-
[ngClass]="{
56-
'cds--toggle__appearance--sm': size === 'sm'
57-
}">
33+
<ng-container *ngIf="!skeleton; else skeletonTemplate;">
34+
<button
35+
class="cds--toggle__button"
36+
[disabled]="disabled"
37+
[id]="id"
38+
role="switch"
39+
type="button"
40+
[attr.aria-checked]="checked"
41+
(click)="onClick($event)">
42+
</button>
43+
<label
44+
class="cds--toggle__label"
45+
[for]="id">
46+
<span
47+
class="cds--toggle__label-text"
48+
[ngClass]="{
49+
'cds--visually-hidden': hideLabel
50+
}">
51+
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
52+
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
53+
</span>
5854
<div
59-
class="cds--toggle__switch"
55+
class="cds--toggle__appearance"
6056
[ngClass]="{
61-
'cds--toggle__switch--checked': checked
57+
'cds--toggle__appearance--sm': size === 'sm'
6258
}">
63-
<svg
64-
*ngIf="size === 'sm'"
65-
class='cds--toggle__check'
66-
width="6px"
67-
height="5px"
68-
viewBox="0 0 6 5">
69-
<path d="M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z" />
70-
</svg>
59+
<div
60+
class="cds--toggle__switch"
61+
[ngClass]="{
62+
'cds--toggle__switch--checked': checked
63+
}">
64+
<svg
65+
*ngIf="size === 'sm'"
66+
class='cds--toggle__check'
67+
width="6px"
68+
height="5px"
69+
viewBox="0 0 6 5">
70+
<path d="M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z" />
71+
</svg>
72+
</div>
73+
<span class="cds--toggle__text">
74+
{{(hideLabel ? label : (getCheckedText() | async))}}
75+
</span>
7176
</div>
72-
<span class="cds--toggle__text">
73-
{{(hideLabel ? label : (getCheckedText() | async))}}
74-
</span>
75-
</div>
76-
</label>
77+
</label>
78+
</ng-container>
79+
<ng-template #skeletonTemplate>
80+
<div class="cds--toggle__skeleton-circle"></div>
81+
<div class="cds--toggle__skeleton-rectangle"></div>
82+
</ng-template>
7783
`,
7884
providers: [
7985
{
@@ -125,12 +131,16 @@ export class Toggle extends Checkbox {
125131
*/
126132
@Input() hideLabel = false;
127133

134+
@HostBinding("class.cds--toggle--skeleton") @Input() skeleton = false;
135+
128136
@HostBinding("class.cds--toggle") toggleClass = true;
129137
@HostBinding("class.cds--toggle--disabled") get disabledClass () {
130138
return this.disabled;
131139
}
132140

133-
@HostBinding("class.cds--form-item") formItem = true;
141+
@HostBinding("class.cds--form-item") get formItem() {
142+
return !this.skeleton;
143+
}
134144

135145
/**
136146
* The unique id allocated to the `Toggle`.

src/toggle/toggle.stories.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const Template: Story<Toggle> = (args) => ({
1919
props: args,
2020
template: `
2121
<cds-toggle
22+
[skeleton]="skeleton"
2223
[label]="label"
2324
[hideLabel]="hideLabel"
2425
[onText]="onText"
@@ -37,7 +38,8 @@ Basic.args = {
3738
hideLabel: false,
3839
label: "Toggle element label",
3940
onText: "On",
40-
offText: "Off"
41+
offText: "Off",
42+
skeleton: false
4143
};
4244
Basic.argTypes = {
4345
onChange: {

0 commit comments

Comments
 (0)