Skip to content

Commit

Permalink
refactor(ui5-radiobutton): set compact via CSS (#1139)
Browse files Browse the repository at this point in the history
Reuse same SVG mark up for both "compact and "cozy" content densities and apply corresponding differences in size via CSS only and remove all current JS calculations.
  • Loading branch information
ilhan007 authored Jan 16, 2020
1 parent 47eff00 commit 9fbdb11
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 38 deletions.
4 changes: 2 additions & 2 deletions packages/main/src/RadioButton.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@

<div class='ui5-radio-inner {{classes.inner}}'>
<svg class="ui5-radio-svg" focusable="false" aria-hidden="true">
<circle class="ui5-radio-svg-outer" cx="{{circle.x}}" cy="{{circle.y}}" r="{{circle.rOuter}}" stroke-width="{{strokeWidth}}" fill="none" />
<circle class="ui5-radio-svg-inner" cx="{{circle.x}}" cy="{{circle.y}}" r="{{circle.rInner}}" stroke-width="10" />
<circle class="ui5-radio-svg-outer" cx="50%" cy="50%" r="50%" />
<circle class="ui5-radio-svg-inner" cx="50%" cy="50%" r="22%" />
</svg>
<input type='radio' ?checked="{{selected}}" ?readonly="{{readonly}}" ?disabled="{{disabled}}" name="{{name}}" data-sap-no-tab-ref/>
</div>
Expand Down
20 changes: 0 additions & 20 deletions packages/main/src/RadioButton.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
import { getCompactSize } from "@ui5/webcomponents-base/dist/config/CompactSize.js";
import { getRTL } from "@ui5/webcomponents-base/dist/config/RTL.js";
import { getFeature } from "@ui5/webcomponents-base/dist/FeaturesRegistry.js";
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
Expand Down Expand Up @@ -167,21 +166,6 @@ const metadata = {
invalidateOnContentDensityChange: true,
};

const SVGConfig = {
"compact": {
x: 16,
y: 16,
rInner: 3,
rOuter: 8,
},
"default": {
x: 22,
y: 22,
rInner: 5,
rOuter: 11,
},
};

/**
* @class
*
Expand Down Expand Up @@ -404,10 +388,6 @@ class RadioButton extends UI5Element {
return this.valueState === "None" ? "1" : "2";
}

get circle() {
return getCompactSize() ? SVGConfig.compact : SVGConfig.default;
}

get rtl() {
return getRTL() ? "rtl" : undefined;
}
Expand Down
56 changes: 40 additions & 16 deletions packages/main/src/themes/RadioButton.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
}

:host {
min-width: var(--_ui5_radiobutton_min_width);
max-width: 100%;
text-overflow: ellipsis;
overflow: hidden;
Expand Down Expand Up @@ -62,22 +63,27 @@
fill: var(--sapField_ReadOnly_Background);
stroke: var(--sapField_ReadOnly_BorderColor);
}
/* State */
:host([value-state="Error"]) .ui5-radio-svg-outer,
:host([value-state="Warning"]) .ui5-radio-svg-outer {
stroke-width: 2;
}

/* Error state */
:host([value-state="Error"][selected]) .ui5-radio-root .ui5-radio-svg-inner {
:host([value-state="Error"][selected]) .ui5-radio-svg-inner {
fill: var(--_ui5_radiobutton_selected_error_fill);
}
:host([value-state="Error"]) .ui5-radio-root .ui5-radio-svg-outer,
:host([value-state="Error"]) .ui5-radio-svg-outer,
:host([value-state="Error"]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable:hover .ui5-radio-svg-outer {
stroke: var(--sapField_InvalidColor);
fill: var(--sapField_InvalidBackground);
}

/* Warning state */
:host([value-state="Warning"][selected]) .ui5-radio-root .ui5-radio-svg-inner {
:host([value-state="Warning"][selected]) .ui5-radio-svg-inner {
fill: var(--_ui5_radiobutton_selected_warning_fill);
}
:host([value-state="Warning"]) .ui5-radio-root .ui5-radio-svg-outer,
:host([value-state="Warning"]) .ui5-radio-svg-outer,
:host([value-state="Warning"]) .ui5-radio-root:hover .ui5-radio-inner.ui5-radio-inner--hoverable:hover .ui5-radio-svg-outer {
stroke: var(--sapField_WarningColor);
fill: var(--sapField_WarningBackground);
Expand All @@ -99,22 +105,29 @@

/* Inner */
.ui5-radio-inner {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
width: 2.75rem;
height: 2.75rem;
font-size: 1rem; /* override font size of the message dialog */
pointer-events: none;
vertical-align: top;
display: inline-block;
}

.ui5-radio-inner:focus {
outline: none;
}

.ui5-radio-inner input {
margin: 0; /* FF puts margin */
-webkit-appearance: none;
visibility: hidden;
width: 0;
left: 0;
position: absolute;
font-size: inherit;
margin: 0; /* FF puts margin */
}

/* Label */
Expand Down Expand Up @@ -143,21 +156,32 @@ ui5-label.ui5-radio-label {

/* SVG */
.ui5-radio-svg {
height: 2.75rem;
width: 2.75rem;
height: 1.375rem;
width: 1.375rem;
overflow: visible;
pointer-events: none;
}

.ui5-radio-svg .ui5-radio-svg-outer {
.ui5-radio-svg-outer {
fill: var(--sapField_Background);
stroke: currentColor;
stroke-width: 1;
}

.ui5-radio-svg .ui5-radio-svg-inner {
.ui5-radio-svg-inner {
fill: none;
}

.ui5-radio-svg-outer,
.ui5-radio-svg-inner {
flex-shrink: 0;
}

/* Compact size */
:host([data-ui5-compact-size]) {
min-width: var(--_ui5_radiobutton_min_width_compact);
}

:host([data-ui5-compact-size]) .ui5-radio-root {
height : 2rem;
}
Expand All @@ -166,6 +190,11 @@ ui5-label.ui5-radio-label {
height: auto;
}

:host([data-ui5-compact-size]) .ui5-radio-svg {
height: 1rem;
width: 1rem;
}

:host([data-ui5-compact-size][wrap][text]) ui5-label.ui5-radio-label {
padding-top: .5rem;
padding-bottom: .5rem;
Expand All @@ -190,11 +219,6 @@ ui5-label.ui5-radio-label {
justify-content: center;
}

:host([data-ui5-compact-size]) .ui5-radio-root .ui5-radio-inner .ui5-radio-svg {
height: 2rem;
width: 2rem;
}

:host([data-ui5-compact-size]) .ui5-radio-root ui5-label.ui5-radio-label {
width: calc(100% - 2rem + 1px);
}
Expand All @@ -214,4 +238,4 @@ ui5-label.ui5-radio-label {
/* ListItem Context */
:host(.ui5-li-singlesel-radiobtn) .ui5-radio-root .ui5-radio-inner .ui5-radio-svg-outer {
fill: var(--sapList_Background);
}
}
2 changes: 2 additions & 0 deletions packages/main/src/themes/base/RadioButton-parameters.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
:root {
--_ui5_radiobutton_min_width: 2.75rem;
--_ui5_radiobutton_min_width_compact: 2rem;
--_ui5_radiobutton_hover_fill: var(--sapField_Hover_Background);
--_ui5_radiobutton_border_width: 1px;
--_ui5_radiobutton_selected_fill: var(--sapSelectedColor);
Expand Down

0 comments on commit 9fbdb11

Please sign in to comment.