Skip to content

Commit 674c32a

Browse files
Merge pull request #117 from macandcheese/update/radiogroup
Adds scale prop to radio group, updates style
2 parents 7721d13 + 533f64f commit 674c32a

File tree

6 files changed

+125
-45
lines changed

6 files changed

+125
-45
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
88
### [Unreleased][HEAD]
99

1010
### Added
11+
- adds scale prop to `calcite-radio-group`
12+
- updates style of `calcite-radio-group`
1113
- adds transparent appearance style for `calcite-button`
1214
- adds `iconposition` prop to `calcite-button`
1315
- updates dark theme style for `calcite-button`

src/components/calcite-radio-group-item/calcite-radio-group-item.scss

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
background-color: var(--calcite-radio-group-color);
44
color: var(--calcite-radio-group-text-color);
55
cursor: pointer;
6-
padding: 0.5rem 1rem;
6+
padding: var(--calcite-radio-group-padding);
77
line-height: 1.25;
88
margin: 0.25rem -1px 0 0px;
99
border: 1px solid var(--calcite-radio-group-border-color);
@@ -12,6 +12,18 @@
1212
cursor: pointer;
1313
}
1414

15+
:host([scale="s"]) {
16+
@include font-size(-3);
17+
}
18+
19+
:host([scale="m"]) {
20+
@include font-size(-1);
21+
}
22+
23+
:host([scale="l"]) {
24+
@include font-size(0);
25+
}
26+
1527
:host(:hover) {
1628
background-color: var(--calcite-radio-group-color-hover);
1729
}

