diff --git a/common/changes/phkuo-semanticInputs_2017-04-21-01-53.json b/common/changes/phkuo-semanticInputs_2017-04-21-01-53.json new file mode 100644 index 0000000000000..66f9991e05ad4 --- /dev/null +++ b/common/changes/phkuo-semanticInputs_2017-04-21-01-53.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "office-ui-fabric-react", + "comment": "Lay some groundwork for converting to semantic slots, starting with input text fields.", + "type": "patch" + } + ], + "email": "phkuo@microsoft.com" +} \ No newline at end of file diff --git a/packages/office-ui-fabric-react/src/components/ChoiceGroup/ChoiceGroup.scss b/packages/office-ui-fabric-react/src/components/ChoiceGroup/ChoiceGroup.scss index 7830f0509cbf9..39bd65864ee7d 100644 --- a/packages/office-ui-fabric-react/src/components/ChoiceGroup/ChoiceGroup.scss +++ b/packages/office-ui-fabric-react/src/components/ChoiceGroup/ChoiceGroup.scss @@ -3,6 +3,27 @@ // Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE in the project root for license information. + +// -------------------------------------------------- +// ChoiceField semantic slots + +$radioButton-background-color: $controlBackgroundColor; + +$radioButton-text-color: $controlForegroundColor; +$radioButton-text-hover-color: $controlForegroundHoverColor; + +$radioButton-dot-color: $controlBackgroundSelectedColor; + +$radioButton-border-color: $controlBorderUnselectedColor; +$radioButton-border-hover-color: $controlBorderUnselectedHoverColor; +$radioButton-border-selected-color: $radioButton-dot-color; +$radioButton-border-selected-hover-color: $controlBackgroundSelectedHoverColor; + +$radioButton-text-disabled-color: $disabledTextColor; +$radioButton-background-unselected-disabled-color: $disabledTextColor; +$radioButton-dot-disabled-color: $radioButton-background-unselected-disabled-color; +$radioButton-border-disabled-color: $radioButton-background-unselected-disabled-color; + // // -------------------------------------------------- // ChoiceField styles @@ -23,7 +44,7 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); .choiceField { box-sizing: border-box; - color: $ms-color-neutralPrimary; + color: $radioButton-text-color; font-family: $ms-font-family-base; font-size: $ms-font-size-m; font-weight: $ms-font-weight-regular; @@ -46,11 +67,12 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); top: 8px } -// The choiceField container +// The circle .field::before { content: ''; display: inline-block; - border: 1px solid $ms-color-neutralTertiary; + background-color: $radioButton-background-color; + border: 1px solid $radioButton-border-color; width: $ms-choiceField-field-size; height: $ms-choiceField-field-size; font-weight: normal; @@ -62,7 +84,7 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); border-radius: 50%; } -// The circle +// The dot .field::after { content: ''; width: 0; @@ -96,45 +118,22 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); vertical-align: top; user-select: none; - &:hover { - &::before { - border-color: $ms-color-neutralSecondaryAlt; - } - - :global(.ms-Label) { - color: $ms-color-black; - } - } - + &:hover, &:focus { &::before { - border-color: $ms-color-neutralSecondaryAlt; - } - - &.fieldIsDisabled::before { - border-color: $ms-color-neutralTertiaryAlt; - } - - &.fieldIsChecked::before { - border-color: $ms-color-themeDarkAlt; - } - } - &:active { - &::before { - border-color: $ms-color-neutralSecondaryAlt; + border-color: $radioButton-border-hover-color; } :global(.ms-Label) { - color: $ms-color-black; + color: $radioButton-text-hover-color; } } //== State: A choiceField is checked // &.fieldIsChecked { - &::before { - border: 2px solid $ms-color-themePrimary; - background-color: transparent; + &::before { // the circle + border: 2px solid $radioButton-border-selected-color; @media screen and (-ms-high-contrast: active) { border-color: $ms-color-contrastBlackSelected; @@ -145,8 +144,8 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); } } - &::after { - background-color: $ms-color-themePrimary; + &::after { // the dot + background-color: $radioButton-dot-color; top: 5px; @include left(5px); width: 10px; @@ -164,7 +163,7 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); &:hover, &:focus { &::before { - border-color: $ms-color-themeDarkAlt; + border-color: $radioButton-border-selected-hover-color; } } } @@ -174,17 +173,9 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); &.fieldIsDisabled { cursor: default; - &:hover, - &:focus { - &::before { - border-color: $ms-color-neutralTertiaryAlt; - } - } - &::before { - background-color: $ms-color-neutralTertiaryAlt; - border-color: $ms-color-neutralTertiaryAlt; - color: $ms-color-neutralTertiaryAlt; + background-color: $radioButton-background-unselected-disabled-color; + border-color: $radioButton-border-disabled-color; @media screen and (-ms-high-contrast: active) { border-color: $ms-color-contrastBlackDisabled; @@ -196,7 +187,7 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); } :global(.ms-Label) { - color: $ms-color-neutralTertiary; + color: $radioButton-text-disabled-color; @media screen and (-ms-high-contrast: active) { color: $ms-color-contrastBlackDisabled; @@ -208,19 +199,13 @@ $ms-choiceField-transition-timing: cubic-bezier(.4, 0, .23, 1); } } - //== State: A choiceField in focus - // - &.choiceFieldIsInFocus { + &.fieldIsChecked.fieldIsDisabled { &::before { - border-color: $ms-color-neutralSecondaryAlt; + background-color: $radioButton-background-color; + border-color: $radioButton-border-disabled-color; } - - &.fieldIsDisabled::before { - border-color: $ms-color-neutralTertiaryAlt; - } - - &.fieldIsChecked::before { - border-color: $ms-color-themeDarkAlt; + &::after { + background-color: $radioButton-dot-disabled-color; } } } diff --git a/packages/office-ui-fabric-react/src/components/ChoiceGroup/examples/ChoiceGroup.Basic.Example.tsx b/packages/office-ui-fabric-react/src/components/ChoiceGroup/examples/ChoiceGroup.Basic.Example.tsx index d6dc5ecc1e4b3..663c31f7e44c1 100644 --- a/packages/office-ui-fabric-react/src/components/ChoiceGroup/examples/ChoiceGroup.Basic.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/ChoiceGroup/examples/ChoiceGroup.Basic.Example.tsx @@ -20,32 +20,52 @@ export class ChoiceGroupBasicExample extends React.Component +
+ + +
); } diff --git a/packages/office-ui-fabric-react/src/components/TextField/TextField.scss b/packages/office-ui-fabric-react/src/components/TextField/TextField.scss index 0185333fc90f8..7ebdd6a4f176d 100644 --- a/packages/office-ui-fabric-react/src/components/TextField/TextField.scss +++ b/packages/office-ui-fabric-react/src/components/TextField/TextField.scss @@ -8,86 +8,62 @@ // Single line (input) and multiline (textarea) form field styles @import '../Label/LabelMixins.scss'; +// component slots +$field-background-color: $fieldBackgroundColor; +$field-background-disabled-color: $disabledBackgroundColor; + +$field-border-color: $fieldBorderColor; +$field-border-disabled-color: $disabledBackgroundColor; +$field-border-hover-color: $fieldBorderHoverColor; +$field-border-focus-color: $fieldBorderFocusColor; +$field-border-error-color: $errorTextColor; + +$field-text-color: $fieldTextColor; +$field-text-disabled-color: $disabledTextColor; + +$field-placeholder-color: $fieldPlaceholderColor; +$field-placeholder-disabled-color: $disabledSubtextColor; + +$field-description-color: $bodySubtextColor; +$field-error-color: $errorTextColor; + +// the box containing the label and input field .root { @include ms-baseFont; @include ms-u-normalize; - color: $ms-color-neutralPrimary; - font-size: $ms-font-size-m; - font-weight: $ms-font-weight-regular; margin-bottom: 8px; position: relative; /* Needed to position icon */ - - :global(.ms-Label) { - font-size: $ms-font-size-m; - font-weight: $ms-font-weight-regular; - } } .screenReaderOnly { @include ms-u-screenReaderOnly; } -//= State: A disabled textfield -.root.rootIsDisabled { - :global(.field) { - background-color: $ms-color-neutralLighter; - border-color: $ms-color-neutralLighter; - pointer-events: none; - cursor: default; - } - - @include input-placeholder { - color: $ms-color-neutralTertiary; - } -} - -//= State: A required textfield -.root.rootIsRequired { - :global(.ms-Label) { - @include ms-Label-is-required - } - - @include input-placeholder { - @include ms-Label-is-required - } -} - -//= State: An active textfield -.root.rootIsActive { - border-color: $ms-color-themePrimary; -} - -.errorIcon { - vertical-align: middle; - font-size: $ms-font-size-m; - @include margin-right(5px); -} - -.icon { - position: absolute; - bottom: 8px; - @include right(8px); - top: auto; -} - +//= State: default .fieldGroup { - @include ms-u-normalize; - @include ms-baseFont; - font-weight: $ms-font-weight-regular; - font-size: $ms-font-size-m; - border: 1px solid $ms-color-neutralTertiaryAlt; + border: 1px solid $field-border-color; + background: $field-background-color; height: 32px; display: flex; flex-direction: row; align-items: stretch; position: relative; + &:hover { - border-color: $ms-color-neutralSecondaryAlt; + border-color: $field-border-hover-color; } &.fieldGroupIsFocused { - border-color: $ms-color-themePrimary; + border-color: $field-border-focus-color; + } + + .rootIsDisabled > & { + background-color: $field-background-disabled-color; + border-color: $field-border-disabled-color; + pointer-events: none; + cursor: default; } + &:hover, &.fieldGroupIsFocused { @media screen and (-ms-high-contrast: active) { @@ -98,9 +74,17 @@ border-color: $ms-color-contrastWhiteSelected; } } - .rootIsDisabled > & { - background-color: $ms-color-neutralLighter; - border-color: $ms-color-neutralLighter; + + &::-ms-clear { + display: none; + } +} + +//= State: A disabled textfield +.root.rootIsDisabled { + :global(.field) { + background-color: $field-background-disabled-color; + border-color: $field-border-disabled-color; pointer-events: none; cursor: default; } @@ -120,7 +104,7 @@ @include ms-baseFont; border-radius: 0; border: none; - color: $ms-color-neutralPrimary; + color: $field-text-color; @include padding(0, 12px, 0, 12px); width: 100%; text-overflow: ellipsis; @@ -141,17 +125,40 @@ cursor: default; } - @include input-placeholder { - color: $ms-color-neutralSecondary; + .field { + @include input-placeholder { + color: $field-placeholder-disabled-color; + } } +} - &::-ms-clear { - display: none; +//= State: A required textfield +.root.rootIsRequired { + :global(.ms-Label) { + @include ms-Label-is-required } } +//= State: An active textfield +.root.rootIsActive { + border-color: $field-border-focus-color; +} + +.errorIcon { + vertical-align: middle; + font-size: $ms-font-size-m; + @include margin-right(5px); +} + +.icon { + position: absolute; + bottom: 8px; + @include right(8px); + top: auto; +} + .description { - color: $ms-color-neutralSecondaryAlt; + color: $field-description-color; font-size: $ms-font-size-xs; } @@ -160,14 +167,15 @@ } //== Modifier: Single line (default), underlined -// .root.rootIsUnderlined { - border-bottom: 1px solid $ms-color-neutralTertiaryAlt; + border-bottom: 1px solid $field-border-color; + border-width: 0px; + border-bottom-width: 1px; display: flex; width: 100%; - &:hover { - border-color: $ms-color-neutralSecondaryAlt; + &:hover:not(.rootIsDisabled) { + border-color: $field-border-hover-color; @media screen and (-ms-high-contrast: active) { border-color: $ms-color-contrastBlackSelected; @@ -193,7 +201,7 @@ } &.rootIsDisabled { - border-bottom-color: $ms-color-neutralLight; + border-bottom-color: $field-border-disabled-color; :global(.ms-Label) { @include ms-Label-is-disabled; @@ -201,12 +209,12 @@ .field { background-color: transparent; - color: $ms-color-neutralTertiary; + color: $field-text-disabled-color; } } &.rootIsActive { - border-color: $ms-color-themePrimary; + border-color: $field-border-focus-color; @media screen and (-ms-high-contrast: active) { border-color: $ms-color-contrastBlackSelected; @@ -228,11 +236,6 @@ display: flex; } .field { - @include ms-baseFont; - color: $ms-color-neutralPrimary; - font-family: $ms-font-family-base; - font-size: $ms-font-size-m; - font-weight: $ms-font-weight-regular; line-height: 17px; flex-grow: 1; padding-top: 6px; @@ -247,7 +250,7 @@ // @todo: https://github.com/OfficeDev/Office-UI-Fabric/issues/359 .errorMessage { @include ms-font-s; - @include ms-fontColor-redDark; + color: $field-error-color; @include resetMargins; padding-top: 5px; } @@ -255,7 +258,7 @@ .invalid, .invalid:focus, .invalid:hover { - @include ms-borderColor-redDark; + border-color: $field-border-error-color; } .root.rootIsUnderlined { diff --git a/packages/office-ui-fabric-react/src/components/TextField/examples/TextField.Basic.Example.tsx b/packages/office-ui-fabric-react/src/components/TextField/examples/TextField.Basic.Example.tsx index fd5c46155adbf..ec471903d4a58 100644 --- a/packages/office-ui-fabric-react/src/components/TextField/examples/TextField.Basic.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/TextField/examples/TextField.Basic.Example.tsx @@ -7,8 +7,10 @@ export class TextFieldBasicExample extends React.Component { public render() { return (
- - + + @@ -17,6 +19,7 @@ export class TextFieldBasicExample extends React.Component { +
diff --git a/packages/office-ui-fabric-react/src/components/Toggle/Toggle.scss b/packages/office-ui-fabric-react/src/components/Toggle/Toggle.scss index 1f136000a0db9..2042cc108b6a5 100644 --- a/packages/office-ui-fabric-react/src/components/Toggle/Toggle.scss +++ b/packages/office-ui-fabric-react/src/components/Toggle/Toggle.scss @@ -2,6 +2,28 @@ // Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE in the project root for license information. +// -------------------------------------------------- +// Toggle semantic slots + +$toggle-background-off-color: $controlBackgroundColor; +$toggle-background-on-color: $controlBackgroundSelectedColor; +$toggle-background-on-hover-color: $controlBackgroundSelectedHoverColor; + +$toggle-thumb-off-color: $controlBorderUnselectedColor; +$toggle-thumb-off-hover-color: $controlBorderUnselectedHoverColor; +$toggle-thumb-on-color: $controlForegroundSelectedColor; + +$toggle-border-off-color: $toggle-thumb-off-color; +$toggle-border-off-hover-color: $toggle-thumb-off-hover-color; +$toggle-border-on-hover-color: $controlBorderSelectedHoverColor; + +$toggle-thumb-off-disabled-color: $disabledTextColor; +$toggle-border-off-disabled-color: $disabledTextColor; +$toggle-background-on-disabled-color: $disabledTextColor; +$toggle-thumb-on-disabled-color: $disabledBackgroundColor; + +$toggle-focusBorder-color: $focusBorderColor; + // // Office UI Fabric // -------------------------------------------------- @@ -20,9 +42,7 @@ // Toggle .root { @include ms-baseFont; - @include ms-font-m; @include ms-u-normalize; - color: $ms-color-neutralPrimary; position: relative; display: block; @@ -38,43 +58,48 @@ } .background { - border: 1px solid $ms-color-neutralSecondaryAlt; + background: $toggle-background-off-color; + border: 1px solid $toggle-border-off-color; } .thumb { + background: $toggle-thumb-off-color; @include highContrast-bgColor($ms-color-white, $ms-color-black); } .slider:hover { .background { - border: 1px solid $ms-color-black; + border: 1px solid $toggle-border-off-hover-color; } .thumb { - background: $ms-color-black; + background: $toggle-thumb-off-hover-color; } } &.isChecked { .background { - background: $ms-color-themePrimary; - border: 1px solid $ms-color-themePrimary; + background: $toggle-background-on-color; + border: 1px solid transparent; @include highContrast-bgColor($ms-color-white, $ms-color-black); } .thumb { - background: $ms-color-white; + background: $toggle-thumb-on-color; @include left(28px); @include highContrast-bgColor($ms-color-black, $ms-color-white); } .slider:hover { .background { - border: 1px solid $ms-color-themePrimary; - background: $ms-color-themeSecondary; + border: 1px solid $toggle-border-on-hover-color; + background: $toggle-background-on-hover-color; } + .thumb { - background: $ms-color-white; + background: $toggle-thumb-on-color; + @include left(28px); + @include highContrast-bgColor($ms-color-black, $ms-color-white); } } } @@ -84,12 +109,13 @@ // Disabled overrides .isDisabled { .thumb { - background: $ms-color-neutralTertiaryAlt; + background: $toggle-thumb-off-disabled-color; @include highContrast-bgColor($ms-color-contrastBlackDisabled, $ms-color-contrastWhiteDisabled); } .background { - border: 1px solid $ms-color-neutralTertiaryAlt; + background: $toggle-background-off-color; + border: 1px solid $toggle-border-off-disabled-color; @media screen and (-ms-high-contrast: active) { border-color: $ms-color-contrastBlackDisabled; @@ -102,13 +128,13 @@ &.isChecked { .background { - background: $ms-color-neutralTertiaryAlt; + background: $toggle-background-on-disabled-color; border: 1px solid transparent; @include highContrast-bgColor($ms-color-contrastBlackDisabled, $ms-color-contrastWhiteDisabled); } .thumb { - background: $ms-color-neutralLight; + background: $toggle-thumb-on-disabled-color; @include left(28px); @include highContrast-bgColor($ms-color-black, $ms-color-white); } @@ -122,7 +148,7 @@ } :global(.ms-Fabric.is-focusVisible) .root.isEnabled .invisibleToggle:focus + .background .focus { - border: 1px solid $focusedBorderColor; + border: 1px solid $toggle-focusBorder-color; } .invisibleToggle { @@ -161,7 +187,6 @@ border-radius: 10px; top: 4px; @include left(4px); - background: $ms-color-neutralSecondary; transition: all 0.1s ease; }