diff --git a/common/changes/@uifabric/experiments/signals_2018-03-22-21-03.json b/common/changes/@uifabric/experiments/signals_2018-03-22-21-03.json new file mode 100644 index 0000000000000..95f7eb77288c3 --- /dev/null +++ b/common/changes/@uifabric/experiments/signals_2018-03-22-21-03.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@uifabric/experiments", + "comment": "Add missing icons to Signals and fix colors", + "type": "minor" + } + ], + "packageName": "@uifabric/experiments", + "email": "tmichon@microsoft.com" +} diff --git a/packages/experiments/src/components/signals/SignalField.scss b/packages/experiments/src/components/signals/SignalField.scss index 717124fa13d1a..900627e612a12 100644 --- a/packages/experiments/src/components/signals/SignalField.scss +++ b/packages/experiments/src/components/signals/SignalField.scss @@ -2,7 +2,16 @@ @import '~office-ui-fabric-react/src/common/common'; .signalField { - display: inline-flex; + &, + &.compact { + display: inline-flex; + } + + &.wide { + display: flex; + vertical-align: top; + } + max-width: 100%; flex-direction: row nowrap; } @@ -12,4 +21,5 @@ overflow: hidden; white-space: nowrap; text-align: left; + flex: 1; } diff --git a/packages/experiments/src/components/signals/SignalField.tsx b/packages/experiments/src/components/signals/SignalField.tsx index fb76709b289ae..57ad06bfb639e 100644 --- a/packages/experiments/src/components/signals/SignalField.tsx +++ b/packages/experiments/src/components/signals/SignalField.tsx @@ -6,7 +6,10 @@ import * as SignalFieldStylesModule from './SignalField.scss'; // tslint:disable-next-line:no-any const SignalFieldStyles: any = SignalFieldStylesModule; +export type SignalFieldMode = 'wide' | 'compact'; + export interface ISignalFieldProps extends React.HTMLAttributes { + signalsFieldMode?: SignalFieldMode; before?: React.ReactNode | React.ReactNode[]; after?: React.ReactNode | React.ReactNode[]; } @@ -21,12 +24,16 @@ export const SignalField: React.StatelessComponent = (props: before, after, className, + signalsFieldMode = 'compact', ...spanProps } = props; return ( { props.before } diff --git a/packages/experiments/src/components/signals/Signals.scss b/packages/experiments/src/components/signals/Signals.scss index 20d2b12bbe6ac..27e26f55227a2 100644 --- a/packages/experiments/src/components/signals/Signals.scss +++ b/packages/experiments/src/components/signals/Signals.scss @@ -26,7 +26,7 @@ settings used by the parent control. bottom: 100%; @include right(-0.15em); font-size: 0.66em; - margin-bottom: -0.8em; + margin-bottom: -0.9em; } .comments { @@ -49,11 +49,11 @@ settings used by the parent control. } .trending { - color: #006257; + color: $ms-color-green; } .blocked { - color: #a80000; + color: $ms-color-redDark; } .warning { @@ -62,10 +62,38 @@ settings used by the parent control. .shared { color: $ms-color-neutralSecondary; + + .selected & { + color: $ms-color-black; + } +} + +.lock { + color: $ms-color-neutralSecondary; + + .selected & { + color: $ms-color-black; + } } .missingMetadata { - color: $ms-color-themeDarker; + color: #cf3902; +} + +.youCheckedOut { + color: $ms-color-redDark; +} + +.someoneCheckedOut { + color: $ms-color-neutralSecondary; + + .selected & { + color: $ms-color-black; + } +} + +.awaitingApproval { + color: #ad3100; } .mention { @@ -78,10 +106,54 @@ settings used by the parent control. } } +.unseenEdit { + color: $ms-color-themePrimary; + + .selected & { + color: $ms-color-themeDark; + } +} + +.unseenReply { + color: $ms-color-themePrimary; + + .selected & { + color: $ms-color-themeDark; + } +} + +i.unseenReply { + top: 0.25em; +} + +.emailed { + color: $ms-color-themePrimary; + + .selected & { + color: $ms-color-themeDark; + } +} + +i.emailed { + top: 0.25em; +} + .malwareDetected { color: $ms-color-redDark; } +.readOnly { + color: $ms-color-neutralSecondary; + + .selected & { + color: $ms-color-black; + } +} + .external { color: $ms-color-neutralSecondary; + + .selected & { + color: $ms-color-black; + } } diff --git a/packages/experiments/src/components/signals/Signals.tsx b/packages/experiments/src/components/signals/Signals.tsx index 5b7622957e6a1..26844a2d5599d 100644 --- a/packages/experiments/src/components/signals/Signals.tsx +++ b/packages/experiments/src/components/signals/Signals.tsx @@ -19,7 +19,7 @@ export const YouCheckedOutSignal: Signal = (props: ISignalProps): JSX.Element => // TODO get correct icon ); }; @@ -29,7 +29,7 @@ export const BlockedSignal: Signal = (props: ISignalProps): JSX.Element => { ); }; @@ -49,7 +49,7 @@ export const WarningSignal: Signal = (props: ISignalProps): JSX.Element => { ); }; @@ -59,8 +59,8 @@ export const AwaitingApprovalSignal: Signal = (props: ISignalProps): JSX.Element // TODO get correct icon + iconName='clock' + /> ); }; @@ -79,8 +79,18 @@ export const SomeoneCheckedOutSignal: Signal = (props: ISignalProps): JSX.Elemen // TODO get correct icon + iconName='checkedoutbyother12' + /> + ); +}; + +export const RecordSignal: Signal = (props: ISignalProps): JSX.Element => { + return ( + ); }; @@ -166,13 +176,26 @@ export const CommentsSignal: Signal = (props: ISignalProps): JSX.Element => { ); }; +/** + * Renders a signal for a number of comments. + */ +export const UnseenReplySignal: Signal = (props: ISignalProps): JSX.Element => { + return ( + + ); +}; + export const UnseenEditSignal: Signal = (props: ISignalProps): JSX.Element => { return ( // TODO get correct icon + /> ); }; @@ -181,8 +204,18 @@ export const ReadOnlySignal: Signal = (props: ISignalProps): JSX.Element => { // TODO get correct icon + iconName='uneditablesolid12' + /> + ); +}; + +export const EmailedSignal: Signal = (props: ISignalProps): JSX.Element => { + return ( + ); }; diff --git a/packages/experiments/src/components/signals/SignalsPage.tsx b/packages/experiments/src/components/signals/SignalsPage.tsx index 4576ae6cd4933..16421d0744363 100644 --- a/packages/experiments/src/components/signals/SignalsPage.tsx +++ b/packages/experiments/src/components/signals/SignalsPage.tsx @@ -7,6 +7,11 @@ import { } from '@uifabric/example-app-base'; /* tslint:disable:max-line-length */ +import { SignalFieldBasicExample } from './examples/SignalField.Basic.Example'; +const SignalFieldBasicExampleCode = require( + '!raw-loader!experiments/src/components/signals/examples/SignalField.Basic.Example.tsx' +) as string; + import { SignalsBasicExample } from './examples/Signals.Basic.Example'; const SignalsBasicExampleCode = require( '!raw-loader!experiments/src/components/signals/examples/Signals.Basic.Example.tsx' @@ -17,10 +22,13 @@ export class SignalsPage extends React.Component { return ( - + + + + diff --git a/packages/experiments/src/components/signals/examples/SignalField.Basic.Example.tsx b/packages/experiments/src/components/signals/examples/SignalField.Basic.Example.tsx new file mode 100644 index 0000000000000..b95326532bc73 --- /dev/null +++ b/packages/experiments/src/components/signals/examples/SignalField.Basic.Example.tsx @@ -0,0 +1,42 @@ + +import * as React from 'react'; +import { SignalField, SignalFieldMode } from '../SignalField'; +import { YouCheckedOutSignal, AwaitingApprovalSignal } from '../Signals'; +import { lorem } from '@uifabric/example-app-base'; +import { Checkbox } from 'office-ui-fabric-react/lib/Checkbox'; + +export interface ISignalFieldBasicExampleState { + mode: SignalFieldMode; +} + +const text = lorem(4); + +export class SignalFieldBasicExample extends React.Component<{}, ISignalFieldBasicExampleState> { + constructor(props: {}) { + super(props); + + this.state = { + mode: 'compact' + }; + } + + public render(): JSX.Element { + return ( +
+ + ] } + after={ [] } + >{ text } + +
+ ); + } + + private _onModeChange = (event: React.MouseEvent, checked?: boolean | undefined): void => { + this.setState({ + mode: checked ? 'wide' : 'compact' + }); + } +} diff --git a/packages/experiments/src/components/signals/examples/Signals.Basic.Example.tsx b/packages/experiments/src/components/signals/examples/Signals.Basic.Example.tsx index 341cdf34eb2e0..34d65432885c0 100644 --- a/packages/experiments/src/components/signals/examples/Signals.Basic.Example.tsx +++ b/packages/experiments/src/components/signals/examples/Signals.Basic.Example.tsx @@ -14,9 +14,12 @@ import { LiveEditSignal, MentionSignal, CommentsSignal, + UnseenReplySignal, UnseenEditSignal, ReadOnlySignal, - SharedSignal + SharedSignal, + EmailedSignal, + RecordSignal } from '../Signals'; import { ChoiceGroup, IChoiceGroupOption, Checkbox } from 'office-ui-fabric-react'; import { css, autobind } from 'office-ui-fabric-react/lib/Utilities'; @@ -162,10 +165,22 @@ export class SignalsBasicExample extends React.Component<{}, ISignalsBasicExampl name='Comments (count)' signal={ 2 } /> + } + /> } /> + } + /> + } + /> }