src/components/calcite-radio-group-item/calcite-radio-group-item.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
Host,
99
Watch
1010
} from "@stencil/core";
11-
11+
import { getElementProp } from "../../utils/dom";
1212
@Component({
1313
tag: "calcite-radio-group-item",
1414
styleUrl: "calcite-radio-group-item.scss",
@@ -72,7 +72,9 @@ export class CalciteRadioGroupItem {
7272
this.inputProxy = inputProxy;
7373

7474
const futureSlotted = Array.from(this.el.childNodes);
75-
this.hasLabel = futureSlotted.some((child) => child.nodeType === Node.TEXT_NODE);
75+
this.hasLabel = futureSlotted.some(
76+
child => child.nodeType === Node.TEXT_NODE
77+
);
7678
}
7779

7880
disconnectedCallback() {
@@ -81,9 +83,9 @@ export class CalciteRadioGroupItem {
8183

8284
render() {
8385
const { checked, value } = this;
84-
86+
const scale = getElementProp(this.el, "scale", "m");
8587
return (
86-
<Host role="radio" aria-checked={checked ? "true" : "false"}>
88+
<Host role="radio" aria-checked={checked ? "true" : "false"} scale={scale}>
8789
<label>
8890
{this.hasLabel ? <slot /> : value}
8991
<slot name="input" />
@@ -111,7 +113,9 @@ export class CalciteRadioGroupItem {
111113

112114
private inputProxy: HTMLInputElement;
113115

114-
private mutationObserver = new MutationObserver(() => this.syncFromExternalInput());
116+
private mutationObserver = new MutationObserver(() =>
117+
this.syncFromExternalInput()
118+
);
115119

116120
//--------------------------------------------------------------------------
117121
//
@@ -124,7 +128,7 @@ export class CalciteRadioGroupItem {
124128
this.value = this.inputProxy.value;
125129
this.checked = this.inputProxy.checked;
126130
}
127-
};
131+
}
128132

129133
private syncToExternalInput(): void {
130134
if (!this.inputProxy) {

src/components/calcite-radio-group/calcite-radio-group.scss

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
11
:host {
22
display: flex;
3-
43
--calcite-radio-group-color: #{$blk-000};
5-
--calcite-radio-group-border-color: #{$blk-130};
4+
--calcite-radio-group-border-color: #{$blk-040};
65
--calcite-radio-group-color-active: #{$ui-blue};
76
--calcite-radio-group-text-color: #{$blk-240};
87
--calcite-radio-group-text-color-active: #{$blk-000};
98
--calcite-radio-group-color-hover: #{$blk-005};
9+
--calcite-radio-group-padding: 0.5rem 1rem;
10+
}
11+
12+
:host([scale="s"]) {
13+
--calcite-radio-group-padding: 0.25rem 0.75rem;
14+
}
1015

11-
@include font-size(-1);
16+
:host([scale="m"]) {
17+
--calcite-radio-group-padding: 0.4rem 1rem;
18+
}
19+
20+
:host([scale="l"]) {
21+
--calcite-radio-group-padding: 0.5rem 1.5rem;
1222
}
1323

1424
:host([theme="dark"]) {
1525
--calcite-radio-group-color: #{$blk-200};
16-
--calcite-radio-group-border-color: #{$blk-210};
26+
--calcite-radio-group-border-color: #{$blk-190};
1727
--calcite-radio-group-color-active: #{$v-bb-160};
1828
--calcite-radio-group-text-color: #{$blk-000};
1929
--calcite-radio-group-text-color-active: #{$blk-000};
@@ -24,4 +34,3 @@
2434
::slotted(calcite-radio-group-item:focus) {
2535
z-index: 0;
2636
}
27-

src/components/calcite-radio-group/calcite-radio-group.tsx

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,9 @@ export class CalciteRadioGroup {
5959
selectedItem: HTMLCalciteRadioGroupItemElement;
6060

6161
@Watch("selectedItem")
62-
protected handleSelectedItemChange<T extends HTMLCalciteRadioGroupItemElement>(
63-
newItem: T,
64-
oldItem: T
65-
) {
62+
protected handleSelectedItemChange<
63+
T extends HTMLCalciteRadioGroupItemElement
64+
>(newItem: T, oldItem: T) {
6665
if (newItem === oldItem) {
6766
return;
6867
}
@@ -87,13 +86,11 @@ export class CalciteRadioGroup {
8786
}
8887
}
8988

90-
/**
91-
* The component's theme.
92-
*/
93-
@Prop({
94-
reflect: true
95-
})
96-
theme: "light" | "dark" = "light";
89+
/** The component's theme. */
90+
@Prop({ reflect: true }) theme: "light" | "dark" = "light";
91+
92+
/** The scale of the button */
93+
@Prop({ reflect: true }) scale: "s" | "m" | "l" = "m";
9794

9895
//--------------------------------------------------------------------------
9996
//
@@ -102,6 +99,14 @@ export class CalciteRadioGroup {
10299
//--------------------------------------------------------------------------
103100

104101
connectedCallback() {
102+
103+
// prop validations
104+
let scale = ["s", "m", "l"];
105+
if (!scale.includes(this.scale)) this.scale = "m";
106+
107+
let theme = ["dark", "light"];
108+
if (!theme.includes(this.theme)) this.theme = "light";
109+
105110
const items = this.getItems();
106111
let lastChecked: HTMLCalciteRadioGroupItemElement;
107112

@@ -179,9 +184,9 @@ export class CalciteRadioGroup {
179184
const { el, selectedItem } = this;
180185
const dir = getElementDir(el);
181186
const moveBackwardKey =
182-
(dir === "rtl"
183-
? key === navigationKeys.right
184-
: key === navigationKeys.left) || key === navigationKeys.up;
187+
(dir === "rtl"
188+
? key === navigationKeys.right
189+
: key === navigationKeys.left) || key === navigationKeys.up;
185190
const items = this.getItems();
186191

187192
let selectedIndex = -1;
@@ -194,23 +199,23 @@ export class CalciteRadioGroup {
194199

195200
if (moveBackwardKey) {
196201
const previous =
197-
selectedIndex === -1 || selectedIndex === 0
198-
? items.item(items.length - 1)
199-
: items.item(selectedIndex - 1);
202+
selectedIndex === -1 || selectedIndex === 0
203+
? items.item(items.length - 1)
204+
: items.item(selectedIndex - 1);
200205
this.selectItem(previous);
201206
return;
202207
}
203208

204209
const moveForwardKey =
205-
(dir === "rtl"
206-
? key === navigationKeys.left
207-
: key === navigationKeys.right) || key === navigationKeys.down;
210+
(dir === "rtl"
211+
? key === navigationKeys.left
212+
: key === navigationKeys.right) || key === navigationKeys.down;
208213

209214
if (moveForwardKey) {
210215
const next =
211-
selectedIndex === -1
212-
? items.item(1)
213-
: items.item(selectedIndex + 1) || items.item(0);
216+
selectedIndex === -1
217+
? items.item(1)
218+
: items.item(selectedIndex + 1) || items.item(0);
214219
this.selectItem(next);
215220
return;
216221
}

src/index.html

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<style>
1010
.demo-background-dark {
11-
background: #2b2b2b;
11+
background: #202020;
1212
color: white;
1313
padding: 1rem;
1414
}
@@ -517,6 +517,30 @@ <h3 class="leader-1">Simple</h3>
517517
<calcite-radio-group-item value="vue">Vue</calcite-radio-group-item>
518518
</calcite-radio-group>
519519

520+
<h3 class="leader-1">Scale s</h3>
521+
522+
<calcite-radio-group scale="s">
523+
<calcite-radio-group-item value="react" checked>React</calcite-radio-group-item>
524+
<calcite-radio-group-item value="ember">Ember</calcite-radio-group-item>
525+
<calcite-radio-group-item value="angular">Angular</calcite-radio-group-item>
526+
</calcite-radio-group>
527+
528+
<h3 class="leader-1">Scale m</h3>
529+
530+
<calcite-radio-group scale="m">
531+
<calcite-radio-group-item value="react" checked>React</calcite-radio-group-item>
532+
<calcite-radio-group-item value="ember">Ember</calcite-radio-group-item>
533+
<calcite-radio-group-item value="angular">Angular</calcite-radio-group-item>
534+
</calcite-radio-group>
535+
536+
<h3 class="leader-1">Scale l</h3>
537+
538+
<calcite-radio-group scale="l">
539+
<calcite-radio-group-item value="react" checked>React</calcite-radio-group-item>
540+
<calcite-radio-group-item value="ember">Ember</calcite-radio-group-item>
541+
<calcite-radio-group-item value="angular">Angular</calcite-radio-group-item>
542+
</calcite-radio-group>
543+
520544
<h3 class="leader-1">With labels</h3>
521545

522546
<calcite-radio-group>
@@ -548,15 +572,38 @@ <h3 class="leader-1">Only one selected value (last wins)</h3>
548572
<calcite-radio-group-item value="2" checked></calcite-radio-group-item>
549573
<calcite-radio-group-item value="3" checked></calcite-radio-group-item>
550574
</calcite-radio-group>
551-
552-
<h3 class="leader-1">Dark theme</h3>
553-
554-
<calcite-radio-group theme="dark">
555-
<calcite-radio-group-item value="1" checked></calcite-radio-group-item>
556-
<calcite-radio-group-item value="2" checked></calcite-radio-group-item>
557-
<calcite-radio-group-item value="3" checked></calcite-radio-group-item>
558-
</calcite-radio-group>
559-
575+
<br />
576+
<br />
577+
<div class="demo-background-dark">
578+
<h3 class="leader-1">Dark theme</h3>
579+
580+
<calcite-radio-group theme="dark">
581+
<calcite-radio-group-item value="1" checked></calcite-radio-group-item>
582+
<calcite-radio-group-item value="2" checked></calcite-radio-group-item>
583+
<calcite-radio-group-item value="3" checked></calcite-radio-group-item>
584+
</calcite-radio-group>
585+
586+
<h3 class="leader-1">Scale s</h3>
587+
<calcite-radio-group theme="dark" scale="s">
588+
<calcite-radio-group-item value="react" checked>React</calcite-radio-group-item>
589+
<calcite-radio-group-item value="ember">Ember</calcite-radio-group-item>
590+
<calcite-radio-group-item value="angular">Angular</calcite-radio-group-item>
591+
</calcite-radio-group>
592+
593+
<h3 class="leader-1">Scale m</h3>
594+
<calcite-radio-group theme="dark" scale="m">
595+
<calcite-radio-group-item value="react" checked>React</calcite-radio-group-item>
596+
<calcite-radio-group-item value="ember">Ember</calcite-radio-group-item>
597+
<calcite-radio-group-item value="angular">Angular</calcite-radio-group-item>
598+
</calcite-radio-group>
599+
600+
<h3 class="leader-1">Scale l</h3>
601+
<calcite-radio-group theme="dark" scale="l">
602+
<calcite-radio-group-item value="react" checked>React</calcite-radio-group-item>
603+
<calcite-radio-group-item value="ember">Ember</calcite-radio-group-item>
604+
<calcite-radio-group-item value="angular">Angular</calcite-radio-group-item>
605+
</calcite-radio-group>
606+
</div>
560607
<h3 class="leader-1">RTL</h3>
561608

562609
<calcite-radio-group>
@@ -610,6 +657,7 @@ <h3>"Precise" handle</h3>
610657
<h3>"Precise" Range</h3>
611658
<calcite-slider min="0" max="100" min-value="50" max-value="85" step="1" min-label="Temperature range (lower)"
612659
max-label="Temperature range (upper)" precise></calcite-slider>
660+
613661
<div class="demo-background-dark">
614662
<h3>Dark Theme</h3>
615663
<calcite-slider min="0" max="100" min-value="50" max-value="85" step="1" min-label="Temperature range (lower)"

0 commit comments

Comments
 (0)