From 706b498d19aa3cc6ee55daca4d9b07bdfb40706d Mon Sep 17 00:00:00 2001 From: David Zearing Date: Tue, 28 Mar 2017 08:27:44 -0700 Subject: [PATCH 01/25] Updates to button. --- .../utilities/parser/InterfaceParserHelper.ts | 4 + .../examples/Breadcrumb.Basic.Example.tsx | 33 ------ .../src/components/Button/BaseButton.tsx | 107 +++++++++--------- .../src/components/Button/Button.Props.ts | 56 +++++++-- .../src/components/Button/Button.tsx | 22 ++-- .../Button/ButtonCore/ButtonCore.scss | 1 + .../src/components/Button/ButtonPage.tsx | 21 ---- .../Button/CommandButton/CommandButton.tsx | 49 +++++--- .../Button/CompoundButton/CompoundButton.tsx | 44 +++++-- .../Button/IconButton/IconButton.tsx | 45 ++++++-- .../Button/PrimaryButton/PrimaryButton.tsx | 42 +++++-- .../Button/examples/Button.Anchor.Example.tsx | 3 +- .../examples/Button.Command.Example.tsx | 53 ++++++--- .../examples/Button.Compound.Example.tsx | 6 +- .../Button.ContextualMenu.Example.tsx | 3 +- .../examples/Button.Default.Example.tsx | 3 +- .../Button/examples/IButtonProps.tsx | 3 - .../ThemeProvider/ThemeProvider.tsx | 61 ++++++++++ .../components/ThemeProvider/withTheme.tsx | 37 ++++++ .../pickers/Suggestions/Suggestions.tsx | 6 +- .../webpack.serve.config.js | 6 +- packages/utilities/src/BaseComponent.ts | 52 ++++++++- 22 files changed, 449 insertions(+), 208 deletions(-) delete mode 100644 packages/office-ui-fabric-react/src/components/Button/examples/IButtonProps.tsx create mode 100644 packages/office-ui-fabric-react/src/components/ThemeProvider/ThemeProvider.tsx create mode 100644 packages/office-ui-fabric-react/src/components/ThemeProvider/withTheme.tsx diff --git a/packages/example-app-base/src/utilities/parser/InterfaceParserHelper.ts b/packages/example-app-base/src/utilities/parser/InterfaceParserHelper.ts index 753553bb13eef3..a287087c67dea7 100644 --- a/packages/example-app-base/src/utilities/parser/InterfaceParserHelper.ts +++ b/packages/example-app-base/src/utilities/parser/InterfaceParserHelper.ts @@ -127,6 +127,10 @@ export class InterfaceParserHelper extends BaseParser { let isOptional = identifierName[identifierName.length - 1] === '?'; let propType = isDeprecated ? InterfacePropertyType.deprecated : (isOptional ? InterfacePropertyType.optional : InterfacePropertyType.required); + if (isOptional) { + identifierName = identifierName.substr(0, identifierName.length - 1); + } + this._state = ParseState.default; returnResult.push({ description: comment, diff --git a/packages/office-ui-fabric-react/src/components/Breadcrumb/examples/Breadcrumb.Basic.Example.tsx b/packages/office-ui-fabric-react/src/components/Breadcrumb/examples/Breadcrumb.Basic.Example.tsx index 4d567d6a1b3006..f74b0dd70dc16a 100644 --- a/packages/office-ui-fabric-react/src/components/Breadcrumb/examples/Breadcrumb.Basic.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Breadcrumb/examples/Breadcrumb.Basic.Example.tsx @@ -37,16 +37,6 @@ export class BreadcrumbBasicExample extends React.Component { { text: 'This is link 5', 'key': 'l5', href: '#/examples/breadcrumb', onClick: this._onBreadcrumbItemClicked }, ] } maxDisplayedItems={ 3 } /> - ); } @@ -55,27 +45,4 @@ export class BreadcrumbBasicExample extends React.Component { console.log(`Breadcrumb item with key "${item.key}" has been clicked.`); } - private _onRenderBreadcrumbItem(item: IBreadcrumbItem, defaultRender?: (item?: IBreadcrumbItem) => JSX.Element): JSX.Element { - let getIcon = (key: string) => { - if (key === 'files') { - return ; - } else if (key[0] === 'f') { - return ; - } else { - return ; - } - }; - - return ( - - - { getIcon(item.key) } - - { defaultRender(item) } - - ); - } } diff --git a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx index f763565247958d..693f3c9970a392 100644 --- a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx @@ -1,31 +1,21 @@ import * as React from 'react'; import { - autobind, BaseComponent, - css, + IRenderFunction, + anchorProperties, assign, - getId, - getNativeProps, + autobind, buttonProperties, - anchorProperties + css, + getId, + getNativeProps } from '../../Utilities'; + import { DirectionalHint } from '../../common/DirectionalHint'; import { ContextualMenu, IContextualMenuProps } from '../../ContextualMenu'; -import { IButtonProps, IButton } from './Button.Props'; +import { IButtonProps, IButtonClassNames, IButton } from './Button.Props'; const styles: any = require('./BaseButton.scss'); -export interface IBaseButtonClassNames { - base: string; - variant: string; - isDisabled: string; - isEnabled: string; - description?: string; - flexContainer?: string; - icon?: string; - menuIcon?: string; - label?: string; - root?: string; -} export interface IBaseButtonState { menuProps?: IContextualMenuProps | null; @@ -33,11 +23,13 @@ export interface IBaseButtonState { export class BaseButton extends BaseComponent implements IButton { - protected classNames: IBaseButtonClassNames = { - base: 'ms-Button', - variant: '', - isEnabled: '', - isDisabled: '' + public static defaultProps: IButtonProps = { + classNames: { + base: 'ms-Button', + variant: '', + isEnabled: '', + isDisabled: '' + } }; private _buttonElement: HTMLButtonElement; @@ -56,7 +48,7 @@ export class BaseButton extends BaseComponent im } public render(): JSX.Element { - const { description, ariaLabel, ariaDescription, href, disabled } = this.props; + const { description, ariaLabel, ariaDescription, href, disabled, classNames } = this.props; const { _ariaDescriptionId, _labelId, _descriptionId } = this; const renderAsAnchor: boolean = !!href; const tag = renderAsAnchor ? 'a' : 'button'; @@ -87,13 +79,13 @@ export class BaseButton extends BaseComponent im className: css( styles.root, this.props.className, - this.classNames.base, - this.classNames.variant, - this.classNames.root, + classNames.base, + classNames.variant, + classNames.root, { 'disabled': disabled, - [this.classNames.isDisabled]: disabled, - [this.classNames.isEnabled]: !disabled + [classNames.isDisabled]: disabled, + [classNames.isEnabled]: !disabled }), ref: this._resolveRef('_buttonElement'), 'disabled': disabled, @@ -121,37 +113,47 @@ export class BaseButton extends BaseComponent im protected onRenderContent(tag: any, buttonProps: IButtonProps): JSX.Element { let { - onRenderMenu = this._onRenderMenu, - onRenderMenuIcon = this._onRenderMenuIcon, + classNames, + menuIconName, menuProps, - menuIconName + onRenderIcon = this._onRenderIcon, + onRenderLabel = this._onRenderLabel, + onRenderDescription = this._onRenderDescription, + onRenderMenu = this._onRenderMenu, + onRenderMenuIcon = this._onRenderMenuIcon } = this.props; + const className = css(classNames.base + '-flexContainer', styles.flexContainer, classNames.flexContainer); + return React.createElement( tag, buttonProps, - React.createElement('div', { className: css(this.classNames.base + '-flexContainer', styles.flexContainer, this.classNames.flexContainer) }, - this.onRenderIcon(), - this.onRenderLabel(), - this.onRenderDescription(), - this.onRenderAriaDescription(), - this.onRenderChildren(), + React.createElement( + 'div', + { className }, + onRenderIcon(this.props, this._onRenderIcon), + onRenderLabel(this.props, this._onRenderLabel), + onRenderDescription(this.props, this._onRenderDescription), + this._onRenderAriaDescription(), + this._onRenderChildren(), (menuProps || menuIconName || this.props.onRenderMenuIcon) && onRenderMenuIcon(this.props, this._onRenderMenuIcon), this.state.menuProps && onRenderMenu(menuProps, this._onRenderMenu) )); } - protected onRenderIcon() { - const { icon } = this.props; + @autobind + private _onRenderIcon(buttonProps?: IButtonProps, defaultRender?: IRenderFunction) { + const { classNames, icon } = this.props; return icon && ( - + ); } - protected onRenderLabel() { - let { children, text } = this.props; + @autobind + private _onRenderLabel() { + let { classNames, children, text } = this.props; // For backwards compat, we should continue to take in the text content from children. if (text === undefined && typeof (children) === 'string') { @@ -159,13 +161,14 @@ export class BaseButton extends BaseComponent im } return text && ( - + { text } ); } - protected onRenderChildren() { + @autobind + private _onRenderChildren() { const { children } = this.props; // If children is just a string, either it or the text will be rendered via onRenderLabel @@ -177,14 +180,15 @@ export class BaseButton extends BaseComponent im return children; } - protected onRenderDescription() { - const { description } = this.props; + @autobind + private _onRenderDescription() { + const { classNames, description } = this.props; // ms-Button-description is only shown when the button type is compound. // In other cases it will not be displayed. return description ? ( { description } @@ -194,7 +198,8 @@ export class BaseButton extends BaseComponent im ); } - protected onRenderAriaDescription() { + @autobind + private _onRenderAriaDescription() { const { ariaDescription } = this.props; // If ariaDescription is given, descriptionId will be assigned to ariaDescriptionSpan, @@ -208,10 +213,10 @@ export class BaseButton extends BaseComponent im @autobind protected _onRenderMenuIcon(props: IButtonProps): JSX.Element { - const { menuIconName = 'ChevronDown' } = props; + const { classNames, menuIconName = 'ChevronDown' } = props; return ( - + ); diff --git a/packages/office-ui-fabric-react/src/components/Button/Button.Props.ts b/packages/office-ui-fabric-react/src/components/Button/Button.Props.ts index 8035561c0a740f..6e84ef3f0e7ffa 100644 --- a/packages/office-ui-fabric-react/src/components/Button/Button.Props.ts +++ b/packages/office-ui-fabric-react/src/components/Button/Button.Props.ts @@ -6,12 +6,32 @@ import { IContextualMenuProps } from '../../ContextualMenu'; export interface IButton { /** - * Focuses the button. + * Sets focus to the button. */ - focus(); + focus: () => void; +} + +export interface IButtonClassNames { + base?: string; + variant?: string; + isDisabled?: string; + isEnabled?: string; + description?: string; + flexContainer?: string; + icon?: string; + menuIcon?: string; + label?: string; + root?: string; } export interface IButtonProps extends React.HTMLProps { + + /** + * Optional way to fetch the IButton interface. Use this instead of ref, to avoid accessing higher-order component + * wrappers rather than the IButton interface. + */ + componentRef?: (component: IButton) => void; + /** * If provided, this component will be rendered as an anchor. * @default ElementType.anchor @@ -28,6 +48,11 @@ export interface IButtonProps extends React.HTMLProps; + * Props for button menu + */ + menuProps?: IContextualMenuProps; /** - * Props for button menu - */ - menuProps?: IContextualMenuProps; + * Custom render function for the icon + */ + onRenderIcon?: IRenderFunction; + + /** + * Custom render function for the label text. + */ + onRenderLabel?: IRenderFunction; + + /** + * Custom render function for the desciption text. + */ + onRenderDescription?: IRenderFunction; + + /** + * Custom render function for button menu icon + */ + onRenderMenuIcon?: IRenderFunction; /** * Custom render function for button menu diff --git a/packages/office-ui-fabric-react/src/components/Button/Button.tsx b/packages/office-ui-fabric-react/src/components/Button/Button.tsx index 6583b9f0ad8431..0c766d235074b9 100644 --- a/packages/office-ui-fabric-react/src/components/Button/Button.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/Button.tsx @@ -16,33 +16,29 @@ import { PrimaryButton } from './PrimaryButton/PrimaryButton'; * @deprecated * This class is deprecated. Use the individual *Button components instead. */ -export class Button extends BaseComponent implements IButton { - private _button: BaseButton; +export class Button extends BaseComponent { + /** + * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. + */ public render() { let props = this.props; switch (props.buttonType) { case ButtonType.command: - return ; + return ; case ButtonType.compound: - return ; + return ; case ButtonType.icon: - return ; + return ; case ButtonType.primary: - return ; + return ; default: - return ; - } - } - - public focus() { - if (this._button) { - this._button.focus(); + return ; } } } diff --git a/packages/office-ui-fabric-react/src/components/Button/ButtonCore/ButtonCore.scss b/packages/office-ui-fabric-react/src/components/Button/ButtonCore/ButtonCore.scss index 4f87801ffe74f1..89d01b7502296a 100644 --- a/packages/office-ui-fabric-react/src/components/Button/ButtonCore/ButtonCore.scss +++ b/packages/office-ui-fabric-react/src/components/Button/ButtonCore/ButtonCore.scss @@ -18,6 +18,7 @@ text-align: center; cursor: pointer; display: inline-block; + vertical-align: top; padding: $button-core-default-padding; @media screen and (-ms-high-contrast: active) { diff --git a/packages/office-ui-fabric-react/src/components/Button/ButtonPage.tsx b/packages/office-ui-fabric-react/src/components/Button/ButtonPage.tsx index 19638dd250db17..8c4e205ec9c9a3 100644 --- a/packages/office-ui-fabric-react/src/components/Button/ButtonPage.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/ButtonPage.tsx @@ -42,30 +42,9 @@ export class ButtonPage extends React.Component - - - - - - - - - - - - - - - - - - - - - } propertiesTables={ diff --git a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx index 97d7b098481e16..5fd42c155029d8 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx @@ -1,18 +1,41 @@ +import * as React from 'react'; import { BaseButton } from '../BaseButton'; +import { BaseComponent, IBaseProps } from '@uifabric/utilities'; +import { IButtonProps, IButtonClassNames } from '../Button.Props'; +import { withTheme } from '../../ThemeProvider/withTheme'; + const styles: any = require('./CommandButton.scss'); -export class CommandButton extends BaseButton { - protected classNames = { - base: 'ms-Button', - variant: 'ms-Button--command', - icon: styles.icon, - menuIcon: styles.icon, - isDisabled: styles.isDisabled, - isEnabled: styles.isEnabled, - label: styles.label, - root: styles.root, - flexContainer: styles.flexContainer - }; +export const CommandButtonClassNames: IButtonClassNames = { + base: 'ms-Button', + variant: 'ms-Button--command', + icon: styles.icon, + menuIcon: styles.icon, + isDisabled: styles.isDisabled, + isEnabled: styles.isEnabled, + label: styles.label, + root: styles.root, + flexContainer: styles.flexContainer +}; + +@withTheme('CommandButton') +export class CommandButton extends BaseComponent { + + /** + * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. + */ + protected _resolveComponentRef = false; + + public render() { + return ( + + ); + } - protected onRenderDescription() { return null; } + private _nullRender() { + return null; + } } diff --git a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx index c38f3623840e14..4d33f81353a35d 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx @@ -1,16 +1,36 @@ +import * as React from 'react'; import { BaseButton } from '../BaseButton'; +import { BaseComponent, IBaseProps } from '@uifabric/utilities'; +import { IButtonProps, IButtonClassNames } from '../Button.Props'; +import { withTheme } from '../../ThemeProvider/withTheme'; + const styles: any = require('./CompoundButton.scss'); -export class CompoundButton extends BaseButton { - protected classNames = { - base: 'ms-Button', - variant: 'ms-Button--compound', - description: styles.description, - flexContainer: styles.flexContainer, - icon: null, - isDisabled: styles.isDisabled, - isEnabled: styles.isEnabled, - label: styles.label, - root: styles.root - }; +export const CompoundButtonClassNames = { + base: 'ms-Button', + variant: 'ms-Button--compound', + description: styles.description, + flexContainer: styles.flexContainer, + icon: null, + isDisabled: styles.isDisabled, + isEnabled: styles.isEnabled, + label: styles.label, + root: styles.root +}; + +@withTheme('CompoundButton') +export class CompoundButton extends BaseComponent { + /** + * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. + */ + protected _resolveComponentRef = false; + + public render() { + return ( + + ); + } } diff --git a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx index 8cd4162f66d4a2..3e135c8e225f78 100644 --- a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx @@ -1,17 +1,38 @@ +import * as React from 'react'; import { BaseButton } from '../BaseButton'; +import { BaseComponent, IBaseProps } from '@uifabric/utilities'; +import { IButtonProps, IButtonClassNames } from '../Button.Props'; +import { withTheme } from '../../ThemeProvider/withTheme'; const styles: any = require('./IconButton.scss'); -export class IconButton extends BaseButton { - protected classNames = { - base: 'ms-Button', - variant: 'ms-Button--icon', - icon: styles.icon, - menuIcon: styles.icon, - isDisabled: styles.isDisabled, - isEnabled: styles.isEnabled, - root: styles.root - }; +export const IconButtonClassNames = { + base: 'ms-Button', + variant: 'ms-Button--icon', + icon: styles.icon, + menuIcon: styles.icon, + isDisabled: styles.isDisabled, + isEnabled: styles.isEnabled, + root: styles.root +}; - protected onRenderLabel() { return null; } - protected onRenderDescription() { return null; } +@withTheme('IconButton') +export class IconButton extends BaseComponent { + public render() { + return ( + + ); + } + + private _nullRender() { + return null; + } + + /** + * We override this to let the BaseButton receive innerRef and resolve it. + */ + protected _updateInnerRef(currentProps: IBaseProps, newProps: IBaseProps = {}) { } } diff --git a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx index 577833bcf5aff2..0042f69fb5e5b5 100644 --- a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx @@ -1,18 +1,36 @@ +import * as React from 'react'; +import { BaseComponent } from '@uifabric/utilities'; import { BaseButton } from '../BaseButton'; +import { IButtonProps, IButtonClassNames } from '../Button.Props'; +import { withTheme } from '../../ThemeProvider/withTheme'; + const styles: any = require('./PrimaryButton.scss'); -export class PrimaryButton extends BaseButton { - protected classNames = { - base: 'ms-Button', - variant: 'ms-Button--primary', - icon: styles.icon, - menuIcon: styles.icon, - isDisabled: styles.isDisabled, - isEnabled: styles.isEnabled, - label: styles.label, - root: styles.root - }; +const CLASS_NAMES: IButtonClassNames = { + base: 'ms-Button', + variant: 'ms-Button--primary', + icon: styles.icon, + menuIcon: styles.icon, + isDisabled: styles.isDisabled, + isEnabled: styles.isEnabled, + label: styles.label, + root: styles.root +}; + +@withTheme('PrimaryButton') +export class PrimaryButton extends BaseComponent { + /** + * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. + */ - protected onRenderDescription() { return null; } + protected _resolveComponentRef = false; + public render() { + return ( + + ); + } } diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Anchor.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Anchor.Example.tsx index 8b3292f771109d..81452b0f175520 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Anchor.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Anchor.Example.tsx @@ -1,13 +1,12 @@ import * as React from 'react'; import { + IButtonProps, PrimaryButton } from 'office-ui-fabric-react/lib/Button'; import { Label } from 'office-ui-fabric-react/lib/Label'; -import { IButtonProps } from './IButtonProps'; - export class ButtonAnchorExample extends React.Component { public constructor() { super(); diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx index 9f2ea5ff73a2c3..ac61a57211af43 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx @@ -1,31 +1,54 @@ import * as React from 'react'; import { CommandButton, + IButton, + IButtonProps } from 'office-ui-fabric-react/lib/Button'; import { Label } from 'office-ui-fabric-react/lib/Label'; -import { IButtonProps } from './IButtonProps'; +import { autobind } from 'office-ui-fabric-react/lib/Utilities'; -export class ButtonCommandExample extends React.Component { - public constructor() { - super(); - } +import { ThemeProvider } from '../../ThemeProvider/ThemeProvider'; + +export class ButtonCommandExample extends React.Component { + private _button: IButton; public render() { let { disabled } = this.props; return ( -
- - - Create account - -
+ +
+ + this._button.focus() } + /> + this._button = b } + data-automation-id='test' + disabled={ disabled } + text='Create account' + icon='Mail' + description='I am a description' + menuProps={ { + items: [ + { + key: 'a', + name: 'MenuItemA' + } + ] + } } + /> +
+
); } + } diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Compound.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Compound.Example.tsx index 447901e526b9c7..680d68afe6dde2 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Compound.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Compound.Example.tsx @@ -1,7 +1,9 @@ import * as React from 'react'; -import { CompoundButton } from 'office-ui-fabric-react/lib/Button'; +import { + CompoundButton, + IButtonProps +} from 'office-ui-fabric-react/lib/Button'; import { Label } from 'office-ui-fabric-react/lib/Label'; -import { IButtonProps } from './IButtonProps'; export class ButtonCompoundExample extends React.Component { public constructor() { diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.ContextualMenu.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.ContextualMenu.Example.tsx index 474fce6ccbbbd5..4308050487c9be 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.ContextualMenu.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.ContextualMenu.Example.tsx @@ -1,6 +1,5 @@ import * as React from 'react'; -import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; -import { IButtonProps } from './IButtonProps'; +import { DefaultButton, IButtonProps } from 'office-ui-fabric-react/lib/Button'; export class ButtonContextualMenuExample extends React.Component { public render() { diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Default.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Default.Example.tsx index b234c1beaa0bc9..01a5afdeb5aa13 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Default.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Default.Example.tsx @@ -1,6 +1,5 @@ import * as React from 'react'; -import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; -import { IButtonProps } from './IButtonProps'; +import { DefaultButton, IButtonProps } from 'office-ui-fabric-react/lib/Button'; export class ButtonDefaultExample extends React.Component { public render() { diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/IButtonProps.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/IButtonProps.tsx deleted file mode 100644 index cc45e4700218f5..00000000000000 --- a/packages/office-ui-fabric-react/src/components/Button/examples/IButtonProps.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export interface IButtonProps { - disabled: boolean; -} \ No newline at end of file diff --git a/packages/office-ui-fabric-react/src/components/ThemeProvider/ThemeProvider.tsx b/packages/office-ui-fabric-react/src/components/ThemeProvider/ThemeProvider.tsx new file mode 100644 index 00000000000000..2db0d8b255faca --- /dev/null +++ b/packages/office-ui-fabric-react/src/components/ThemeProvider/ThemeProvider.tsx @@ -0,0 +1,61 @@ +import * as React from 'react'; +import { + BaseComponent, + assign +} from '../../Utilities'; + +export interface IThemedComponentProps { + theme?: ITheme; +} + +export interface IThemeProviderState { + theme?: ITheme; +} + +export interface ITheme { + isDarkTheme?: boolean; + + defaultProps?: { + [key: string]: Object + }; +} + +export class ThemeProvider extends BaseComponent { + public static contextTypes = { + theme: React.PropTypes.object + }; + + public static childContextTypes = ThemeProvider.contextTypes; + + constructor(props, context) { + super(props); + + this.state = { + theme: this._getTheme(props, context) + }; + } + + public getChildContext(): any { + return this.state; + } + + public componentWillReceiveProps(newProps, newContext) { + + this.setState({ + theme: this._getTheme(newProps, newContext) + }); + } + + public render() { + return React.Children.only(this.props.children); + } + + private _getTheme(props: IThemedComponentProps, context: IThemedComponentProps) { + let { theme: propsTheme = {} as ITheme } = props; + let { theme: contextTheme = {} as ITheme } = context; + + return { + defaultProps: assign({}, contextTheme.defaultProps, propsTheme.defaultProps) + }; + } +} diff --git a/packages/office-ui-fabric-react/src/components/ThemeProvider/withTheme.tsx b/packages/office-ui-fabric-react/src/components/ThemeProvider/withTheme.tsx new file mode 100644 index 00000000000000..7ccbcd07b19b64 --- /dev/null +++ b/packages/office-ui-fabric-react/src/components/ThemeProvider/withTheme.tsx @@ -0,0 +1,37 @@ +import * as React from 'react'; +import { IThemedComponentProps } from './ThemeProvider'; + +export interface IWithThemeState { + theme?: IThemedComponentProps; +}; + +export function withTheme(componentName?: string) { + return function withTheme

( + ComposedComponent: (new (props: P, ...args: any[]) => React.Component) + ): any { + return class ComponentWithTheme extends React.Component { + public static contextTypes = { + theme: React.PropTypes.object + }; + + constructor() { + super(); + + this.state = { + theme: {} + }; + } + + public render() { + let { theme } = this.state; + let defaultProps = ((this.context.theme && this.context.theme.defaultProps) ? + this.context.theme.defaultProps[componentName] : + null) || {}; + + return ( + + ); + } + }; + } +} diff --git a/packages/office-ui-fabric-react/src/components/pickers/Suggestions/Suggestions.tsx b/packages/office-ui-fabric-react/src/components/pickers/Suggestions/Suggestions.tsx index abe8fc679aed82..a96355276cc703 100644 --- a/packages/office-ui-fabric-react/src/components/pickers/Suggestions/Suggestions.tsx +++ b/packages/office-ui-fabric-react/src/components/pickers/Suggestions/Suggestions.tsx @@ -3,7 +3,7 @@ import { BaseComponent, css } from '../../../Utilities'; -import { CommandButton } from '../../../Button'; +import { CommandButton, IButton } from '../../../Button'; import { Spinner } from '../../../Spinner'; import { ISuggestionItemProps, ISuggestionsProps } from './Suggestions.Props'; const styles: any = require('./Suggestions.scss'); @@ -36,7 +36,7 @@ export class SuggestionsItem extends React.Component, export class Suggestions extends BaseComponent, {}> { - protected _searchForMoreButton: CommandButton; + protected _searchForMoreButton: IButton; protected _selectedElement: HTMLDivElement; private SuggestionsItemOfProperType = SuggestionsItem as new (props: ISuggestionItemProps) => SuggestionsItem; @@ -92,7 +92,7 @@ export class Suggestions extends BaseComponent, {}> { onClick={ this._getMoreResults.bind(this) } className={ css('ms-SearchMore-button', styles.searchMoreButton) } icon={ 'Search' } - ref={ this._resolveRef('_searchForMoreButton') } > + componentRef={ this._resolveRef('_searchForMoreButton') } > { searchForMoreText } ) : (null) } diff --git a/packages/office-ui-fabric-react/webpack.serve.config.js b/packages/office-ui-fabric-react/webpack.serve.config.js index a47f4fc90add2e..ab253c74a49ea0 100644 --- a/packages/office-ui-fabric-react/webpack.serve.config.js +++ b/packages/office-ui-fabric-react/webpack.serve.config.js @@ -28,7 +28,8 @@ module.exports = { devtool: 'source-map', devServer: { - inline: true + inline: true, + port: 4321 }, module: { @@ -48,7 +49,8 @@ module.exports = { use: [ { loader: "load-themed-styles-loader", // creates style nodes from JS strings - }, { + }, + { loader: "css-loader", // translates CSS into CommonJS options: { modules: true, diff --git a/packages/utilities/src/BaseComponent.ts b/packages/utilities/src/BaseComponent.ts index aab50ed1530800..4bfad625c726ce 100644 --- a/packages/utilities/src/BaseComponent.ts +++ b/packages/utilities/src/BaseComponent.ts @@ -3,6 +3,10 @@ import { Async } from './Async'; import { EventGroup } from './EventGroup'; import { IDisposable } from './IDisposable'; +export interface IBaseProps

extends React.Props

{ + componentRef?: any; +} + export class BaseComponent extends React.Component { /** * External consumers should override BaseComponent.onError to hook into error messages that occur from @@ -10,6 +14,17 @@ export class BaseComponent extends React.Component { */ public static onError: ((errorMessage?: string, ex?: any) => void); + /** + * Controls whether the componentRef prop will be resolved by this component instance. If you are + * implementing a passthrough (higher-order component), you would set this to false and pass through + * the props to the inner component, allowing it to resolve the componentRef. + * + * @protected + * @type {boolean} + * @memberOf BaseComponent + */ + protected _resolveComponentRef: boolean; + private __async: Async; private __events: EventGroup; private __disposables: IDisposable[]; @@ -24,6 +39,8 @@ export class BaseComponent extends React.Component { constructor(props?: P, deprecatedProps?: { [propName: string]: string }) { super(props); + this._resolveComponentRef = true; + if (deprecatedProps) { for (let propName in deprecatedProps) { if (propName in props) { @@ -31,7 +48,6 @@ export class BaseComponent extends React.Component { } } } - _makeAllSafe(this, BaseComponent.prototype, [ 'componentWillMount', 'componentDidMount', @@ -44,6 +60,13 @@ export class BaseComponent extends React.Component { ]); } + public componentWillReceiveProps(newProps?: any, newContext?: any) { + this._updateComponentRef(this.props, newProps); + } + public componentDidMount() { + this._updateComponentRef(undefined, this.props); + } + /** If we have disposables, dispose them automatically on unmount. */ public componentWillUnmount() { if (this.__disposables) { @@ -126,8 +149,33 @@ export class BaseComponent extends React.Component { return this[refName] = ref; }; } + return this.__resolves[refName]; } + + /** + * Updates the componentRef (by calling it with "this" when necessary.) + * + * @protected + * @param {IBaseProps

} currentProps + * @param {IBaseProps

} [newProps={}] + * + * @memberOf BaseComponent + */ + protected _updateComponentRef(currentProps: IBaseProps

, newProps: IBaseProps

= {}) { + if (this._resolveComponentRef && + ((!currentProps && newProps.componentRef) || + (currentProps && currentProps.componentRef !== newProps.componentRef))) { + + if (currentProps && currentProps.componentRef) { + currentProps.componentRef(null); + } + + if (newProps.componentRef) { + newProps.componentRef(this); + } + } + } } /** @@ -153,7 +201,7 @@ function _makeSafe(obj: BaseComponent, prototype: Object, methodName: if (prototypeMethod) { retVal = prototypeMethod.apply(this, arguments); } - if (classMethod) { + if (classMethod !== prototypeMethod) { retVal = classMethod.apply(this, arguments); } } catch (e) { From 3787f0e7c28f7c73f18b6287202dae7cc84754d4 Mon Sep 17 00:00:00 2001 From: David Zearing Date: Wed, 29 Mar 2017 13:48:31 -0700 Subject: [PATCH 02/25] Updating all buttons. --- .../Button/CommandButton/CommandButton.tsx | 10 ++--- .../Button/CompoundButton/CompoundButton.tsx | 4 +- .../Button/DefaultButton/DefaultButton.tsx | 42 +++++++++++++------ .../Button/IconButton/IconButton.tsx | 18 ++++---- .../Button/PrimaryButton/PrimaryButton.tsx | 4 +- packages/utilities/src/BaseComponent.ts | 14 +++++-- 6 files changed, 55 insertions(+), 37 deletions(-) diff --git a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx index 5fd42c155029d8..74fcfd9a68cac7 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx @@ -22,20 +22,16 @@ export const CommandButtonClassNames: IButtonClassNames = { export class CommandButton extends BaseComponent { /** - * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. + * Tell BaseComponent to bypass resolution of componentRef. */ - protected _resolveComponentRef = false; + protected _shouldUpdateComponentRef = false; public render() { return ( ); } - - private _nullRender() { - return null; - } } diff --git a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx index 4d33f81353a35d..70b2b1911546f1 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx @@ -21,9 +21,9 @@ export const CompoundButtonClassNames = { @withTheme('CompoundButton') export class CompoundButton extends BaseComponent { /** - * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. + * Tell BaseComponent to bypass resolution of componentRef. */ - protected _resolveComponentRef = false; + protected _shouldUpdateComponentRef = false; public render() { return ( diff --git a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx index e3765dedb8849c..41dda30df89c53 100644 --- a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx @@ -1,17 +1,35 @@ +import * as React from 'react'; import { BaseButton } from '../BaseButton'; +import { BaseComponent, IBaseProps } from '@uifabric/utilities'; +import { IButtonProps, IButtonClassNames } from '../Button.Props'; +import { withTheme } from '../../ThemeProvider/withTheme'; + const styles: any = require('./DefaultButton.scss'); -export class DefaultButton extends BaseButton { - protected classNames = { - base: 'ms-Button', - variant: 'ms-Button--default', - icon: styles.icon, - menuIcon: styles.icon, - isDisabled: styles.isDisabled, - isEnabled: styles.isEnabled, - label: styles.label, - root: styles.root - }; +export const DefaultButtonClassNames = { + base: 'ms-Button', + variant: 'ms-Button--default', + icon: styles.icon, + menuIcon: styles.icon, + isDisabled: styles.isDisabled, + isEnabled: styles.isEnabled, + label: styles.label, + root: styles.root +}; + +@withTheme('DefaultButton') +export class DefaultButton extends BaseComponent { + /** + * Tell BaseComponent to bypass resolution of componentRef. + */ + protected _shouldUpdateComponentRef = false; - protected onRenderDescription() { return null; } + public render() { + return ( + + ); + } } diff --git a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx index 3e135c8e225f78..3a034297ae9dca 100644 --- a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx @@ -17,22 +17,18 @@ export const IconButtonClassNames = { @withTheme('IconButton') export class IconButton extends BaseComponent { + /** + * Tell BaseComponent to bypass resolution of componentRef. + */ + protected _shouldUpdateComponentRef = false; + public render() { return ( ); } - - private _nullRender() { - return null; - } - - /** - * We override this to let the BaseButton receive innerRef and resolve it. - */ - protected _updateInnerRef(currentProps: IBaseProps, newProps: IBaseProps = {}) { } } diff --git a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx index 0042f69fb5e5b5..edd8fa281338a3 100644 --- a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx @@ -22,13 +22,13 @@ export class PrimaryButton extends BaseComponent { /** * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. */ - - protected _resolveComponentRef = false; + protected _shouldUpdateComponentRef = false; public render() { return ( ); diff --git a/packages/utilities/src/BaseComponent.ts b/packages/utilities/src/BaseComponent.ts index 4bfad625c726ce..8c12a030bccdc9 100644 --- a/packages/utilities/src/BaseComponent.ts +++ b/packages/utilities/src/BaseComponent.ts @@ -23,7 +23,7 @@ export class BaseComponent extends React.Component { * @type {boolean} * @memberOf BaseComponent */ - protected _resolveComponentRef: boolean; + protected _shouldUpdateComponentRef: boolean; private __async: Async; private __events: EventGroup; @@ -39,7 +39,7 @@ export class BaseComponent extends React.Component { constructor(props?: P, deprecatedProps?: { [propName: string]: string }) { super(props); - this._resolveComponentRef = true; + this._shouldUpdateComponentRef = true; if (deprecatedProps) { for (let propName in deprecatedProps) { @@ -163,7 +163,7 @@ export class BaseComponent extends React.Component { * @memberOf BaseComponent */ protected _updateComponentRef(currentProps: IBaseProps

, newProps: IBaseProps

= {}) { - if (this._resolveComponentRef && + if (this._shouldUpdateComponentRef && ((!currentProps && newProps.componentRef) || (currentProps && currentProps.componentRef !== newProps.componentRef))) { @@ -176,6 +176,14 @@ export class BaseComponent extends React.Component { } } } + + /** + * Standard method for rendering null. Useful to wire up onRender methods to a function ref that + * never changes. + */ + protected _onRenderNull(): JSX.Element | null { + return null; + } } /** From 552e5f8a5de22768118edc12538f79dd3bc185aa Mon Sep 17 00:00:00 2001 From: David Zearing Date: Fri, 31 Mar 2017 15:50:02 -0700 Subject: [PATCH 03/25] More button updates. --- .../src/components/Button/BaseButton.tsx | 64 ++++++++----- .../src/components/Button/Button.Props.ts | 25 ++++- .../Button/CommandButton/CommandButton.tsx | 4 +- .../Button/CompoundButton/CompoundButton.tsx | 4 +- .../Button/DefaultButton/DefaultButton.tsx | 4 +- .../Button/IconButton/IconButton.tsx | 6 +- .../Button/PrimaryButton/PrimaryButton.tsx | 4 +- .../examples/Button.Command.Example.tsx | 93 +++++++++++++------ .../src/components/Callout/CalloutContent.tsx | 4 +- .../components/ChoiceGroup/ChoiceGroup.tsx | 7 +- .../examples/ChoiceGroup.Basic.Example.tsx | 1 + .../src/components/Dropdown/Dropdown.tsx | 8 +- .../src/components/FocusZone/FocusZone.tsx | 4 +- .../src/components/Layer/Layer.tsx | 7 +- .../ProgressIndicator/ProgressIndicator.tsx | 6 +- .../components/ThemeProvider/Customizer.tsx | 54 +++++++++++ .../ThemeProvider/ThemeProvider.tsx | 61 ------------ .../components/ThemeProvider/customizable.tsx | 24 +++++ .../components/ThemeProvider/withTheme.tsx | 37 -------- packages/utilities/src/BaseComponent.ts | 67 +++++++------ packages/utilities/src/index.ts | 1 + packages/utilities/src/warn.test.ts | 51 ++++++++++ packages/utilities/src/warn.ts | 63 +++++++++++++ 23 files changed, 397 insertions(+), 202 deletions(-) create mode 100644 packages/office-ui-fabric-react/src/components/ThemeProvider/Customizer.tsx delete mode 100644 packages/office-ui-fabric-react/src/components/ThemeProvider/ThemeProvider.tsx create mode 100644 packages/office-ui-fabric-react/src/components/ThemeProvider/customizable.tsx delete mode 100644 packages/office-ui-fabric-react/src/components/ThemeProvider/withTheme.tsx create mode 100644 packages/utilities/src/warn.test.ts create mode 100644 packages/utilities/src/warn.ts diff --git a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx index dac161c9f97381..2094d1187b5499 100644 --- a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx @@ -10,16 +10,18 @@ import { getId, getNativeProps } from '../../Utilities'; - +import { Icon, IconName } from '../../Icon'; import { DirectionalHint } from '../../common/DirectionalHint'; import { ContextualMenu, IContextualMenuProps } from '../../ContextualMenu'; import { IButtonProps, IButtonClassNames, IButton } from './Button.Props'; import styles = require('./BaseButton.scss'); +import { customizable } from '../ThemeProvider/customizable'; export interface IBaseButtonState { menuProps?: IContextualMenuProps | null; } +@customizable('BaseButton') export class BaseButton extends BaseComponent implements IButton { public static defaultProps: IButtonProps = { @@ -37,7 +39,13 @@ export class BaseButton extends BaseComponent im private _ariaDescriptionId: string; constructor(props: IButtonProps, rootClassName: string, deprecationMap: any) { - super(props, { 'rootProps': null }); + super(props); + + this._warnDeprecations({ + 'rootProps': null, + 'icon': 'iconName' + }); + this._labelId = getId(); this._descriptionId = getId(); this._ariaDescriptionId = getId(); @@ -101,7 +109,7 @@ export class BaseButton extends BaseComponent im assign(buttonProps, { 'onClick': this._onToggleMenu }); } - return this.onRenderContent(tag, buttonProps); + return this._onRenderContent(tag, buttonProps); } public focus(): void { @@ -110,17 +118,20 @@ export class BaseButton extends BaseComponent im } } - protected onRenderContent(tag: any, buttonProps: IButtonProps): JSX.Element { + private _onRenderContent(tag: any, buttonProps: IButtonProps): JSX.Element { + let props = this.props; let { classNames, menuIconName, menuProps, onRenderIcon = this._onRenderIcon, - onRenderLabel = this._onRenderLabel, + onRenderText = this._onRenderText, onRenderDescription = this._onRenderDescription, + onRenderAriaDescription = this._onRenderAriaDescription, + onRenderChildren = this._onRenderChildren, onRenderMenu = this._onRenderMenu, onRenderMenuIcon = this._onRenderMenuIcon - } = this.props; + } = props; const className = css(classNames.base + '-flexContainer', styles.flexContainer, classNames.flexContainer); return React.createElement( @@ -129,11 +140,11 @@ export class BaseButton extends BaseComponent im React.createElement( 'div', { className }, - onRenderIcon(this.props, this._onRenderIcon), - onRenderLabel(this.props, this._onRenderLabel), - onRenderDescription(this.props, this._onRenderDescription), - this._onRenderAriaDescription(), - this._onRenderChildren(), + onRenderIcon(props, this._onRenderIcon), + onRenderText(props, this._onRenderText), + onRenderDescription(props, this._onRenderDescription), + onRenderAriaDescription(props, this._onRenderAriaDescription), + onRenderChildren(props, this._onRenderChildren), (menuProps || menuIconName || this.props.onRenderMenuIcon) && onRenderMenuIcon(this.props, this._onRenderMenuIcon), this.state.menuProps && onRenderMenu(menuProps, this._onRenderMenu) )); @@ -141,17 +152,19 @@ export class BaseButton extends BaseComponent im @autobind private _onRenderIcon(buttonProps?: IButtonProps, defaultRender?: IRenderFunction) { - const { classNames, icon } = this.props; + let { classNames, icon, iconName } = this.props; - return icon && ( - - - + if (icon !== undefined) { + iconName = icon as IconName; + } + + return iconName && ( + ); } @autobind - private _onRenderLabel() { + private _onRenderText() { let { classNames, children, text } = this.props; // For backwards compat, we should continue to take in the text content from children. @@ -167,7 +180,7 @@ export class BaseButton extends BaseComponent im } @autobind - private _onRenderChildren() { + private _onRenderChildren(): JSX.Element | null { const { children } = this.props; // If children is just a string, either it or the text will be rendered via onRenderLabel @@ -176,7 +189,7 @@ export class BaseButton extends BaseComponent im return null; } - return children; + return children as any; } @autobind @@ -211,18 +224,19 @@ export class BaseButton extends BaseComponent im } @autobind - protected _onRenderMenuIcon(props: IButtonProps): JSX.Element { - const { classNames, menuIconName = 'ChevronDown' } = props; + private _onRenderMenuIcon(props: IButtonProps): JSX.Element { + const { + classNames, + menuIconName = 'ChevronDown' + } = props; return ( - - - + ); } @autobind - protected _onRenderMenu(menuProps: IContextualMenuProps): JSX.Element { + private _onRenderMenu(menuProps: IContextualMenuProps): JSX.Element { return ( ; + onRenderText?: IRenderFunction; /** * Custom render function for the desciption text. */ onRenderDescription?: IRenderFunction; + /** + * Custom render function for the aria description element. + */ + onRenderAriaDescription?: IRenderFunction; + + /** + * Custom render function for rendering the button children. + */ + onRenderChildren?: IRenderFunction; + /** * Custom render function for button menu icon */ @@ -110,6 +121,7 @@ export interface IButtonProps extends React.HTMLProps; + /** * Description of the action this button takes. * Only used for compound buttons @@ -131,6 +143,13 @@ export interface IButtonProps extends React.HTMLProps | React.HTMLProps; + + /** + * @deprecated + * Use iconName. + */ + icon?: string; + } export enum ElementType { diff --git a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx index 825e9aaecb7b23..5e68d4ac62c337 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; import { BaseComponent, IBaseProps } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { withTheme } from '../../ThemeProvider/withTheme'; +import { customizable } from '../../ThemeProvider/customizable'; import styles = require('./CommandButton.scss'); export const CommandButtonClassNames: IButtonClassNames = { @@ -17,7 +17,7 @@ export const CommandButtonClassNames: IButtonClassNames = { flexContainer: styles.flexContainer }; -@withTheme('CommandButton') +@customizable('CommandButton') export class CommandButton extends BaseComponent { /** diff --git a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx index 05d7040266d84d..9a99077a989571 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; import { BaseComponent, IBaseProps } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { withTheme } from '../../ThemeProvider/withTheme'; +import { customizable } from '../../ThemeProvider/customizable'; import styles = require('./CompoundButton.scss'); @@ -18,7 +18,7 @@ export const CompoundButtonClassNames = { root: styles.root }; -@withTheme('CompoundButton') +@customizable('CompoundButton') export class CompoundButton extends BaseComponent { /** * Tell BaseComponent to bypass resolution of componentRef. diff --git a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx index 07ac06b377746b..292222426b217b 100644 --- a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; import { BaseComponent, IBaseProps } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { withTheme } from '../../ThemeProvider/withTheme'; +import { customizable } from '../../ThemeProvider/customizable'; import styles = require('./DefaultButton.scss'); @@ -17,7 +17,7 @@ export const DefaultButtonClassNames = { root: styles.root }; -@withTheme('DefaultButton') +@customizable('DefaultButton') export class DefaultButton extends BaseComponent { /** * Tell BaseComponent to bypass resolution of componentRef. diff --git a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx index c8c9f01ec52c94..0d7ebb85ab55da 100644 --- a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; import { BaseComponent, IBaseProps } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { withTheme } from '../../ThemeProvider/withTheme'; +import { customizable } from '../../ThemeProvider/customizable'; import styles = require('./IconButton.scss'); export const IconButtonClassNames = { @@ -15,7 +15,7 @@ export const IconButtonClassNames = { root: styles.root }; -@withTheme('IconButton') +@customizable('IconButton') export class IconButton extends BaseComponent { /** * Tell BaseComponent to bypass resolution of componentRef. @@ -26,7 +26,7 @@ export class IconButton extends BaseComponent { return ( ); diff --git a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx index cec61c5d235d35..56a2c728599396 100644 --- a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseComponent } from '@uifabric/utilities'; import { BaseButton } from '../BaseButton'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { withTheme } from '../../ThemeProvider/withTheme'; +import { customizable } from '../../ThemeProvider/customizable'; import styles = require('./PrimaryButton.scss'); @@ -17,7 +17,7 @@ const CLASS_NAMES: IButtonClassNames = { root: styles.root }; -@withTheme('PrimaryButton') +@customizable('PrimaryButton') export class PrimaryButton extends BaseComponent { /** * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx index ac61a57211af43..1af536177b10a8 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx @@ -1,6 +1,10 @@ import * as React from 'react'; import { CommandButton, + CompoundButton, + IconButton, + PrimaryButton, + DefaultButton, IButton, IButtonProps } from 'office-ui-fabric-react/lib/Button'; @@ -9,7 +13,49 @@ import { } from 'office-ui-fabric-react/lib/Label'; import { autobind } from 'office-ui-fabric-react/lib/Utilities'; -import { ThemeProvider } from '../../ThemeProvider/ThemeProvider'; +import { Customizer } from '../../ThemeProvider/Customizer'; + +const BUTTON_PROPS: IButtonProps[] = [ + { + text: 'Text only button' + }, + { + iconName: 'Mail', + text: 'Text/icon button' + }, + { + iconName: 'Mail', + text: 'Text/icon/description button', + description: 'This is the description.' + }, + { + iconName: 'Mail', + text: 'Text/icon/description/href button', + description: 'This is the description.', + href: 'http://www.bing.com', + target: '_blank', + }, + { + iconName: 'Mail', + text: 'Text/icon/description/menu button', + description: 'This is the description.', + menuProps: { + items: [{ + key: 'item A', + name: 'Item A', + iconName: 'Mail' + }] + } + } +]; + +const BUTTON_VARIANTS = [ + { name: 'CommandButton', component: CommandButton }, + { name: 'CompoundButton', component: CompoundButton }, + { name: 'IconButton', component: IconButton }, + { name: 'DefaultButton', component: DefaultButton }, + { name: 'PrimaryButton', component: PrimaryButton } +]; export class ButtonCommandExample extends React.Component { private _button: IButton; @@ -18,36 +64,29 @@ export class ButtonCommandExample extends React.Component let { disabled } = this.props; return ( -

- - this._button.focus() } - /> - this._button = b } - data-automation-id='test' - disabled={ disabled } - text='Create account' - icon='Mail' - description='I am a description' - menuProps={ { - items: [ - { - key: 'a', - name: 'MenuItemA' - } - ] - } } - /> +
+ + + + +
+ + { BUTTON_VARIANTS.map(({ name, component: ButtonComponent }) => ( +
+ + { BUTTON_PROPS.map((buttonProps, index) => ( + + )) } +
+ )) }
- + ); } diff --git a/packages/office-ui-fabric-react/src/components/Callout/CalloutContent.tsx b/packages/office-ui-fabric-react/src/components/Callout/CalloutContent.tsx index ffecd1fffe808b..82a9c4e24a59ac 100644 --- a/packages/office-ui-fabric-react/src/components/Callout/CalloutContent.tsx +++ b/packages/office-ui-fabric-react/src/components/Callout/CalloutContent.tsx @@ -49,7 +49,9 @@ export class CalloutContent extends BaseComponent private _target: HTMLElement | MouseEvent; constructor(props: ICalloutProps) { - super(props, { 'beakStyle': 'beakWidth' }); + super(props); + + this._warnDeprecations({ 'beakStyle': 'beakWidth' }); this._didSetInitialFocus = false; this.state = { diff --git a/packages/office-ui-fabric-react/src/components/ChoiceGroup/ChoiceGroup.tsx b/packages/office-ui-fabric-react/src/components/ChoiceGroup/ChoiceGroup.tsx index 882648b49bb028..b62be7cdd9ed03 100644 --- a/packages/office-ui-fabric-react/src/components/ChoiceGroup/ChoiceGroup.tsx +++ b/packages/office-ui-fabric-react/src/components/ChoiceGroup/ChoiceGroup.tsx @@ -27,7 +27,12 @@ export class ChoiceGroup extends BaseComponent implements IFo private _isInnerZone: boolean; constructor(props) { - super(props, { 'rootProps': null }); + super(props); + + this._warnDeprecations({ rootProps: null }); this._id = getId('FocusZone'); _allInstances[this._id] = this; diff --git a/packages/office-ui-fabric-react/src/components/Layer/Layer.tsx b/packages/office-ui-fabric-react/src/components/Layer/Layer.tsx index 6944456ab81f65..14390df2638a35 100644 --- a/packages/office-ui-fabric-react/src/components/Layer/Layer.tsx +++ b/packages/office-ui-fabric-react/src/components/Layer/Layer.tsx @@ -32,9 +32,10 @@ export class Layer extends BaseComponent { } constructor(props: ILayerProps) { - super(props, { - // Make sure to deprecate old properties. - 'onLayerMounted': 'onLayerDidMount' + super(props); + + this._warnDeprecations({ + onLayerMounted: 'onLayerDidMount' }); if (this.props.hostId) { diff --git a/packages/office-ui-fabric-react/src/components/ProgressIndicator/ProgressIndicator.tsx b/packages/office-ui-fabric-react/src/components/ProgressIndicator/ProgressIndicator.tsx index d330334a2a2cdd..40d9c4ecbb5548 100644 --- a/packages/office-ui-fabric-react/src/components/ProgressIndicator/ProgressIndicator.tsx +++ b/packages/office-ui-fabric-react/src/components/ProgressIndicator/ProgressIndicator.tsx @@ -22,8 +22,10 @@ export class ProgressIndicator extends BaseComponent { + public static contextTypes = { + injectedProps: React.PropTypes.object + }; + + public static childContextTypes = Customizer.contextTypes; + + constructor(props, context) { + super(props); + + this.state = this._getInjectedProps(props, context); + } + + public getChildContext(): any { + return this.state; + } + + public componentWillReceiveProps(newProps, newContext) { + + this.setState(this._getInjectedProps(newProps, newContext)); + } + + public render() { + return React.Children.only(this.props.children); + } + + private _getInjectedProps(props: ICustomizerProps, context: ICustomizerState) { + let { settings: injectedPropsFromSettings = {} as ISettings } = props; + let { injectedProps: injectedPropsFromContext = {} as ISettings } = context; + + return { + injectedProps: assign({}, injectedPropsFromContext, injectedPropsFromSettings) + }; + } +} diff --git a/packages/office-ui-fabric-react/src/components/ThemeProvider/ThemeProvider.tsx b/packages/office-ui-fabric-react/src/components/ThemeProvider/ThemeProvider.tsx deleted file mode 100644 index 2db0d8b255faca..00000000000000 --- a/packages/office-ui-fabric-react/src/components/ThemeProvider/ThemeProvider.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import * as React from 'react'; -import { - BaseComponent, - assign -} from '../../Utilities'; - -export interface IThemedComponentProps { - theme?: ITheme; -} - -export interface IThemeProviderState { - theme?: ITheme; -} - -export interface ITheme { - isDarkTheme?: boolean; - - defaultProps?: { - [key: string]: Object - }; -} - -export class ThemeProvider extends BaseComponent { - public static contextTypes = { - theme: React.PropTypes.object - }; - - public static childContextTypes = ThemeProvider.contextTypes; - - constructor(props, context) { - super(props); - - this.state = { - theme: this._getTheme(props, context) - }; - } - - public getChildContext(): any { - return this.state; - } - - public componentWillReceiveProps(newProps, newContext) { - - this.setState({ - theme: this._getTheme(newProps, newContext) - }); - } - - public render() { - return React.Children.only(this.props.children); - } - - private _getTheme(props: IThemedComponentProps, context: IThemedComponentProps) { - let { theme: propsTheme = {} as ITheme } = props; - let { theme: contextTheme = {} as ITheme } = context; - - return { - defaultProps: assign({}, contextTheme.defaultProps, propsTheme.defaultProps) - }; - } -} diff --git a/packages/office-ui-fabric-react/src/components/ThemeProvider/customizable.tsx b/packages/office-ui-fabric-react/src/components/ThemeProvider/customizable.tsx new file mode 100644 index 00000000000000..35e1ed05abf896 --- /dev/null +++ b/packages/office-ui-fabric-react/src/components/ThemeProvider/customizable.tsx @@ -0,0 +1,24 @@ +import * as React from 'react'; +import { ICustomizerProps } from './Customizer'; + +export function customizable

(componentName?: string) { + return function customizableFactory( + ComposedComponent: (new (props: P, ...args: any[]) => React.Component) + ): any { + return class ComponentWithInjectedProps extends React.Component { + public static contextTypes = { + injectedProps: React.PropTypes.object + }; + + public render() { + let defaultProps = ((this.context.injectedProps) ? + this.context.injectedProps[componentName] : + null) || {}; + + return ( + + ); + } + }; + } +} diff --git a/packages/office-ui-fabric-react/src/components/ThemeProvider/withTheme.tsx b/packages/office-ui-fabric-react/src/components/ThemeProvider/withTheme.tsx deleted file mode 100644 index 7ccbcd07b19b64..00000000000000 --- a/packages/office-ui-fabric-react/src/components/ThemeProvider/withTheme.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import * as React from 'react'; -import { IThemedComponentProps } from './ThemeProvider'; - -export interface IWithThemeState { - theme?: IThemedComponentProps; -}; - -export function withTheme(componentName?: string) { - return function withTheme

( - ComposedComponent: (new (props: P, ...args: any[]) => React.Component) - ): any { - return class ComponentWithTheme extends React.Component { - public static contextTypes = { - theme: React.PropTypes.object - }; - - constructor() { - super(); - - this.state = { - theme: {} - }; - } - - public render() { - let { theme } = this.state; - let defaultProps = ((this.context.theme && this.context.theme.defaultProps) ? - this.context.theme.defaultProps[componentName] : - null) || {}; - - return ( - - ); - } - }; - } -} diff --git a/packages/utilities/src/BaseComponent.ts b/packages/utilities/src/BaseComponent.ts index 8c12a030bccdc9..4626f950697a8f 100644 --- a/packages/utilities/src/BaseComponent.ts +++ b/packages/utilities/src/BaseComponent.ts @@ -2,6 +2,7 @@ import * as React from 'react'; import { Async } from './Async'; import { EventGroup } from './EventGroup'; import { IDisposable } from './IDisposable'; +import { warnDeprecations, warnMutuallyExclusive, IStringMap } from './warn'; export interface IBaseProps

extends React.Props

{ componentRef?: any; @@ -14,6 +15,7 @@ export class BaseComponent extends React.Component { */ public static onError: ((errorMessage?: string, ex?: any) => void); + /** * Controls whether the componentRef prop will be resolved by this component instance. If you are * implementing a passthrough (higher-order component), you would set this to false and pass through @@ -29,6 +31,7 @@ export class BaseComponent extends React.Component { private __events: EventGroup; private __disposables: IDisposable[]; private __resolves: { [name: string]: (ref: any) => any }; + private __className: string; /** * BaseComponent constructor @@ -36,18 +39,11 @@ export class BaseComponent extends React.Component { * @param {Object} deprecatedProps The map of deprecated prop names to new names, where the key is the old name and the * value is the new name. If a prop is removed rather than renamed, leave the value undefined. */ - constructor(props?: P, deprecatedProps?: { [propName: string]: string }) { + constructor(props?: P) { super(props); this._shouldUpdateComponentRef = true; - if (deprecatedProps) { - for (let propName in deprecatedProps) { - if (propName in props) { - _warnDeprecation(this, propName, deprecatedProps[propName]); - } - } - } _makeAllSafe(this, BaseComponent.prototype, [ 'componentWillMount', 'componentDidMount', @@ -60,9 +56,12 @@ export class BaseComponent extends React.Component { ]); } + /** When the component will receive props, make sure the componentRef is updated. */ public componentWillReceiveProps(newProps?: any, newContext?: any) { this._updateComponentRef(this.props, newProps); } + + /** When the component has mounted, update the componentRef. */ public componentDidMount() { this._updateComponentRef(undefined, this.props); } @@ -83,10 +82,14 @@ export class BaseComponent extends React.Component { /** Gets the object's class name. */ public get className() { - let funcNameRegex = /function (.{1,})\(/; - let results = (funcNameRegex).exec((this).constructor.toString()); + if (!this.__className) { + let funcNameRegex = /function (.{1,})\(/; + let results = (funcNameRegex).exec((this).constructor.toString()); + + this.__className = (results && results.length > 1) ? results[1] : ''; + } - return (results && results.length > 1) ? results[1] : ''; + return this.__className; } /** Allows subclasses to push things to this._disposables to be auto disposed. */ @@ -155,12 +158,6 @@ export class BaseComponent extends React.Component { /** * Updates the componentRef (by calling it with "this" when necessary.) - * - * @protected - * @param {IBaseProps

} currentProps - * @param {IBaseProps

} [newProps={}] - * - * @memberOf BaseComponent */ protected _updateComponentRef(currentProps: IBaseProps

, newProps: IBaseProps

= {}) { if (this._shouldUpdateComponentRef && @@ -176,6 +173,30 @@ export class BaseComponent extends React.Component { } } } + /** + * Warns when a deprecated props are being used. + * + * @protected + * @param {IStringMap} deprecationMap The map of deprecations, where key is the prop name and the value is + * either null or a replacement prop name. + * + * @memberOf BaseComponent + */ + protected _warnDeprecations(deprecationMap: IStringMap) { + warnDeprecations(this.className, this.props, deprecationMap); + } + + /** + * Warns when props which are mutually exclusive with each other are both used. + * + * @protected + * @param {IStringMap} mutuallyExclusiveMap The map of mutually exclusive props. + * + * @memberOf BaseComponent + */ + protected _warnMutuallyExclusive(mutuallyExclusiveMap: IStringMap) { + warnMutuallyExclusive(this.className, this.props, mutuallyExclusiveMap); + } /** * Standard method for rendering null. Useful to wire up onRender methods to a function ref that @@ -225,18 +246,6 @@ function _makeSafe(obj: BaseComponent, prototype: Object, methodName: } } -function _warnDeprecation(obj: BaseComponent, propertyName: string, newPropertyName: string) { - if (console && console.warn) { - let deprecationMessage = `${obj.className} property '${propertyName}' was used but has been deprecated.`; - - if (newPropertyName) { - deprecationMessage += ` Use '${newPropertyName}' instead.`; - } - - console.warn(deprecationMessage); - } -} - BaseComponent.onError = (errorMessage) => { console.error(errorMessage); throw errorMessage; diff --git a/packages/utilities/src/index.ts b/packages/utilities/src/index.ts index 57d115fe9cbc06..8b0c8eda5e8be0 100644 --- a/packages/utilities/src/index.ts +++ b/packages/utilities/src/index.ts @@ -23,3 +23,4 @@ export * from './resources'; export * from './rtl'; export * from './scroll'; export * from './string'; +export * from './warn'; \ No newline at end of file diff --git a/packages/utilities/src/warn.test.ts b/packages/utilities/src/warn.test.ts new file mode 100644 index 00000000000000..df6f68e4e3934d --- /dev/null +++ b/packages/utilities/src/warn.test.ts @@ -0,0 +1,51 @@ +import { + setWarningCallback, + warnDeprecations, + warnMutuallyExclusive +} from './warn'; +import { expect } from 'chai'; + +let _lastWarning: string; + +describe('warnDeprecations', () => { + beforeEach(() => { + _lastWarning = undefined; + setWarningCallback(message => _lastWarning = message); + }); + + afterEach(() => setWarningCallback(undefined)); + + it('does not warn when unnecessary', () => { + warnDeprecations('Foo', { bar: 1 }, { 'foo': null }); + expect(_lastWarning).equals(undefined); + }); + + it('can warn on a deprecated prop', () => { + warnDeprecations('Foo', { foo: 1 }, { 'foo': null }); + expect(_lastWarning).equals(`Foo property 'foo' was used but has been deprecated.`); + }); + + it('can warn on a deprecated prop with replacement', () => { + warnDeprecations('Foo', { foo: 1 }, { 'foo': 'bar' }); + expect(_lastWarning).equals(`Foo property 'foo' was used but has been deprecated. Use 'bar' instead.`); + }); +}); + +describe('warnMutuallyExclusive', () => { + beforeEach(() => { + _lastWarning = undefined; + setWarningCallback(message => _lastWarning = message); + }); + + afterEach(() => setWarningCallback(undefined)); + + it('does not warn when unnecessary', () => { + warnMutuallyExclusive('Foo', { foo: 1 }, { 'foo': 'bar' }); + expect(_lastWarning).equals(undefined); + }); + + it('can warn on mutual exlusive props', () => { + warnMutuallyExclusive('Foo', { foo: 1, bar: 1 }, { 'foo': 'bar' }); + expect(_lastWarning).equals(`Foo property 'foo' is mutually exclusive with 'bar'. Use one or the other.`); + }); +}); diff --git a/packages/utilities/src/warn.ts b/packages/utilities/src/warn.ts new file mode 100644 index 00000000000000..9e42efae4813dd --- /dev/null +++ b/packages/utilities/src/warn.ts @@ -0,0 +1,63 @@ +let _warningCallback = _warn; + +export interface IStringMap { + [key: string]: string; +} + +/** + * Warns when a deprecated props are being used. + * + * @export + * @param {string} componentName The name of the component being used. + * @param {Object} props The props passed into the component. + * @param {IStringMap} deprecationMap The map of deprecations, where key is the prop name and the value is + * either null or a replacement prop name. + */ +export function warnDeprecations( + componentName: string, + props: Object, + deprecationMap: IStringMap): void { + + for (const propName in deprecationMap) { + if (propName in props) { + let deprecationMessage = `${componentName} property '${propName}' was used but has been deprecated.`; + const replacementPropName = deprecationMap[propName]; + + if (replacementPropName) { + deprecationMessage += ` Use '${replacementPropName}' instead.`; + } + _warningCallback(deprecationMessage); + } + } +} + +export function warnMutuallyExclusive( + componentName: string, + props: Object, + exclusiveMap: IStringMap): void { + + for (const propName in exclusiveMap) { + if (propName in props && exclusiveMap[propName] in props) { + _warningCallback( + `${componentName} property '${propName}' is mutually exclusive with '${exclusiveMap[propName]}'. Use one or the other.` + ); + } + } +} + +/** + * Configures the warning callback. Passing in undefined will reset it to use the default + * console.warn function. + * + * @export + * @param {(message) => void} warningCallback + */ +export function setWarningCallback(warningCallback: (message) => void): void { + _warningCallback = warningCallback === undefined ? _warn : warningCallback; +} + +function _warn(message: string): void { + if (console && console.warn) { + console.warn(message); + } +} From 97849305f4c70e61ec6990aac3ec2a9b680abe0e Mon Sep 17 00:00:00 2001 From: David Zearing Date: Fri, 31 Mar 2017 16:36:51 -0700 Subject: [PATCH 04/25] Moving customizable utilities. --- .../src/components/Button/BaseButton.tsx | 2 +- .../Button/CommandButton/CommandButton.tsx | 2 +- .../Button/CompoundButton/CompoundButton.tsx | 2 +- .../Button/DefaultButton/DefaultButton.tsx | 2 +- .../src/components/Button/IconButton/IconButton.tsx | 2 +- .../Button/PrimaryButton/PrimaryButton.tsx | 2 +- .../Button/examples/Button.Command.Example.tsx | 12 +++++------- .../ThemeProvider => utilities/src}/Customizer.tsx | 0 .../ThemeProvider => utilities/src}/customizable.tsx | 0 9 files changed, 11 insertions(+), 13 deletions(-) rename packages/{office-ui-fabric-react/src/components/ThemeProvider => utilities/src}/Customizer.tsx (100%) rename packages/{office-ui-fabric-react/src/components/ThemeProvider => utilities/src}/customizable.tsx (100%) diff --git a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx index 2094d1187b5499..2a59f06c4aeffb 100644 --- a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx @@ -15,7 +15,7 @@ import { DirectionalHint } from '../../common/DirectionalHint'; import { ContextualMenu, IContextualMenuProps } from '../../ContextualMenu'; import { IButtonProps, IButtonClassNames, IButton } from './Button.Props'; import styles = require('./BaseButton.scss'); -import { customizable } from '../ThemeProvider/customizable'; +import { customizable } from '@uifabric/utilities/lib/customizable'; export interface IBaseButtonState { menuProps?: IContextualMenuProps | null; diff --git a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx index 5e68d4ac62c337..0fe69d3d4d8b17 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; import { BaseComponent, IBaseProps } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '../../ThemeProvider/customizable'; +import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./CommandButton.scss'); export const CommandButtonClassNames: IButtonClassNames = { diff --git a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx index 9a99077a989571..5b0703005e2ff0 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; import { BaseComponent, IBaseProps } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '../../ThemeProvider/customizable'; +import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./CompoundButton.scss'); diff --git a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx index 292222426b217b..fa6dd4bfad8498 100644 --- a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; import { BaseComponent, IBaseProps } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '../../ThemeProvider/customizable'; +import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./DefaultButton.scss'); diff --git a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx index 0d7ebb85ab55da..b11497440faa0c 100644 --- a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; import { BaseComponent, IBaseProps } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '../../ThemeProvider/customizable'; +import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./IconButton.scss'); export const IconButtonClassNames = { diff --git a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx index 56a2c728599396..e9253c4981ba0c 100644 --- a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { BaseComponent } from '@uifabric/utilities'; import { BaseButton } from '../BaseButton'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '../../ThemeProvider/customizable'; +import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./PrimaryButton.scss'); diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx index 1af536177b10a8..4ac6102858cb51 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx @@ -43,7 +43,7 @@ const BUTTON_PROPS: IButtonProps[] = [ items: [{ key: 'item A', name: 'Item A', - iconName: 'Mail' + iconProps: { iconName: 'Mail' } }] } } @@ -64,12 +64,9 @@ export class ButtonCommandExample extends React.Component let { disabled } = this.props; return ( - +

+
@@ -81,10 +78,11 @@ export class ButtonCommandExample extends React.Component
{ BUTTON_PROPS.map((buttonProps, index) => ( - + )) }
)) } +
); diff --git a/packages/office-ui-fabric-react/src/components/ThemeProvider/Customizer.tsx b/packages/utilities/src/Customizer.tsx similarity index 100% rename from packages/office-ui-fabric-react/src/components/ThemeProvider/Customizer.tsx rename to packages/utilities/src/Customizer.tsx diff --git a/packages/office-ui-fabric-react/src/components/ThemeProvider/customizable.tsx b/packages/utilities/src/customizable.tsx similarity index 100% rename from packages/office-ui-fabric-react/src/components/ThemeProvider/customizable.tsx rename to packages/utilities/src/customizable.tsx From 883320615b477ff1c21119d110cced0803f843e6 Mon Sep 17 00:00:00 2001 From: David Zearing Date: Fri, 31 Mar 2017 17:09:43 -0700 Subject: [PATCH 05/25] Merge fixes. --- .../src/components/Button/BaseButton.tsx | 2 +- .../src/components/Button/CommandButton/CommandButton.tsx | 3 +-- .../src/components/Button/CompoundButton/CompoundButton.tsx | 3 +-- .../src/components/Button/DefaultButton/DefaultButton.tsx | 3 +-- .../src/components/Button/IconButton/IconButton.tsx | 3 +-- .../src/components/Button/PrimaryButton/PrimaryButton.tsx | 3 +-- .../components/Button/examples/Button.Command.Example.tsx | 4 +--- packages/utilities/src/BaseComponent.ts | 1 - packages/utilities/src/Customizer.tsx | 6 ++---- packages/utilities/src/customizable.tsx | 3 +-- packages/utilities/src/index.ts | 2 ++ 11 files changed, 12 insertions(+), 21 deletions(-) diff --git a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx index 2a59f06c4aeffb..cb53d49a2c1ddb 100644 --- a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx @@ -7,6 +7,7 @@ import { autobind, buttonProperties, css, + customizable, getId, getNativeProps } from '../../Utilities'; @@ -15,7 +16,6 @@ import { DirectionalHint } from '../../common/DirectionalHint'; import { ContextualMenu, IContextualMenuProps } from '../../ContextualMenu'; import { IButtonProps, IButtonClassNames, IButton } from './Button.Props'; import styles = require('./BaseButton.scss'); -import { customizable } from '@uifabric/utilities/lib/customizable'; export interface IBaseButtonState { menuProps?: IContextualMenuProps | null; diff --git a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx index 0fe69d3d4d8b17..e4c2e8708e3313 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CommandButton/CommandButton.tsx @@ -1,8 +1,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; -import { BaseComponent, IBaseProps } from '@uifabric/utilities'; +import { BaseComponent, customizable } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./CommandButton.scss'); export const CommandButtonClassNames: IButtonClassNames = { diff --git a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx index 5b0703005e2ff0..e96a2b6157078b 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx @@ -1,8 +1,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; -import { BaseComponent, IBaseProps } from '@uifabric/utilities'; +import { BaseComponent, customizable } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./CompoundButton.scss'); diff --git a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx index fa6dd4bfad8498..26db2f7156125a 100644 --- a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx @@ -1,8 +1,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; -import { BaseComponent, IBaseProps } from '@uifabric/utilities'; +import { BaseComponent, customizable } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./DefaultButton.scss'); diff --git a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx index b11497440faa0c..2dfca8603d65e6 100644 --- a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx @@ -1,8 +1,7 @@ import * as React from 'react'; import { BaseButton } from '../BaseButton'; -import { BaseComponent, IBaseProps } from '@uifabric/utilities'; +import { BaseComponent, customizable } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./IconButton.scss'); export const IconButtonClassNames = { diff --git a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx index e9253c4981ba0c..9839e6e2dec623 100644 --- a/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/PrimaryButton/PrimaryButton.tsx @@ -1,8 +1,7 @@ import * as React from 'react'; -import { BaseComponent } from '@uifabric/utilities'; +import { BaseComponent, customizable } from '@uifabric/utilities'; import { BaseButton } from '../BaseButton'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; -import { customizable } from '@uifabric/utilities/lib/customizable'; import styles = require('./PrimaryButton.scss'); diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx index 4ac6102858cb51..d66124c5d46557 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx @@ -11,9 +11,7 @@ import { import { Label } from 'office-ui-fabric-react/lib/Label'; -import { autobind } from 'office-ui-fabric-react/lib/Utilities'; - -import { Customizer } from '../../ThemeProvider/Customizer'; +import { Customizer, autobind } from 'office-ui-fabric-react/lib/Utilities'; const BUTTON_PROPS: IButtonProps[] = [ { diff --git a/packages/utilities/src/BaseComponent.ts b/packages/utilities/src/BaseComponent.ts index 4626f950697a8f..ceedc500aef86b 100644 --- a/packages/utilities/src/BaseComponent.ts +++ b/packages/utilities/src/BaseComponent.ts @@ -15,7 +15,6 @@ export class BaseComponent extends React.Component { */ public static onError: ((errorMessage?: string, ex?: any) => void); - /** * Controls whether the componentRef prop will be resolved by this component instance. If you are * implementing a passthrough (higher-order component), you would set this to false and pass through diff --git a/packages/utilities/src/Customizer.tsx b/packages/utilities/src/Customizer.tsx index 96c63a17c3805b..749433b2c22e70 100644 --- a/packages/utilities/src/Customizer.tsx +++ b/packages/utilities/src/Customizer.tsx @@ -1,8 +1,6 @@ import * as React from 'react'; -import { - BaseComponent, - assign -} from '../../Utilities'; +import { BaseComponent } from './BaseComponent'; +import { assign } from './object'; export interface ISettings { [key: string]: any; diff --git a/packages/utilities/src/customizable.tsx b/packages/utilities/src/customizable.tsx index 35e1ed05abf896..d207069a0b9dbc 100644 --- a/packages/utilities/src/customizable.tsx +++ b/packages/utilities/src/customizable.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { ICustomizerProps } from './Customizer'; export function customizable

(componentName?: string) { return function customizableFactory( @@ -20,5 +19,5 @@ export function customizable

(componentName?: string) { ); } }; - } + }; } diff --git a/packages/utilities/src/index.ts b/packages/utilities/src/index.ts index 8b0c8eda5e8be0..70fc56a1e01fc5 100644 --- a/packages/utilities/src/index.ts +++ b/packages/utilities/src/index.ts @@ -1,6 +1,7 @@ export * from './Async'; export * from './AutoScroll'; export * from './BaseComponent'; +export * from './Customizer'; export * from './DelayedRender'; export * from './EventGroup'; export * from './IDisposable'; @@ -12,6 +13,7 @@ export * from './Rectangle'; export * from './array'; export * from './autobind'; export * from './css'; +export * from './customizable'; export * from './dom'; export * from './focus'; export * from './hoist'; From ffefdd3034d0a275591b2747de23e4409529e04a Mon Sep 17 00:00:00 2001 From: David Zearing Date: Sat, 1 Apr 2017 10:18:33 -0700 Subject: [PATCH 06/25] Replacing all usages of Button in examples with the appropriate BaseButton variant. --- apps/todo-app/src/components/TodoForm.tsx | 11 +++---- apps/todo-app/src/components/TodoItem.tsx | 15 ++++----- .../components/ExampleCard/ExampleCard.tsx | 11 ++++--- .../src/components/Button/BaseButton.tsx | 2 +- .../src/components/Button/Button.Props.ts | 6 +--- .../src/components/Button/Button.tsx | 7 ++-- .../src/components/Button/ButtonPage.tsx | 21 ++++++++++++ .../Button/CompoundButton/CompoundButton.tsx | 2 +- .../Button/DefaultButton/DefaultButton.tsx | 2 +- .../Button/IconButton/IconButton.tsx | 2 +- .../Button.ContextualMenu.Example.tsx | 2 +- .../examples/Button.Default.Example.tsx | 2 +- .../Button/examples/Button.Icon.Example.tsx | 2 +- .../examples/Calendar.Button.Example.tsx | 9 ++--- .../examples/Callout.Basic.Example.tsx | 7 ++-- .../examples/Callout.Cover.Example.tsx | 12 +++++-- .../examples/Callout.Directional.Example.tsx | 7 ++-- .../examples/Callout.Nested.Example.tsx | 7 ++-- .../examples/ContextualMenu.Basic.Example.tsx | 9 +++-- .../ContextualMenu.Checkmarks.Example.tsx | 7 ++-- .../ContextualMenu.Customization.Example.tsx | 20 +++++++---- .../ContextualMenu.Directional.Example.tsx | 7 ++-- .../ContextualMenu.Header.Example.tsx | 4 +-- .../examples/DatePicker.Input.Example.tsx | 4 +-- .../examples/DetailsList.Grouped.Example.tsx | 6 ++-- .../src/components/Dialog/Dialog.tsx | 9 +++-- .../Dialog/examples/Dialog.Basic.Example.tsx | 12 ++++--- .../examples/Dialog.Blocking.Example.tsx | 12 ++++--- .../Dialog/examples/Dialog.Close.Example.tsx | 12 ++++--- .../examples/Dialog.LargeHeader.Example.tsx | 12 ++++--- .../DocumentCard/DocumentCardActions.tsx | 5 ++- .../FocusTrapZone.Box.Click.Example.tsx | 32 +++++++++--------- .../examples/FocusTrapZone.Box.Example.tsx | 33 ++++++++++--------- ...pZone.Box.FocusOnCustomElement.Example.tsx | 32 +++++++++--------- .../examples/FocusTrapZone.Nested.Example.tsx | 23 +++++-------- .../examples/FocusZone.Disabled.Example.tsx | 14 ++++---- .../examples/FocusZone.List.Example.tsx | 4 +-- .../List/examples/List.Scrolling.Example.tsx | 22 ++++++------- .../src/components/MessageBar/MessageBar.tsx | 19 ++++++----- .../examples/MessageBar.Basic.Example.tsx | 10 +++--- .../src/components/Nav/Nav.tsx | 2 +- .../Overlay/examples/Overlay.Dark.Example.tsx | 23 +++++-------- .../examples/Overlay.Light.Example.tsx | 4 +-- .../src/components/Panel/Panel.tsx | 3 +- .../examples/Panel.ExtraLarge.Example.tsx | 20 +++++------ .../Panel/examples/Panel.Large.Example.tsx | 21 +++++------- .../examples/Panel.LargeFixed.Example.tsx | 8 +++-- .../examples/Panel.LightDismiss.Example.tsx | 21 +++++------- .../Panel/examples/Panel.Medium.Example.tsx | 21 +++++------- .../Panel/examples/Panel.NonModal.Example.tsx | 20 ++++------- .../examples/Panel.SmallFluid.Example.tsx | 20 +++++------ .../examples/Panel.SmallLeft.Example.tsx | 21 +++++------- .../examples/Panel.SmallRight.Example.tsx | 8 +++-- .../Pivot/examples/Pivot.Override.Example.tsx | 6 ++-- .../Pivot/examples/Pivot.Remove.Example.tsx | 9 ++--- .../TeachingBubble/TeachingBubbleContent.tsx | 11 +++---- .../examples/TeachingBubble.Basic.Example.tsx | 8 +++-- .../TeachingBubble.Condensed.Example.tsx | 7 ++-- .../TeachingBubble.Illustration.Example.tsx | 8 +++-- .../TextField/examples/NumberTextField.tsx | 6 ++-- .../src/components/Toggle/Toggle.Props.ts | 10 ++++++ .../src/components/Toggle/Toggle.tsx | 9 +++-- .../examples/Tooltip.Basic.Example.tsx | 4 +-- .../examples/Tooltip.Bottom.Example.tsx | 7 ++-- .../PeoplePickerItems/SelectedItemDefault.tsx | 5 ++- .../SelectedItemWithMenu.tsx | 4 +-- .../pickers/Suggestions/Suggestions.tsx | 14 ++++---- .../src/demo/GettingStartedPage.tsx | 4 +-- packages/utilities/src/BaseComponent.ts | 1 + packages/utilities/src/Customizer.tsx | 15 ++++++++- packages/utilities/src/warn.ts | 4 +-- 71 files changed, 412 insertions(+), 347 deletions(-) diff --git a/apps/todo-app/src/components/TodoForm.tsx b/apps/todo-app/src/components/TodoForm.tsx index b51fe430a20158..cbc63caf509406 100644 --- a/apps/todo-app/src/components/TodoForm.tsx +++ b/apps/todo-app/src/components/TodoForm.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { autobind } from 'office-ui-fabric-react/lib/Utilities'; -import { Button, ButtonType } from 'office-ui-fabric-react/lib/Button'; +import { PrimaryButton } from 'office-ui-fabric-react/lib/Button'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; import { ITodoFormProps, ITodoFormState } from '../types/index'; import styles = require('./Todo.module.scss'); @@ -39,14 +39,13 @@ export default class TodoForm extends React.Component - + ); } diff --git a/apps/todo-app/src/components/TodoItem.tsx b/apps/todo-app/src/components/TodoItem.tsx index 5cd2d811ba7e62..80bd3d7caa2d11 100644 --- a/apps/todo-app/src/components/TodoItem.tsx +++ b/apps/todo-app/src/components/TodoItem.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button, ButtonType } from 'office-ui-fabric-react/lib/Button'; +import { IconButton } from 'office-ui-fabric-react/lib/Button'; import { Checkbox } from 'office-ui-fabric-react/lib/Checkbox'; import { FocusZone, FocusZoneDirection } from 'office-ui-fabric-react/lib/FocusZone'; import { DocumentCardActivity } from 'office-ui-fabric-react/lib/DocumentCard'; @@ -10,7 +10,7 @@ import styles = require('./Todo.module.scss'); import strings from './../strings'; /** - * TodoItem component using fabric-react component

diff --git a/packages/example-app-base/src/components/ExampleCard/ExampleCard.tsx b/packages/example-app-base/src/components/ExampleCard/ExampleCard.tsx index c0818f37e60689..6bebe39b580076 100644 --- a/packages/example-app-base/src/components/ExampleCard/ExampleCard.tsx +++ b/packages/example-app-base/src/components/ExampleCard/ExampleCard.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { css } from 'office-ui-fabric-react/lib/Utilities'; import './ExampleCard.scss'; -import { Button, ButtonType } from 'office-ui-fabric-react/lib/Button'; +import { CommandButton } from 'office-ui-fabric-react/lib/Button'; import { Highlight } from '../Highlight/Highlight'; export interface IExampleCardProps { @@ -41,10 +41,13 @@ export class ExampleCard extends React.Component{ title }
{ code ? ( - + ) : (null) }
diff --git a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx index cb53d49a2c1ddb..957235127449b4 100644 --- a/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/BaseButton.tsx @@ -14,7 +14,7 @@ import { import { Icon, IconName } from '../../Icon'; import { DirectionalHint } from '../../common/DirectionalHint'; import { ContextualMenu, IContextualMenuProps } from '../../ContextualMenu'; -import { IButtonProps, IButtonClassNames, IButton } from './Button.Props'; +import { IButtonProps, IButton } from './Button.Props'; import styles = require('./BaseButton.scss'); export interface IBaseButtonState { diff --git a/packages/office-ui-fabric-react/src/components/Button/Button.Props.ts b/packages/office-ui-fabric-react/src/components/Button/Button.Props.ts index 46f5f4a8f88aff..1f926908055406 100644 --- a/packages/office-ui-fabric-react/src/components/Button/Button.Props.ts +++ b/packages/office-ui-fabric-react/src/components/Button/Button.Props.ts @@ -1,6 +1,4 @@ import * as React from 'react'; -import { BaseButton } from './BaseButton'; -import { Button } from './Button'; import { IRenderFunction } from '../../Utilities'; import { IContextualMenuProps } from '../../ContextualMenu'; import { IconName } from '../../Icon'; @@ -25,7 +23,7 @@ export interface IButtonClassNames { root?: string; } -export interface IButtonProps extends React.HTMLProps { +export interface IButtonProps extends React.HTMLProps { /** * Optional way to fetch the IButton interface. Use this instead of ref, to avoid accessing higher-order component @@ -121,7 +119,6 @@ export interface IButtonProps extends React.HTMLProps; - /** * Description of the action this button takes. * Only used for compound buttons @@ -149,7 +146,6 @@ export interface IButtonProps extends React.HTMLProps { /** * Set this BaseComponent._resolveComponentRef to false, bypassing resolution of componentRef. */ + protected _shouldUpdateComponentRef = false; public render() { - let props = this.props; + const props = this.props; switch (props.buttonType) { case ButtonType.command: diff --git a/packages/office-ui-fabric-react/src/components/Button/ButtonPage.tsx b/packages/office-ui-fabric-react/src/components/Button/ButtonPage.tsx index 8c4e205ec9c9a3..19638dd250db17 100644 --- a/packages/office-ui-fabric-react/src/components/Button/ButtonPage.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/ButtonPage.tsx @@ -42,9 +42,30 @@ export class ButtonPage extends React.Component + + + + + + + + + + + + + + + + + + + + + } propertiesTables={ diff --git a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx index e96a2b6157078b..b8b84abd763799 100644 --- a/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/CompoundButton/CompoundButton.tsx @@ -5,7 +5,7 @@ import { IButtonProps, IButtonClassNames } from '../Button.Props'; import styles = require('./CompoundButton.scss'); -export const CompoundButtonClassNames = { +export const CompoundButtonClassNames: IButtonClassNames = { base: 'ms-Button', variant: 'ms-Button--compound', description: styles.description, diff --git a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx index 26db2f7156125a..7640bcdc0ac3e5 100644 --- a/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/DefaultButton/DefaultButton.tsx @@ -5,7 +5,7 @@ import { IButtonProps, IButtonClassNames } from '../Button.Props'; import styles = require('./DefaultButton.scss'); -export const DefaultButtonClassNames = { +export const DefaultButtonClassNames: IButtonClassNames = { base: 'ms-Button', variant: 'ms-Button--default', icon: styles.icon, diff --git a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx index 2dfca8603d65e6..5e7eba75bdbb54 100644 --- a/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/IconButton/IconButton.tsx @@ -4,7 +4,7 @@ import { BaseComponent, customizable } from '@uifabric/utilities'; import { IButtonProps, IButtonClassNames } from '../Button.Props'; import styles = require('./IconButton.scss'); -export const IconButtonClassNames = { +export const IconButtonClassNames: IButtonClassNames = { base: 'ms-Button', variant: 'ms-Button--icon', icon: styles.icon, diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.ContextualMenu.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.ContextualMenu.Example.tsx index 4308050487c9be..f1d797b312f0d0 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.ContextualMenu.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.ContextualMenu.Example.tsx @@ -11,7 +11,7 @@ export class ButtonContextualMenuExample extends React.Component { diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Icon.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Icon.Example.tsx index e82ef897030cd7..35aebd205f4787 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Icon.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Icon.Example.tsx @@ -15,7 +15,7 @@ export class ButtonIconExample extends React.Component { diff --git a/packages/office-ui-fabric-react/src/components/Calendar/examples/Calendar.Button.Example.tsx b/packages/office-ui-fabric-react/src/components/Calendar/examples/Calendar.Button.Example.tsx index 06be65e93a6eb1..062fdb7d59cb27 100644 --- a/packages/office-ui-fabric-react/src/components/Calendar/examples/Calendar.Button.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Calendar/examples/Calendar.Button.Example.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Callout, DirectionalHint } from 'office-ui-fabric-react/lib/Callout'; import { Calendar, @@ -85,9 +85,10 @@ export class CalendarButtonExample extends React.Component
this._calendarButtonElement = calendarBtn }> - +
{ this.state.showCalendar && (
this._menuButtonElement = menuButton }> - +
{ isCalloutVisible && (
this._menuButtonElement = menuButton }> - +
{ isCalloutVisible ? (
- +
diff --git a/packages/office-ui-fabric-react/src/components/Callout/examples/Callout.Directional.Example.tsx b/packages/office-ui-fabric-react/src/components/Callout/examples/Callout.Directional.Example.tsx index 8ab15fb5cbc1d1..719a672147a5e3 100644 --- a/packages/office-ui-fabric-react/src/components/Callout/examples/Callout.Directional.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Callout/examples/Callout.Directional.Example.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Callout, DirectionalHint } from 'office-ui-fabric-react/lib/Callout'; import { Dropdown, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown'; import { Checkbox } from 'office-ui-fabric-react/lib/Checkbox'; @@ -71,7 +71,10 @@ export class CalloutDirectionalExample extends React.Component
this._menuButtonElement = menuButton }> - +
{ isCalloutVisible ? (
this._menuButtonElement = menuButton }> - +
{ isCalloutVisible ? (
diff --git a/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Basic.Example.tsx b/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Basic.Example.tsx index d5ba9bca09575d..d9678c5f0a08c9 100644 --- a/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Basic.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Basic.Example.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { ContextualMenu } from 'office-ui-fabric-react/lib/ContextualMenu'; import { Callout, DirectionalHint } from 'office-ui-fabric-react/lib/Callout'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { getRTL } from 'office-ui-fabric-react/lib/Utilities'; import './ContextualMenuExample.scss'; @@ -22,7 +22,7 @@ export class ContextualMenuBasicExample extends React.Component { return (
- + { this.state.isContextMenuVisible ? ( { setInitialFocus={ true } onDismiss={ () => this.setState({ showCallout: false }) } > - + this.setState({ showCallout: false }) } + text='Hello world' + /> ) }
diff --git a/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Checkmarks.Example.tsx b/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Checkmarks.Example.tsx index 101d87914f7038..3c1dcac9319735 100644 --- a/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Checkmarks.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Checkmarks.Example.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { ContextualMenu, IContextualMenuItem, DirectionalHint } from 'office-ui-fabric-react/lib/ContextualMenu'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import './ContextualMenuExample.scss'; export interface IContextualMenuMultiselectExampleState { @@ -30,7 +30,10 @@ export class ContextualMenuCheckmarksExample extends React.Component - + { this.state.isContextMenuVisible ? ( - + { this.state.isContextMenuVisible ? ( ; + return ( + + ); } private _renderCategoriesList(item: any) { diff --git a/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Directional.Example.tsx b/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Directional.Example.tsx index 41197dcde37aa1..0d675c676206d2 100644 --- a/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Directional.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/ContextualMenu/examples/ContextualMenu.Directional.Example.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Checkbox } from 'office-ui-fabric-react/lib/Checkbox'; import { ContextualMenu, DirectionalHint } from 'office-ui-fabric-react/lib/ContextualMenu'; import { Dropdown, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown'; @@ -82,7 +82,10 @@ export class ContextualMenuDirectionalExample extends React.Component<{}, IConte onChanged={ this._onDirectionalChanged } />
- +
{ isContextualMenuVisible ? ( { return (
- + { this.state.isContextMenuVisible ? ( this.setState({ value: date }) } /> - + this.setState({ value: null }) } text='Clear' />
); } diff --git a/packages/office-ui-fabric-react/src/components/DetailsList/examples/DetailsList.Grouped.Example.tsx b/packages/office-ui-fabric-react/src/components/DetailsList/examples/DetailsList.Grouped.Example.tsx index cf02ad0eecc5c2..4749087deef341 100644 --- a/packages/office-ui-fabric-react/src/components/DetailsList/examples/DetailsList.Grouped.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/DetailsList/examples/DetailsList.Grouped.Example.tsx @@ -1,7 +1,7 @@ /* tslint:disable:no-unused-variable */ import * as React from 'react'; /* tslint:enable:no-unused-variable */ -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Fabric } from 'office-ui-fabric-react/lib/Fabric'; import { DetailsList } from 'office-ui-fabric-react/lib/DetailsList'; @@ -95,13 +95,13 @@ export class DetailsListGroupedExample extends React.Component { return ( - + this._addItem() } text='Add an item' /> - + ); } diff --git a/packages/office-ui-fabric-react/src/components/Dialog/Dialog.tsx b/packages/office-ui-fabric-react/src/components/Dialog/Dialog.tsx index ea38adf85dc45e..2142d9a07a19d3 100644 --- a/packages/office-ui-fabric-react/src/components/Dialog/Dialog.tsx +++ b/packages/office-ui-fabric-react/src/components/Dialog/Dialog.tsx @@ -8,7 +8,7 @@ import { FocusTrapZone } from '../FocusTrapZone/index'; import { IDialogProps, DialogType } from './Dialog.Props'; import { Overlay } from '../../Overlay'; import { Layer } from '../../Layer'; -import { Button, ButtonType } from '../../Button'; +import { IconButton } from '../../Button'; import { DialogFooter } from './DialogFooter'; import { Popup } from '../Popup/index'; import { withResponsiveMode, ResponsiveMode } from '../../utilities/decorators/withResponsiveMode'; @@ -132,12 +132,11 @@ export class Dialog extends BaseComponent {

{ title }

{ this.props.topButtonsProps.map((props) => ( - + { /> { null /** You can also include null values as the result of conditionals */ } - - + +
diff --git a/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.Blocking.Example.tsx b/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.Blocking.Example.tsx index 8272fd22b8ea35..3f9ec4121c5c1e 100644 --- a/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.Blocking.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.Blocking.Example.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog'; -import { Button, ButtonType } from 'office-ui-fabric-react/lib/Button'; +import { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { ChoiceGroup } from 'office-ui-fabric-react/lib/ChoiceGroup'; export class DialogBlockingExample extends React.Component { @@ -15,7 +15,11 @@ export class DialogBlockingExample extends React.Component { public render() { return (
- + { onChanged={ this._onChoiceChanged } /> - - + +
diff --git a/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.Close.Example.tsx b/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.Close.Example.tsx index 34653633b8a854..337716658305f6 100644 --- a/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.Close.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.Close.Example.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog'; -import { Button, ButtonType } from 'office-ui-fabric-react/lib/Button'; +import { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { ChoiceGroup } from 'office-ui-fabric-react/lib/ChoiceGroup'; export class DialogCloseExample extends React.Component { @@ -15,7 +15,11 @@ export class DialogCloseExample extends React.Component { public render() { return (
- + { onChanged={ this._onChoiceChanged } /> - - + +
diff --git a/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.LargeHeader.Example.tsx b/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.LargeHeader.Example.tsx index a8e338f252fe01..24a63a4dae83ec 100644 --- a/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.LargeHeader.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Dialog/examples/Dialog.LargeHeader.Example.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { Dialog, DialogType, DialogFooter } from 'office-ui-fabric-react/lib/Dialog'; -import { Button, ButtonType } from 'office-ui-fabric-react/lib/Button'; +import { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { ChoiceGroup } from 'office-ui-fabric-react/lib/ChoiceGroup'; export class DialogLargeHeaderExample extends React.Component { @@ -15,7 +15,11 @@ export class DialogLargeHeaderExample extends React.Component { public render() { return (
- + { onChanged={ this._onChoiceChanged } /> - - + +
diff --git a/packages/office-ui-fabric-react/src/components/DocumentCard/DocumentCardActions.tsx b/packages/office-ui-fabric-react/src/components/DocumentCard/DocumentCardActions.tsx index 9c41f1c8bf746c..e27813bfc63924 100644 --- a/packages/office-ui-fabric-react/src/components/DocumentCard/DocumentCardActions.tsx +++ b/packages/office-ui-fabric-react/src/components/DocumentCard/DocumentCardActions.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { css } from '../../Utilities'; import { IDocumentCardActionsProps } from './DocumentCard.Props'; -import { Button, ButtonType } from '../../Button'; +import { IconButton, ButtonType } from '../../Button'; import styles = require('./DocumentCard.scss'); export class DocumentCardActions extends React.Component { @@ -12,10 +12,9 @@ export class DocumentCardActions extends React.Component { actions && actions.map((action, index) => { - action.buttonType = ButtonType.icon; return (
-
); }) } diff --git a/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.Click.Example.tsx b/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.Click.Example.tsx index 56430fb00e2cb7..08ee38f5201f64 100644 --- a/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.Click.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.Click.Example.tsx @@ -3,11 +3,11 @@ import * as React from 'react'; /* tslint:enable:no-unused-variable */ import * as ReactDOM from 'react-dom'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { FocusTrapZone } from 'office-ui-fabric-react/lib/FocusTrapZone'; import { Link } from 'office-ui-fabric-react/lib/Link'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; -import { Toggle } from 'office-ui-fabric-react/lib/Toggle'; +import { Toggle, IToggle } from 'office-ui-fabric-react/lib/Toggle'; import './FocusTrapZone.Box.Example.scss'; export interface IBoxNoClickExampleExampleState { @@ -15,10 +15,8 @@ export interface IBoxNoClickExampleExampleState { } export default class BoxNoClickExample extends React.Component, IBoxNoClickExampleExampleState> { - public refs: { - [key: string]: React.ReactInstance; - toggle: HTMLElement; - }; + private _toggle: IToggle; + constructor(props) { super(props); @@ -32,7 +30,11 @@ export default class BoxNoClickExample extends React.Component - + { (() => { if (isToggled) { @@ -61,7 +63,7 @@ export default class BoxNoClickExample extends React.Component Hyperlink inside FocusTrapZone

this._toggle = t } checked={ isToggled } onChanged={ this._onFocusTrapZoneToggleChanged.bind(this) } label='Focus Trap Zone' @@ -70,7 +72,11 @@ export default class BoxNoClickExample extends React.Component { if (isToggled) { return ( - + ); } })() } @@ -93,12 +99,6 @@ export default class BoxNoClickExample extends React.Component { - let toggle = ReactDOM.findDOMNode(this.refs.toggle) as HTMLElement; - - if (toggle) { - toggle.focus(); - } - }); + }, () => this._toggle.focus()); } } \ No newline at end of file diff --git a/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.Example.tsx b/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.Example.tsx index 5ca95a901de916..7350d5c3154c09 100644 --- a/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.Example.tsx @@ -3,11 +3,11 @@ import * as React from 'react'; /* tslint:enable:no-unused-variable */ import * as ReactDOM from 'react-dom'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { FocusTrapZone } from 'office-ui-fabric-react/lib/FocusTrapZone'; import { Link } from 'office-ui-fabric-react/lib/Link'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; -import { Toggle } from 'office-ui-fabric-react/lib/Toggle'; +import { Toggle, IToggle } from 'office-ui-fabric-react/lib/Toggle'; import './FocusTrapZone.Box.Example.scss'; export interface IBoxExampleExampleState { @@ -15,10 +15,8 @@ export interface IBoxExampleExampleState { } export default class BoxExample extends React.Component, IBoxExampleExampleState> { - public refs: { - [key: string]: React.ReactInstance; - toggle: HTMLElement; - }; + private _toggle: IToggle; + constructor(props) { super(props); @@ -29,9 +27,14 @@ export default class BoxExample extends React.Component - + { (() => { if (isChecked) { @@ -60,7 +63,7 @@ export default class BoxExample extends React.Component Hyperlink inside FocusTrapZone

this._toggle = toggle } checked={ isChecked } onChanged={ this._onFocusTrapZoneToggleChanged.bind(this) } label='Focus Trap Zone' @@ -69,7 +72,11 @@ export default class BoxExample extends React.Component { if (isChecked) { return ( - + ); } })() } @@ -92,12 +99,6 @@ export default class BoxExample extends React.Component { - let toggle = ReactDOM.findDOMNode(this.refs.toggle) as HTMLElement; - - if (toggle) { - toggle.focus(); - } - }); + }, () => this._toggle.focus()); } } \ No newline at end of file diff --git a/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.FocusOnCustomElement.Example.tsx b/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.FocusOnCustomElement.Example.tsx index f6857a81bf9b07..e65a3aa307c1f1 100644 --- a/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.FocusOnCustomElement.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Box.FocusOnCustomElement.Example.tsx @@ -3,21 +3,19 @@ import * as React from 'react'; /* tslint:enable:no-unused-variable */ import * as ReactDOM from 'react-dom'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { FocusTrapZone } from 'office-ui-fabric-react/lib/FocusTrapZone'; import { Link } from 'office-ui-fabric-react/lib/Link'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; -import { Toggle } from 'office-ui-fabric-react/lib/Toggle'; +import { Toggle, IToggle } from 'office-ui-fabric-react/lib/Toggle'; export interface IBoxExampleExampleState { isChecked: boolean; } export default class BoxExample extends React.Component, IBoxExampleExampleState> { - public refs: { - [key: string]: React.ReactInstance; - toggle: HTMLElement; - }; + private _toggle: IToggle; + constructor(props) { super(props); @@ -32,8 +30,10 @@ export default class BoxExample extends React.Component - - + { (() => { if (isChecked) { return ( @@ -62,7 +62,7 @@ export default class BoxExample extends React.ComponentHyperlink inside FocusTrapZone

this._toggle = t } checked={ isChecked } onChanged={ this._onFocusTrapZoneToggleChanged.bind(this) } label='Focus Trap Zone' @@ -72,7 +72,11 @@ export default class BoxExample extends React.Component { if (isChecked) { return ( - + ); } })() } @@ -95,12 +99,6 @@ export default class BoxExample extends React.Component { - let toggle = ReactDOM.findDOMNode(this.refs.toggle) as HTMLElement; - - if (toggle) { - toggle.focus(); - } - }); + }, () => this._toggle.focus()); } } \ No newline at end of file diff --git a/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Nested.Example.tsx b/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Nested.Example.tsx index 477f9820d4bcda..28b88bcaaaa1e8 100644 --- a/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Nested.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/FocusTrapZone/examples/FocusTrapZone.Nested.Example.tsx @@ -5,11 +5,11 @@ import * as React from 'react'; /* tslint:disable:no-string-literal */ import * as ReactDOM from 'react-dom'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { FocusTrapZone } from 'office-ui-fabric-react/lib/FocusTrapZone'; import { Link } from 'office-ui-fabric-react/lib/Link'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; -import { Toggle } from 'office-ui-fabric-react/lib/Toggle'; +import { Toggle, IToggle } from 'office-ui-fabric-react/lib/Toggle'; import { autobind } from 'office-ui-fabric-react/lib/Utilities'; import './FocusTrapZone.Box.Example.scss'; @@ -24,22 +24,15 @@ interface IFocusTrapComponentState { class FocusTrapComponent extends React.Component { - public refs: { - [key: string]: React.ReactInstance; - toggle: HTMLElement; - }; - public render() { let contents = (
- + - + Randomize
); } diff --git a/packages/office-ui-fabric-react/src/components/FocusZone/examples/FocusZone.Disabled.Example.tsx b/packages/office-ui-fabric-react/src/components/FocusZone/examples/FocusZone.Disabled.Example.tsx index 5e419aa46fd0c9..d5f93fdae9cc4b 100644 --- a/packages/office-ui-fabric-react/src/components/FocusZone/examples/FocusZone.Disabled.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/FocusZone/examples/FocusZone.Disabled.Example.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; /* tslint:enable:no-unused-variable */ -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { FocusZone, FocusZoneDirection } from 'office-ui-fabric-react/lib/FocusZone'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; import './FocusZone.Disabled.Example.scss'; @@ -12,20 +12,20 @@ export const FocusZoneDisabledExample = () => (
Enabled FocusZone: - - + Button 1 + Button 2 - + Button 3
- + Tabbable Element 1
Disabled FocusZone: - - + Button 1 + Button 2
diff --git a/packages/office-ui-fabric-react/src/components/FocusZone/examples/FocusZone.List.Example.tsx b/packages/office-ui-fabric-react/src/components/FocusZone/examples/FocusZone.List.Example.tsx index f779826a1ec097..aa6a53bc7a8eba 100644 --- a/packages/office-ui-fabric-react/src/components/FocusZone/examples/FocusZone.List.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/FocusZone/examples/FocusZone.List.Example.tsx @@ -4,7 +4,7 @@ import { createArray, getRTLSafeKeyCode } from 'office-ui-fabric-react/lib/Utilities'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Link } from 'office-ui-fabric-react/lib/Link'; import { FocusZone, FocusZoneDirection } from 'office-ui-fabric-react/lib/FocusZone'; import { DetailsRow, IColumn, Selection, SelectionMode } from 'office-ui-fabric-react/lib/DetailsList'; @@ -35,7 +35,7 @@ const COLUMNS: IColumn[] = [ name: 'Link', fieldName: 'url', minWidth: 100, - onRender: item => + onRender: item => { item.url } } ]; diff --git a/packages/office-ui-fabric-react/src/components/List/examples/List.Scrolling.Example.tsx b/packages/office-ui-fabric-react/src/components/List/examples/List.Scrolling.Example.tsx index 4f1b16a65c9ec9..c67c04cdfde9ae 100644 --- a/packages/office-ui-fabric-react/src/components/List/examples/List.Scrolling.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/List/examples/List.Scrolling.Example.tsx @@ -2,14 +2,14 @@ import * as React from 'react'; import { css, autobind -} from '@uifabric/utilities'; +} from 'office-ui-fabric-react/lib/Utilities'; import { FocusZone, - FocusZoneDirection, - Button, - TextField, - List -} from 'office-ui-fabric-react/lib/index'; + FocusZoneDirection +} from 'office-ui-fabric-react/lib/FocusZone'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; +import { List } from 'office-ui-fabric-react/lib/List'; +import { TextField } from 'office-ui-fabric-react/lib/TextField'; import './List.Scrolling.Example.scss'; export interface IListScrollingExampleProps { @@ -41,10 +41,10 @@ export class ListScrollingExample extends React.Component
- - - - + this._scrollRelative(-10) }>-10 + this._scrollRelative(-1) }>-1 + this._scrollRelative(1) }>+1 + this._scrollRelative(10) }>+10
@@ -77,7 +77,7 @@ export class ListScrollingExample extends React.Component
) } - /> + />
); diff --git a/packages/office-ui-fabric-react/src/components/MessageBar/MessageBar.tsx b/packages/office-ui-fabric-react/src/components/MessageBar/MessageBar.tsx index 5adc0b7c270dc1..7302b5779d9e10 100644 --- a/packages/office-ui-fabric-react/src/components/MessageBar/MessageBar.tsx +++ b/packages/office-ui-fabric-react/src/components/MessageBar/MessageBar.tsx @@ -4,7 +4,7 @@ import { css, getId } from '../../Utilities'; -import { Button, ButtonType } from '../../Button'; +import { IconButton } from '../../Button'; import { IMessageBarProps, MessageBarType } from './MessageBar.Props'; import styles = require('./MessageBar.scss'); @@ -71,14 +71,15 @@ export class MessageBar extends React.Component; + return ( + + ); } return null; } diff --git a/packages/office-ui-fabric-react/src/components/MessageBar/examples/MessageBar.Basic.Example.tsx b/packages/office-ui-fabric-react/src/components/MessageBar/examples/MessageBar.Basic.Example.tsx index 7f51b1ea708864..27dc968725ebf4 100644 --- a/packages/office-ui-fabric-react/src/components/MessageBar/examples/MessageBar.Basic.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/MessageBar/examples/MessageBar.Basic.Example.tsx @@ -1,7 +1,7 @@ /* tslint:disable:no-unused-variable */ import * as React from 'react'; /* tslint:enable:no-unused-variable */ -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Link } from 'office-ui-fabric-react/lib/Link'; import { Label } from 'office-ui-fabric-react/lib/Label'; import { MessageBar, MessageBarType } from 'office-ui-fabric-react/lib/MessageBar'; @@ -25,17 +25,17 @@ export const MessageBarBasicExample = () => ( { console.log('test'); } } isMultiline={ false } - actions={
}> + actions={
YesNo
}> Blocked - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi luctus, purus a lobortis tristique, odio augue pharetra metus, ac placerat nunc mi nec dui. Vestibulum aliquam et nunc semper scelerisque. Curabitur vitae orci nec quam condimentum porttitor et sed lacus. Vivamus ac efficitur leo. Cras faucibus mauris libero, ac placerat erat euismod et. Donec pulvinar commodo odio sit amet faucibus. In hac habitasse platea dictumst. Duis eu ante commodo, condimentum nibh pellentesque, laoreet enim. Fusce massa lorem, ultrices eu mi a, fermentum suscipit magna. Integer porta purus pulvinar, hendrerit felis eget, condimentum mauris. Visit our website
}>SevereWarning - lorem ipsum dolor sit amet, a elit sem interdum consectetur adipiscing elit. + actions={
YesNo
}>SevereWarning - lorem ipsum dolor sit amet, a elit sem interdum consectetur adipiscing elit. } + actions={
YesNo
} messageBarType={ MessageBarType.success } isMultiline={ false }> Success - Lorem ipsum dolor sit amet Visit our website @@ -46,7 +46,7 @@ export const MessageBarBasicExample = () => ( onDismiss={ () => { console.log('test'); } } messageBarType={ MessageBarType.warning } ariaLabel='Aria help text here' - actions={
}> + actions={
YesNo
}> Warning - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi luctus, purus a lobortis tristique, odio augue pharetra metus, ac placerat nunc mi nec dui. Vestibulum aliquam et nunc semper scelerisque. Curabitur vitae orci nec quam condimentum porttitor et sed lacus. Vivamus ac efficitur leo. Cras faucibus mauris libero, ac placerat erat euismod et. Donec pulvinar commodo odio sit amet faucibus. In hac habitasse platea dictumst. Duis eu ante commodo, condimentum nibh pellentesque, laoreet enim. Fusce massa lorem, ultrices eu mi a, fermentum suscipit magna. Integer porta purus pulvinar, hendrerit felis eget, condimentum mauris.Visit our website
diff --git a/packages/office-ui-fabric-react/src/components/Nav/Nav.tsx b/packages/office-ui-fabric-react/src/components/Nav/Nav.tsx index 3baf0dee5849e5..12c9f846e39f88 100644 --- a/packages/office-ui-fabric-react/src/components/Nav/Nav.tsx +++ b/packages/office-ui-fabric-react/src/components/Nav/Nav.tsx @@ -116,7 +116,7 @@ export class Nav extends React.Component implements INav { [styles.linkIsOnExpanded]: this._hasExpandButton }) } href={ link.url } - icon={ link.icon } + iconName={ link.icon } description={ link.title || link.name } onClick={ this._onNavButtonLinkClicked.bind(this, link) }> { link.name } diff --git a/packages/office-ui-fabric-react/src/components/Overlay/examples/Overlay.Dark.Example.tsx b/packages/office-ui-fabric-react/src/components/Overlay/examples/Overlay.Dark.Example.tsx index f2675102700329..3bf7c9e31de84f 100644 --- a/packages/office-ui-fabric-react/src/components/Overlay/examples/Overlay.Dark.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Overlay/examples/Overlay.Dark.Example.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Overlay } from 'office-ui-fabric-react/lib/Overlay'; import './Overlay.Example.scss'; @@ -8,11 +8,7 @@ export class OverlayDarkExample extends React.Component { constructor() { super(); - this._onClick = this._onClick.bind(this); - - this.state = { - isOverlayVisible: false - }; + this.state = { isOverlayVisible: false }; } public render() { @@ -20,9 +16,14 @@ export class OverlayDarkExample extends React.Component { return (
- + this.setState({ isOverlayVisible: !isOverlayVisible }) } + text='Show the overlay' + /> { isOverlayVisible && ( - + this.setState({ isOverlayVisible: false }) }>

I am content within the overlay.

@@ -31,10 +32,4 @@ export class OverlayDarkExample extends React.Component {
); } - - public _onClick() { - this.setState({ - isOverlayVisible: !this.state.isOverlayVisible - }); - } } diff --git a/packages/office-ui-fabric-react/src/components/Overlay/examples/Overlay.Light.Example.tsx b/packages/office-ui-fabric-react/src/components/Overlay/examples/Overlay.Light.Example.tsx index 8cdd1deb3bc803..844bc3f54e1188 100644 --- a/packages/office-ui-fabric-react/src/components/Overlay/examples/Overlay.Light.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Overlay/examples/Overlay.Light.Example.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Overlay } from 'office-ui-fabric-react/lib/Overlay'; import './Overlay.Example.scss'; @@ -20,7 +20,7 @@ export class OverlayLightExample extends React.Component { return (
- + Show the overlay { isOverlayVisible && (
diff --git a/packages/office-ui-fabric-react/src/components/Panel/Panel.tsx b/packages/office-ui-fabric-react/src/components/Panel/Panel.tsx index a36b1b748e66a6..d9e38ad559ef90 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/Panel.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/Panel.tsx @@ -216,7 +216,8 @@ export class Panel extends BaseComponent { className={ css('ms-Panel-closeButton ms-PanelAction-close', styles.closeButton) } onClick={ this._onPanelClick } aria-label={ closeButtonAriaLabel } - data-is-visible={ true } icon='Cancel' + data-is-visible={ true } + iconName='Cancel' /> ); } diff --git a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.ExtraLarge.Example.tsx b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.ExtraLarge.Example.tsx index 553f2c79b72e91..f0cf81ace73616 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.ExtraLarge.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.ExtraLarge.Example.tsx @@ -1,23 +1,25 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel'; export class PanelExtraLargeExample extends React.Component { constructor() { super(); - this.state = { - showPanel: false - }; + this.state = { showPanel: false }; } public render() { return (
- + this.setState({ showPanel: true }) } + text='Open Panel' + /> this.setState({ showPanel: false }) } type={ PanelType.extraLarge } headerText='Extra Large Panel' closeButtonAriaLabel='Close' @@ -28,10 +30,4 @@ export class PanelExtraLargeExample extends React.Component { ); } - private _showPanel() { - this.setState({ showPanel: true }); - } - private _closePanel() { - this.setState({ showPanel: false }); - } } diff --git a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.Large.Example.tsx b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.Large.Example.tsx index 5f7d34402b2d85..bee73dabaf9a1a 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.Large.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.Large.Example.tsx @@ -1,23 +1,25 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel'; export class PanelLargeExample extends React.Component { constructor() { super(); - this.state = { - showPanel: false - }; + this.state = { showPanel: false }; } public render() { return (
- + this.setState({ showPanel: true }) } + text='Open Panel' + /> this.setState({ showPanel: false }) } type={ PanelType.large } headerText='Large Panel' > @@ -26,11 +28,4 @@ export class PanelLargeExample extends React.Component {
); } - - private _showPanel() { - this.setState({ showPanel: true }); - } - private _closePanel() { - this.setState({ showPanel: false }); - } } diff --git a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.LargeFixed.Example.tsx b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.LargeFixed.Example.tsx index 2cccd976905ecb..d0f4bea22b2509 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.LargeFixed.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.LargeFixed.Example.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel'; export class PanelLargeFixedExample extends React.Component { @@ -14,7 +14,11 @@ export class PanelLargeFixedExample extends React.Component { public render() { return (
- + { constructor() { super(); - this.state = { - showPanel: false - }; + + this.state = { showPanel: false }; } public render() { return (
- + this.setState({ showPanel: true }) } + /> this.setState({ showPanel: false }) } > Light Dismiss usage is meant for the Contextual Menu on mobile sized breakpoints.
); } - - private _showPanel() { - this.setState({ showPanel: true }); - } - private _closePanel() { - this.setState({ showPanel: false }); - } } diff --git a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.Medium.Example.tsx b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.Medium.Example.tsx index a2ca0eaa304b33..fd15b3d76b7f0d 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.Medium.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.Medium.Example.tsx @@ -1,23 +1,25 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel'; export class PanelMediumExample extends React.Component { constructor() { super(); - this.state = { - showPanel: false - }; + this.state = { showPanel: false }; } public render() { return (
- + this.setState({ showPanel: true }) } + text='Open Panel' + /> this.setState({ showPanel: false }) } type={ PanelType.medium } headerText='Medium Panel' > @@ -26,11 +28,4 @@ export class PanelMediumExample extends React.Component {
); } - - private _showPanel() { - this.setState({ showPanel: true }); - } - private _closePanel() { - this.setState({ showPanel: false }); - } } diff --git a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.NonModal.Example.tsx b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.NonModal.Example.tsx index 265ea57856c938..07025f5385d50f 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.NonModal.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.NonModal.Example.tsx @@ -1,24 +1,25 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel'; export class PanelNonModalExample extends React.Component { constructor() { super(); - this.state = { - showPanel: false - }; + this.state = { showPanel: false }; } public render() { return (
- + this.setState({ showPanel: true }) } + /> this.setState({ showPanel: false }) } type={ PanelType.medium } headerText='Non-Modal Panel' closeButtonAriaLabel='Close' @@ -28,11 +29,4 @@ export class PanelNonModalExample extends React.Component {
); } - - private _showPanel() { - this.setState({ showPanel: true }); - } - private _closePanel() { - this.setState({ showPanel: false }); - } } diff --git a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallFluid.Example.tsx b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallFluid.Example.tsx index 574e9d97562ae0..74e3c630a166e7 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallFluid.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallFluid.Example.tsx @@ -1,24 +1,26 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel'; export class PanelSmallFluidExample extends React.Component { constructor() { super(); - this.state = { - showPanel: false - }; + this.state = { showPanel: false }; } public render() { return (
- + this.setState({ showPanel: true }) } + text='Open Panel' + /> this.setState({ showPanel: false }) } headerText='Panel - Small, right-aligned, fixed' > Content goes here. @@ -27,10 +29,4 @@ export class PanelSmallFluidExample extends React.Component { ); } - private _showPanel() { - this.setState({ showPanel: true }); - } - private _closePanel() { - this.setState({ showPanel: false }); - } } diff --git a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallLeft.Example.tsx b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallLeft.Example.tsx index c0065fdf592a2a..e08042c96289b0 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallLeft.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallLeft.Example.tsx @@ -1,24 +1,26 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel'; export class PanelSmallLeftExample extends React.Component { constructor() { super(); - this.state = { - showPanel: false - }; + this.state = { showPanel: false }; } public render() { return (
- + this.setState({ showPanel: true }) } + text='Open Panel' + /> this.setState({ showPanel: false }) } headerText='Panel - Small, left-aligned, fixed' > Content goes here. @@ -26,11 +28,4 @@ export class PanelSmallLeftExample extends React.Component {
); } - - private _showPanel() { - this.setState({ showPanel: true }); - } - private _closePanel() { - this.setState({ showPanel: false }); - } } diff --git a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallRight.Example.tsx b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallRight.Example.tsx index 75898284c264c2..4e86b6dbcbcc5e 100644 --- a/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallRight.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Panel/examples/Panel.SmallRight.Example.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button, PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button'; +import { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { ChoiceGroup } from 'office-ui-fabric-react/lib/ChoiceGroup'; import { Panel, PanelType } from 'office-ui-fabric-react/lib/Panel'; @@ -15,7 +15,11 @@ export class PanelSmallRightExample extends React.Component { public render() { return (
- + { - +
); } diff --git a/packages/office-ui-fabric-react/src/components/Pivot/examples/Pivot.Remove.Example.tsx b/packages/office-ui-fabric-react/src/components/Pivot/examples/Pivot.Remove.Example.tsx index ad849310a08fb7..b8130a39c9afc2 100644 --- a/packages/office-ui-fabric-react/src/components/Pivot/examples/Pivot.Remove.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Pivot/examples/Pivot.Remove.Example.tsx @@ -6,7 +6,7 @@ import { PivotLinkSize, IPivotItemProps } from 'office-ui-fabric-react/lib/Pivot'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { Label } from 'office-ui-fabric-react/lib/Label'; export interface IPivotOnChangeExampleState { @@ -63,9 +63,10 @@ export class PivotRemoveExample extends React.Component
- +
); diff --git a/packages/office-ui-fabric-react/src/components/TeachingBubble/TeachingBubbleContent.tsx b/packages/office-ui-fabric-react/src/components/TeachingBubble/TeachingBubbleContent.tsx index 79aafe0443a940..35448b02330fbb 100644 --- a/packages/office-ui-fabric-react/src/components/TeachingBubble/TeachingBubbleContent.tsx +++ b/packages/office-ui-fabric-react/src/components/TeachingBubble/TeachingBubbleContent.tsx @@ -8,7 +8,7 @@ import { } from '../../Utilities'; import { ITeachingBubbleProps } from './TeachingBubble.Props'; import { ITeachingBubbleState } from './TeachingBubble'; -import { Button, ButtonType } from '../../Button'; +import { PrimaryButton, DefaultButton, IconButton } from '../../Button'; import { Image, ImageFit } from '../../Image'; import styles = require('./TeachingBubble.scss'); @@ -82,13 +82,13 @@ export class TeachingBubbleContent extends BaseComponent { primaryButtonProps && ( - + { isTeachingBubbleVisible ? (
diff --git a/packages/office-ui-fabric-react/src/components/TeachingBubble/examples/TeachingBubble.Condensed.Example.tsx b/packages/office-ui-fabric-react/src/components/TeachingBubble/examples/TeachingBubble.Condensed.Example.tsx index 9b92cb352b8136..be6920d61616f6 100644 --- a/packages/office-ui-fabric-react/src/components/TeachingBubble/examples/TeachingBubble.Condensed.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/TeachingBubble/examples/TeachingBubble.Condensed.Example.tsx @@ -1,7 +1,7 @@ /* tslint:disable:no-unused-variable */ import * as React from 'react'; /* tslint:enable:no-unused-variable */ -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { TeachingBubble } from 'office-ui-fabric-react/lib/TeachingBubble'; export interface ITeachingBubbleCondensedExampleState { @@ -27,7 +27,10 @@ export class TeachingBubbleCondensedExample extends React.Component this._menuButtonElement = menuButton }> - + { isTeachingBubbleVisible ? (
diff --git a/packages/office-ui-fabric-react/src/components/TeachingBubble/examples/TeachingBubble.Illustration.Example.tsx b/packages/office-ui-fabric-react/src/components/TeachingBubble/examples/TeachingBubble.Illustration.Example.tsx index c4bbfb02f94b31..0f1eb3779e4136 100644 --- a/packages/office-ui-fabric-react/src/components/TeachingBubble/examples/TeachingBubble.Illustration.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/TeachingBubble/examples/TeachingBubble.Illustration.Example.tsx @@ -3,7 +3,7 @@ import * as React from 'react'; /* tslint:enable:no-unused-variable */ import { IImageProps } from 'office-ui-fabric-react/lib/Image'; -import { Button, ButtonType, IButtonProps } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton, IButtonProps } from 'office-ui-fabric-react/lib/Button'; import { TeachingBubble } from 'office-ui-fabric-react/lib/TeachingBubble'; export interface ITeachingBubbleIllustrationExampleState { @@ -27,7 +27,6 @@ export class TeachingBubbleIllustrationExample extends React.Component this._menuButtonElement = menuButton }> - + { isTeachingBubbleVisible ? (
diff --git a/packages/office-ui-fabric-react/src/components/TextField/examples/NumberTextField.tsx b/packages/office-ui-fabric-react/src/components/TextField/examples/NumberTextField.tsx index 64cdec8b57943d..83dc9e4832bf25 100644 --- a/packages/office-ui-fabric-react/src/components/TextField/examples/NumberTextField.tsx +++ b/packages/office-ui-fabric-react/src/components/TextField/examples/NumberTextField.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { TextField } from 'office-ui-fabric-react/lib/TextField'; import './NumberTextField.scss'; @@ -36,9 +36,9 @@ export class NumberTextField extends React.Component
- +
); diff --git a/packages/office-ui-fabric-react/src/components/Toggle/Toggle.Props.ts b/packages/office-ui-fabric-react/src/components/Toggle/Toggle.Props.ts index 8f488d39977ae1..fb41ee6935dce3 100644 --- a/packages/office-ui-fabric-react/src/components/Toggle/Toggle.Props.ts +++ b/packages/office-ui-fabric-react/src/components/Toggle/Toggle.Props.ts @@ -1,9 +1,19 @@ import * as React from 'react'; import { Toggle } from './Toggle'; + +export interface IToggle { + focus: () => void; +} /** * Toggle component props. */ export interface IToggleProps extends React.HTMLProps { + /** + * Optional way to fetch the IButton interface. Use this instead of ref, to avoid accessing higher-order component + * wrappers rather than the IButton interface. + */ + componentRef?: (component: IToggle) => void; + /** * A label for the toggle. */ diff --git a/packages/office-ui-fabric-react/src/components/Toggle/Toggle.tsx b/packages/office-ui-fabric-react/src/components/Toggle/Toggle.tsx index 4ff1548c7aea08..186d4f43de872a 100644 --- a/packages/office-ui-fabric-react/src/components/Toggle/Toggle.tsx +++ b/packages/office-ui-fabric-react/src/components/Toggle/Toggle.tsx @@ -1,12 +1,13 @@ import * as React from 'react'; import { + BaseComponent, autobind, css, getId, buttonProperties, getNativeProps } from '../../Utilities'; -import { IToggleProps } from './Toggle.Props'; +import { IToggleProps, IToggle } from './Toggle.Props'; import { Label } from '../../Label'; import styles = require('./Toggle.scss'); @@ -14,7 +15,7 @@ export interface IToggleState { isChecked: boolean; } -export class Toggle extends React.Component { +export class Toggle extends BaseComponent implements IToggle { public static initialProps = { label: '', @@ -28,6 +29,10 @@ export class Toggle extends React.Component { constructor(props: IToggleProps) { super(); + this._warnMutuallyExclusive({ + checked: 'defaultChecked' + }); + this.state = { isChecked: !!(props.checked || props.defaultChecked) }; diff --git a/packages/office-ui-fabric-react/src/components/Tooltip/examples/Tooltip.Basic.Example.tsx b/packages/office-ui-fabric-react/src/components/Tooltip/examples/Tooltip.Basic.Example.tsx index b3c37a991acef1..93fdc950b5f1c3 100644 --- a/packages/office-ui-fabric-react/src/components/Tooltip/examples/Tooltip.Basic.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Tooltip/examples/Tooltip.Basic.Example.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; /* tslint:enable:no-unused-variable */ import { BaseComponent } from 'office-ui-fabric-react/lib/Utilities'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { TooltipHost } from 'office-ui-fabric-react/lib/Tooltip'; @@ -13,7 +13,7 @@ export class TooltipBasicExample extends BaseComponent { return (
- + Hover Over Me
); diff --git a/packages/office-ui-fabric-react/src/components/Tooltip/examples/Tooltip.Bottom.Example.tsx b/packages/office-ui-fabric-react/src/components/Tooltip/examples/Tooltip.Bottom.Example.tsx index d23204d7d95a79..e4d88025b83d6b 100644 --- a/packages/office-ui-fabric-react/src/components/Tooltip/examples/Tooltip.Bottom.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Tooltip/examples/Tooltip.Bottom.Example.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; /* tslint:enable:no-unused-variable */ import { BaseComponent } from 'office-ui-fabric-react/lib/Utilities'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; import { TooltipHost, TooltipDelay, @@ -14,7 +14,10 @@ export class TooltipBottomExample extends BaseComponent { public render() { return ( - + ); } diff --git a/packages/office-ui-fabric-react/src/components/pickers/PeoplePicker/PeoplePickerItems/SelectedItemDefault.tsx b/packages/office-ui-fabric-react/src/components/pickers/PeoplePicker/PeoplePickerItems/SelectedItemDefault.tsx index 0c99ab48ffe4cc..65bf15e09ab47a 100644 --- a/packages/office-ui-fabric-react/src/components/pickers/PeoplePicker/PeoplePickerItems/SelectedItemDefault.tsx +++ b/packages/office-ui-fabric-react/src/components/pickers/PeoplePicker/PeoplePickerItems/SelectedItemDefault.tsx @@ -30,11 +30,10 @@ export const SelectedItemDefault: (props: IPeoplePickerItemProps) => JSX.Element
{ if (onRemoveItem) { onRemoveItem(); } } } - icon={ 'Cancel' } + iconName={ 'Cancel' } className={ css('ms-PickerItem-content', styles.removeButton, styles.itemContent) } data-is-focusable={ false } - > - + />
); }; diff --git a/packages/office-ui-fabric-react/src/components/pickers/PeoplePicker/PeoplePickerItems/SelectedItemWithMenu.tsx b/packages/office-ui-fabric-react/src/components/pickers/PeoplePicker/PeoplePickerItems/SelectedItemWithMenu.tsx index 84eaefd8a13bdf..83163bd3543874 100644 --- a/packages/office-ui-fabric-react/src/components/pickers/PeoplePicker/PeoplePickerItems/SelectedItemWithMenu.tsx +++ b/packages/office-ui-fabric-react/src/components/pickers/PeoplePicker/PeoplePickerItems/SelectedItemWithMenu.tsx @@ -42,13 +42,13 @@ export class SelectedItemWithMenu extends React.Component
diff --git a/packages/office-ui-fabric-react/src/components/pickers/Suggestions/Suggestions.tsx b/packages/office-ui-fabric-react/src/components/pickers/Suggestions/Suggestions.tsx index 6a6f07905b1423..5e5f0cfd3cfb56 100644 --- a/packages/office-ui-fabric-react/src/components/pickers/Suggestions/Suggestions.tsx +++ b/packages/office-ui-fabric-react/src/components/pickers/Suggestions/Suggestions.tsx @@ -87,14 +87,16 @@ export class Suggestions extends BaseComponent, {}> { (onRenderNoResultFound ? onRenderNoResultFound(null, noResults) : noResults()) : this._renderSuggestions() } - { searchForMoreText && moreSuggestionsAvailable ? - ( + iconName={ 'Search' } + onClick={ this._getMoreResults.bind(this) } + > { searchForMoreText } - ) : (null) + + ) } }
); diff --git a/packages/office-ui-fabric-react/src/demo/GettingStartedPage.tsx b/packages/office-ui-fabric-react/src/demo/GettingStartedPage.tsx index dbe83b3fb7fabc..381d9d5d17fdf6 100644 --- a/packages/office-ui-fabric-react/src/demo/GettingStartedPage.tsx +++ b/packages/office-ui-fabric-react/src/demo/GettingStartedPage.tsx @@ -47,9 +47,9 @@ export class GettingStartedPage extends React.Component { { `import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import { Button } from 'office-ui-fabric-react/lib/Button'; +import { DefaultButton } from 'office-ui-fabric-react/lib/Button'; -const MyPage = () => (
); +const MyPage = () => (
I am a button.
); ReactDOM.render(, document.body.firstChild);` }
diff --git a/packages/utilities/src/BaseComponent.ts b/packages/utilities/src/BaseComponent.ts index ceedc500aef86b..569203f8fbaf45 100644 --- a/packages/utilities/src/BaseComponent.ts +++ b/packages/utilities/src/BaseComponent.ts @@ -41,6 +41,7 @@ export class BaseComponent extends React.Component { constructor(props?: P) { super(props); + this.props = props; this._shouldUpdateComponentRef = true; _makeAllSafe(this, BaseComponent.prototype, [ diff --git a/packages/utilities/src/Customizer.tsx b/packages/utilities/src/Customizer.tsx index 749433b2c22e70..d007f57250690c 100644 --- a/packages/utilities/src/Customizer.tsx +++ b/packages/utilities/src/Customizer.tsx @@ -4,7 +4,6 @@ import { assign } from './object'; export interface ISettings { [key: string]: any; - } export interface ICustomizerProps { @@ -15,6 +14,20 @@ export interface ICustomizerState { injectedProps?: ISettings; } +/** + * The Customizer component allows for default props to be mixed into components which + * are decorated with the customizable() decorator. This enables injection scenarios like: + * + * 1. render svg icons instead of the icon font within all buttons + * 2. inject a custom theme object into a component + * + * Props are provided via the settings prop, which should be a json map where the key is + * the name of the customizable component, and the value is are the props to pass in. + * + * @export + * @class Customizer + * @extends {BaseComponent} + */ export class Customizer extends BaseComponent { public static contextTypes = { injectedProps: React.PropTypes.object diff --git a/packages/utilities/src/warn.ts b/packages/utilities/src/warn.ts index 9e42efae4813dd..30052b554d1631 100644 --- a/packages/utilities/src/warn.ts +++ b/packages/utilities/src/warn.ts @@ -19,7 +19,7 @@ export function warnDeprecations( deprecationMap: IStringMap): void { for (const propName in deprecationMap) { - if (propName in props) { + if (props && propName in props) { let deprecationMessage = `${componentName} property '${propName}' was used but has been deprecated.`; const replacementPropName = deprecationMap[propName]; @@ -37,7 +37,7 @@ export function warnMutuallyExclusive( exclusiveMap: IStringMap): void { for (const propName in exclusiveMap) { - if (propName in props && exclusiveMap[propName] in props) { + if (props && propName in props && exclusiveMap[propName] in props) { _warningCallback( `${componentName} property '${propName}' is mutually exclusive with '${exclusiveMap[propName]}'. Use one or the other.` ); From b81fa02713805a041cf1bd0ca38727ffcc7ea735 Mon Sep 17 00:00:00 2001 From: David Zearing Date: Sat, 1 Apr 2017 10:26:04 -0700 Subject: [PATCH 07/25] Reverting command button example --- .../examples/Button.Command.Example.tsx | 88 ++++--------------- 1 file changed, 15 insertions(+), 73 deletions(-) diff --git a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx index d66124c5d46557..094362cb9113e2 100644 --- a/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/Button/examples/Button.Command.Example.tsx @@ -1,89 +1,31 @@ import * as React from 'react'; import { - CommandButton, - CompoundButton, - IconButton, - PrimaryButton, - DefaultButton, - IButton, - IButtonProps + CommandButton } from 'office-ui-fabric-react/lib/Button'; import { Label } from 'office-ui-fabric-react/lib/Label'; -import { Customizer, autobind } from 'office-ui-fabric-react/lib/Utilities'; +import { IButtonProps } from '../Button.Props'; -const BUTTON_PROPS: IButtonProps[] = [ - { - text: 'Text only button' - }, - { - iconName: 'Mail', - text: 'Text/icon button' - }, - { - iconName: 'Mail', - text: 'Text/icon/description button', - description: 'This is the description.' - }, - { - iconName: 'Mail', - text: 'Text/icon/description/href button', - description: 'This is the description.', - href: 'http://www.bing.com', - target: '_blank', - }, - { - iconName: 'Mail', - text: 'Text/icon/description/menu button', - description: 'This is the description.', - menuProps: { - items: [{ - key: 'item A', - name: 'Item A', - iconProps: { iconName: 'Mail' } - }] - } +export class ButtonCommandExample extends React.Component { + public constructor() { + super(); } -]; - -const BUTTON_VARIANTS = [ - { name: 'CommandButton', component: CommandButton }, - { name: 'CompoundButton', component: CompoundButton }, - { name: 'IconButton', component: IconButton }, - { name: 'DefaultButton', component: DefaultButton }, - { name: 'PrimaryButton', component: PrimaryButton } -]; - -export class ButtonCommandExample extends React.Component { - private _button: IButton; public render() { let { disabled } = this.props; return ( - -
- -
- - - - -
- - { BUTTON_VARIANTS.map(({ name, component: ButtonComponent }) => ( -
- - { BUTTON_PROPS.map((buttonProps, index) => ( - - )) } -
- )) } - -
-
+
+ + + Create account + +
); } - } From e22addc6832711854456c96864a918fed31f088a Mon Sep 17 00:00:00 2001 From: David Zearing Date: Sat, 1 Apr 2017 10:44:08 -0700 Subject: [PATCH 08/25] Re-adding deprecationMap as a parameter. --- packages/utilities/src/BaseComponent.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/utilities/src/BaseComponent.ts b/packages/utilities/src/BaseComponent.ts index 569203f8fbaf45..7f31cd0e7e82c2 100644 --- a/packages/utilities/src/BaseComponent.ts +++ b/packages/utilities/src/BaseComponent.ts @@ -38,12 +38,17 @@ export class BaseComponent extends React.Component { * @param {Object} deprecatedProps The map of deprecated prop names to new names, where the key is the old name and the * value is the new name. If a prop is removed rather than renamed, leave the value undefined. */ - constructor(props?: P) { + constructor(props?: P, deprecationMap?: IStringMap) { super(props); this.props = props; this._shouldUpdateComponentRef = true; + // We should remove the map parameter in a major bump. + if (deprecationMap) { + this._warnDeprecations(deprecationMap); + } + _makeAllSafe(this, BaseComponent.prototype, [ 'componentWillMount', 'componentDidMount', From dbc8b89e486763dfae072091189f2dc5264893c3 Mon Sep 17 00:00:00 2001 From: David Zearing Date: Sat, 1 Apr 2017 11:00:27 -0700 Subject: [PATCH 09/25] Reverting one change because of a cyclic versioning issue. --- .../example-app-base/src/components/ExampleCard/ExampleCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/example-app-base/src/components/ExampleCard/ExampleCard.tsx b/packages/example-app-base/src/components/ExampleCard/ExampleCard.tsx index 6bebe39b580076..28ecf1b5f49782 100644 --- a/packages/example-app-base/src/components/ExampleCard/ExampleCard.tsx +++ b/packages/example-app-base/src/components/ExampleCard/ExampleCard.tsx @@ -42,7 +42,7 @@ export class ExampleCard extends React.Component { code ? ( From 277ccdbd329334a09693034aa6f970bdb483c319 Mon Sep 17 00:00:00 2001 From: David Zearing Date: Sat, 1 Apr 2017 11:39:32 -0700 Subject: [PATCH 10/25] Fixing lint error. --- .../src/components/DocumentCard/DocumentCardActions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/office-ui-fabric-react/src/components/DocumentCard/DocumentCardActions.tsx b/packages/office-ui-fabric-react/src/components/DocumentCard/DocumentCardActions.tsx index e27813bfc63924..8eff41fb97d219 100644 --- a/packages/office-ui-fabric-react/src/components/DocumentCard/DocumentCardActions.tsx +++ b/packages/office-ui-fabric-react/src/components/DocumentCard/DocumentCardActions.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { css } from '../../Utilities'; import { IDocumentCardActionsProps } from './DocumentCard.Props'; -import { IconButton, ButtonType } from '../../Button'; +import { IconButton } from '../../Button'; import styles = require('./DocumentCard.scss'); export class DocumentCardActions extends React.Component { From 00cb7d174247d3bcfd6be338d127fa6479e54a88 Mon Sep 17 00:00:00 2001 From: David Zearing Date: Sun, 9 Apr 2017 10:47:48 -0700 Subject: [PATCH 11/25] Adding style package. --- packages/office-ui-fabric-react/package.json | 6 +- packages/styling/index.html | 41 + packages/styling/package.json | 41 + packages/styling/src/demoIndex.tsx | 27 + .../styling/src/examples/AnimationPage.tsx | 11 + packages/styling/src/examples/ColorPage.tsx | 79 + packages/styling/src/examples/FontPage.tsx | 44 + packages/styling/src/examples/IconPage.tsx | 131 + packages/styling/src/index.ts | 0 packages/styling/src/styles/colors.ts | 234 + packages/styling/src/styles/fonts.ts | 107 + packages/styling/src/styles/icons.ts | 728 +++ packages/styling/src/utilities/colorValues.ts | 150 + packages/styling/src/utilities/colors.ts | 309 ++ packages/styling/src/utilities/theme.ts | 0 packages/styling/tsconfig.json | 28 + packages/styling/webpack.serve.config.js | 47 + packages/styling/yarn.lock | 4364 +++++++++++++++++ rush.json | 2 +- 19 files changed, 6343 insertions(+), 6 deletions(-) create mode 100644 packages/styling/index.html create mode 100644 packages/styling/package.json create mode 100644 packages/styling/src/demoIndex.tsx create mode 100644 packages/styling/src/examples/AnimationPage.tsx create mode 100644 packages/styling/src/examples/ColorPage.tsx create mode 100644 packages/styling/src/examples/FontPage.tsx create mode 100644 packages/styling/src/examples/IconPage.tsx create mode 100644 packages/styling/src/index.ts create mode 100644 packages/styling/src/styles/colors.ts create mode 100644 packages/styling/src/styles/fonts.ts create mode 100644 packages/styling/src/styles/icons.ts create mode 100644 packages/styling/src/utilities/colorValues.ts create mode 100644 packages/styling/src/utilities/colors.ts create mode 100644 packages/styling/src/utilities/theme.ts create mode 100644 packages/styling/tsconfig.json create mode 100644 packages/styling/webpack.serve.config.js create mode 100644 packages/styling/yarn.lock diff --git a/packages/office-ui-fabric-react/package.json b/packages/office-ui-fabric-react/package.json index 396f58e28d0232..979fd23cdd06a8 100644 --- a/packages/office-ui-fabric-react/package.json +++ b/packages/office-ui-fabric-react/package.json @@ -66,10 +66,6 @@ }, "dependencies": { "@microsoft/load-themed-styles": "^1.2.2", - "@uifabric/utilities": "1.4.0" - }, - "peerDependencies": { - "react": "^0.14 || ^15.0.1-0 || ^16.0.0-0", - "react-dom": "^0.14 || ^15.0.1-0 || ^16.0.0-0" + "@uifabric/utilities": ">=1.4.0-0 <=2.0.0-0" } } \ No newline at end of file diff --git a/packages/styling/index.html b/packages/styling/index.html new file mode 100644 index 00000000000000..3e3a7bb4c56a70 --- /dev/null +++ b/packages/styling/index.html @@ -0,0 +1,41 @@ + + + + + + + + Styling Examples + + + + +
+ + + + \ No newline at end of file diff --git a/packages/styling/package.json b/packages/styling/package.json new file mode 100644 index 00000000000000..92c579902934c2 --- /dev/null +++ b/packages/styling/package.json @@ -0,0 +1,41 @@ +{ + "name": "@uifabric/styling", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node node_modules/webpack-dev-server/bin/webpack-dev-server.js --config webpack.serve.config.js --open" + }, + "devDependencies": { + "@types/chai": "^3.4.35", + "@types/enzyme": "^2.7.5", + "@types/mocha": "^2.2.39", + "@types/react": "^15.0.16", + "@types/react-addons-test-utils": "^0.14.17", + "@types/react-dom": "^0.14.23", + "@types/webpack-env": "^1.13.0", + "@uifabric/example-app-base": "1.3.4", + "@uifabric/utilities": ">=1.4.0-0 <2.0.0-0", + "chai": "^3.5.0", + "enzyme": "^2.7.0", + "es6-promise": "3.2.1", + "glamor": "^2.20.24", + "gulp": "~3.9.1", + "mocha": "^3.2.0", + "mocha-loader": "^1.1.1", + "react": "^15.4.2", + "react-addons-test-utils": "^15.4.2", + "react-dom": "^15.4.2", + "source-map-loader": "0.1.5", + "ts-loader": "^2.0.1", + "tslint": "^3.15.1", + "tslint-microsoft-contrib": "^2.0.9", + "typescript": "^2.2.1", + "webpack": "^2.2.1", + "webpack-bundle-analyzer": "^2.2.1", + "webpack-dev-server": "^2.4.1", + "webpack-notifier": "^1.5.0", + "webpack-split-by-path": "0.0.10" + }, + "dependencies": {} +} \ No newline at end of file diff --git a/packages/styling/src/demoIndex.tsx b/packages/styling/src/demoIndex.tsx new file mode 100644 index 00000000000000..cde7b42f6fd936 --- /dev/null +++ b/packages/styling/src/demoIndex.tsx @@ -0,0 +1,27 @@ +import * as React from 'react'; + +import * as Glamor from 'glamor'; +Glamor['speedy'](true); + +import { examplesOf, createApp } from '@uifabric/example-app-base'; +import { ColorPage } from './examples/ColorPage'; +import { FontPage } from './examples/FontPage'; +import { IconPage } from './examples/IconPage'; +import { AnimationPage } from './examples/AnimationPage'; + +createApp([ + examplesOf('Styling') + .add('Colors', () => ( + + )) + .add('Typography', () => ( + + )) + .add('Icons', () => ( + + )) + .add('Animations', () => ( + + )) + +], false); diff --git a/packages/styling/src/examples/AnimationPage.tsx b/packages/styling/src/examples/AnimationPage.tsx new file mode 100644 index 00000000000000..8cd5c552c1a2ce --- /dev/null +++ b/packages/styling/src/examples/AnimationPage.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import { BaseComponent } from '@uifabric/utilities'; + +export class AnimationPage extends BaseComponent<{}, {}> { + + public render(): JSX.Element { + return ( +
I am the AnimationPage
+ ); + } +} diff --git a/packages/styling/src/examples/ColorPage.tsx b/packages/styling/src/examples/ColorPage.tsx new file mode 100644 index 00000000000000..437d9457408cef --- /dev/null +++ b/packages/styling/src/examples/ColorPage.tsx @@ -0,0 +1,79 @@ +import * as React from 'react'; +import { BaseComponent } from '@uifabric/utilities'; +import { css } from 'glamor'; +import { defaultPalette } from '../styles/colors'; +import { fonts } from '../styles/fonts'; +import { cssColor, rgb2hsv } from '../utilities/colors'; +import { DetailsList } from 'office-ui-fabric-react/lib/DetailsList'; + +const styles = { + root: { + padding: '20px' + }, + header: { + ...fonts.xLarge, + paddingBottom: '20px' + }, + swatch: { + display: 'inline-block', + verticalAlign: 'middle', + width: 20, + height: 20, + borderRadius: '50%', + marginRight: '8px' + }, + cell: { + ...fonts.small, + display: 'inline-block', + vertikcalAlign: 'middle', + }, + swatchText: { + ...fonts.code + } +}; + +export class ColorPage extends BaseComponent<{}, { details?: any }> { + constructor() { + super(); + + this.state = { details: null }; + } + public render(): JSX.Element { + let { details } = this.state; + let items = Object.keys(defaultPalette).map(colorName => { + let colorValue = defaultPalette[colorName]; + let rgb = cssColor(colorValue); + let hsv = rgb ? rgb2hsv(rgb.r, rgb.g, rgb.b) : null; + + return { + colorValue, + colorName, + ...rgb, + ...hsv + }; + }); + + return ( +
+
Colors
+ ( +
+ { column.fieldName === 'colorValue' ? ( +
+
+
{ item.colorValue }
+
+ ) : ( +
{ item[column.fieldName] }
+ ) } +
+ ) } + /> +
+ ); + } +} diff --git a/packages/styling/src/examples/FontPage.tsx b/packages/styling/src/examples/FontPage.tsx new file mode 100644 index 00000000000000..c2589c94bf5d30 --- /dev/null +++ b/packages/styling/src/examples/FontPage.tsx @@ -0,0 +1,44 @@ +import * as React from 'react'; +import { BaseComponent } from '@uifabric/utilities'; +import { css } from 'glamor'; +import { fonts } from '../styles/fonts'; +import { defaultPalette } from '../styles/colors'; + +const styles: any = { + root: { + padding: '20px' + }, + header: { + ...fonts.xLarge, + paddingBottom: '20px' + }, + row: { + paddingBottom: '10px', + borderBottom: '1px solid #aaa', + userSelect: 'none' + }, + cell: { + ...fonts.medium + } +}; + +export class FontPage extends BaseComponent<{}, {}> { + + public render(): JSX.Element { + return ( +
+
Fonts
+ + { Object.keys(fonts).map(fontName => ( + + + + + + )) } +
{ `fonts.${fontName}` }{ `${fonts[fontName].fontSize}` }The quick brown fox jumps over the lazy dog
+
+ ); + } +} + diff --git a/packages/styling/src/examples/IconPage.tsx b/packages/styling/src/examples/IconPage.tsx new file mode 100644 index 00000000000000..42ffd1424c7721 --- /dev/null +++ b/packages/styling/src/examples/IconPage.tsx @@ -0,0 +1,131 @@ +import * as React from 'react'; +import { BaseComponent } from '@uifabric/utilities'; +import { css, CSSProperties } from 'glamor'; +import { icons } from '../styles/icons'; +import { fonts, iconFont } from '../styles/fonts'; +import { defaultPalette } from '../styles/colors'; +import { SearchBox } from 'office-ui-fabric-react/lib/SearchBox'; +import { FocusZone } from 'office-ui-fabric-react/lib/FocusZone'; + +const styles = { + root: css({ + padding: '20px' + }), + + header: css( + fonts.xLarge, + { + paddingBottom: '20px' + } + ), + + row: css({ + paddingBottom: '10px', + borderBottom: '1px solid #aaa', + userSelect: 'none' + }), + cell: css( + fonts.medium, + { margin: '0 4px' } + ), + + iconTile: css( + fonts.xSmall, + { + flexShrink: 0, + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + margin: '5px', + width: 150, + height: 80, + opacity: .6, + cursor: 'default', + outline: 'none', + position: 'relative', + + ':focus:after': { + content: '""', + position: 'absolute', + left: 0, + top: 0, + right: 0, + bottom: 0, + border: '1px solid ' + defaultPalette.themePrimary + }, + ':focus': { + opacity: 1, + background: defaultPalette.themeLighterAlt + }, + ':hover': { + opacity: 1, + background: defaultPalette.themeLighterAlt + }, + ':focus:hover': { + background: defaultPalette.themeLight + } + }), + + icon: css( + iconFont, + { + fontSize: '36px', + paddingBottom: '8px' + }), + + container: css({ + display: 'flex', + justifyContent: 'center', + flexWrap: 'wrap' + }) + +}; + +export function IconTile(props) { + let { iconName, ...divProps } = props; + return ( +
+ +
{ iconName }
+
+ ); +} + +export class IconPage extends BaseComponent<{}, any> { + constructor() { + super(); + + this.state = { + iconNames: Object.keys(icons) + }; + } + + public render(): JSX.Element { + let { iconNames } = this.state; + return ( +
+
Icons
+ + +
+ { iconNames.map(iconName => ( + + )) } +
+
+
+ ); + } + + private _onSearchChange = (value: string): void => { + let iconNames: string[] = Object.keys(icons); + + value = value.toLocaleLowerCase(); + + if (value) { + iconNames = iconNames.filter((name: string) => name.toLocaleLowerCase().indexOf(value) >= 0); + } + this.setState({ iconNames }); + } +} diff --git a/packages/styling/src/index.ts b/packages/styling/src/index.ts new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/packages/styling/src/styles/colors.ts b/packages/styling/src/styles/colors.ts new file mode 100644 index 00000000000000..e27f37d57df595 --- /dev/null +++ b/packages/styling/src/styles/colors.ts @@ -0,0 +1,234 @@ +/* themed tokens */ + +export function generatePalette(themeColor: string) { +} + +export const defaultPalette = { + themeDarker: '#004578', + themeDark: '#005a9e', + themeDarkAlt: '#106ebe', + themePrimary: '#0078d7', + themeSecondary: '#2b88d8', + themeTertiary: '#71afe5', + themeLight: '#c7e0f4', + themeLighter: '#deecf9', + themeLighterAlt: '#eff6fc', + + black: '#000000', + blackTranslucent40: 'rgba(0,0,0,.4)', + neutralDark: '#212121', + neutralPrimary: '#333333', + neutralPrimaryAlt: '#3c3c3c', + neutralSecondary: '#666666', + neutralSecondaryAlt: '#767676', + neutralTertiary: '#a6a6a6', + neutralTertiaryAlt: '#c8c8c8', + neutralQuaternary: '#d0d0d0', + neutralQuaternaryAlt: '#dadada', + neutralLight: '#eaeaea', + neutralLighter: '#f4f4f4', + neutralLighterAlt: '#f8f8f8', + white: '#ffffff', + whiteTranslucent40: 'rgba(255,255,255,.4)', + + yellow: '#ffb900', + yellowLight: '#fff100', + orange: '#d83b01', + orangeLight: '#ff8c00', + redDark: '#a80000', + red: '#e81123', + magentaDark: '#5c005c', + magenta: '#b4009e', + magentaLight: '#e3008c', + purpleDark: '#32145a', + purple: '#5c2d91', + purpleLight: '#b4a0ff', + blueDark: '#002050', + blueMid: '#00188f', + blue: '#0078d7', + blueLight: '#00bcf2', + tealDark: '#004b50', + teal: '#008272', + tealLight: '#00b294', + greenDark: '#004b1c', + green: '#107c10', + greenLight: '#bad80a', + error: '#a80000', + errorText: '#333333', + errorBackground: '#fde7e9', + success: '#107c10', + successText: '#333333', + successBackground: '#dff6dd', + alert: '#d83b01', + alertText: '#333333', + alertBackground: '#deecf9', + warning: '#767676', + warningText: '#333333', + warningBackground: '#fff4ce', + severeWarning: '#d83b01', + severeWarningText: '#333333', + severeWarningBackground: '#fed9cc', + info: '#767676', + infoText: '#333333', + infoBackground: '#f4f4f4', + orangeLighter: '#ea4300' +}; + +export interface ISwatch { + color: string; + + /* If defined, can validate that the resulting color is contrasting enough. */ + backgroundSwatch: string; +} + +export interface IColorScheme { + + // Background color in various states. + + background: ISwatch; + backgroundHover: ISwatch; + backgroundPressed: ISwatch; + backgroundSelected: ISwatch; + backgroundSelectionHighlight: ISwatch; + + // Foreground color. + + text: ISwatch; + textRest: ISwatch; + textHover: ISwatch; + textPressed: ISwatch; + textSelected: ISwatch; + textDisabled: ISwatch; + textSelectionHighlight: ISwatch; + + // Sublabels. + + secondaryText: ISwatch; + secondaryTextRest: ISwatch; + secondaryTextHover: ISwatch; + secondaryTextPressed: ISwatch; + secondaryTextSelected: ISwatch; + + // Bold text. + + emphasizedText: ISwatch; + emphasizedTextRest: ISwatch; + emphasizedTextHover: ISwatch; + emphasizedTextPressed: ISwatch; + emphasizedTextSelected: ISwatch; + + // Border colors for selected/hover and focus. + + strokeSelectedHover: ISwatch; + strokeFocus: ISwatch; + + // Default button background. + + controlBackground: ISwatch; + controlBackgroundHover: ISwatch; + controlBackgroundPressed: ISwatch; + controlBackgroundSelected: ISwatch; + controlBackgroundDisabled: ISwatch; + + // Default button foreground. + + controlText: ISwatch; + controlTextHover: ISwatch; + controlTextPressed: ISwatch; + controlTextSelected: ISwatch; + controlTextDisabled: ISwatch; + + // Default button stroke. + + controlStroke: ISwatch; + controlStrokeHover: ISwatch; + controlStrokePressed: ISwatch; + controlStrokeSelected: ISwatch; + controlStrokeDisabled: ISwatch; + controlStrokeFocus: ISwatch; + + // Emphasized (primary) button background. + + emphasizedControlBackground: ISwatch; + emphasizedControlBackgroundHover: ISwatch; + emphasizedControlBackgroundPressed: ISwatch; + emphasizedControlBackgroundSelected: ISwatch; + emphasizedControlBackgroundDisabled: ISwatch; + + // Emphasized button foreground. + + emphasizedControlText: ISwatch; + emphasizedControlTextHover: ISwatch; + emphasizedControlTextPressed: ISwatch; + emphasizedControlTextSelected: ISwatch; + emphasizedControlTextDisabled: ISwatch; + + // Emphasized button stroke. + + emphasizedControlStroke: ISwatch; + emphasizedControlStrokeHover: ISwatch; + emphasizedControlStrokePressed: ISwatch; + emphasizedControlStrokeSelected: ISwatch; + emphasizedControlStrokeDisabled: ISwatch; + emphasizedControlStrokeFocus: ISwatch; + + // Subtle control background (TextField, Dropdown, Checkbox, ChoiceGroup) + + subtleControlBackground: ISwatch; + subtleControlBackgroundHover: ISwatch; + subtleControlBackgroundPressed: ISwatch; + subtleControlBackgroundSelected: ISwatch; + subtleControlBackgroundDisabled: ISwatch; + + // Subtle control foreground. + + subtleControlText: ISwatch; + subtleControlTextHover: ISwatch; + subtleControlTextPressed: ISwatch; + subtleControlTextSelected: ISwatch; + subtleControlTextDisabled: ISwatch; + + // Subtle control stroke. + + subtleControlStroke: ISwatch; + subtleControlStrokeHover: ISwatch; + subtleControlStrokePressed: ISwatch; + subtleControlStrokeSelected: ISwatch; + subtleControlStrokeDisabled: ISwatch; + subtleControlStrokeFocus: ISwatch; + + // Hyperlinks. + + linkText: ISwatch; + linkHover: ISwatch; + linkPressed: ISwatch; + + // Active text + + activeText: ISwatch; + activeTextHover: ISwatch; + activeTextPressed: ISwatch; + activeTextSelected: ISwatch; + + // Stroke Only -- Stroke colors to use when the background / foreground doesn't change (Ex: Color Picker Swatches) + + strokeOnlyHover: ISwatch; + strokeOnlySelected: ISwatch; + strokeOnlyPressed: ISwatch; + + // Error State - Used for error text / foreground color + errorText: ISwatch; + errorTextHover: ISwatch; + errorTextPressed: ISwatch; + errorTextSelected: ISwatch; + + // Accent colors + + accentDark: ISwatch; + accentLight: ISwatch; + accentEmphasis: ISwatch; + accentOutline: ISwatch; + + headerBackground: ISwatch; + headerText: ISwatch; +}; \ No newline at end of file diff --git a/packages/styling/src/styles/fonts.ts b/packages/styling/src/styles/fonts.ts new file mode 100644 index 00000000000000..362abda4b354fa --- /dev/null +++ b/packages/styling/src/styles/fonts.ts @@ -0,0 +1,107 @@ +import { css, fontFace, CSSProperties } from 'glamor'; + +const FONT_BASE_URL: string = 'https://static2.sharepointonline.com/files/fabric/assets/fonts/segoeui-westeuropean'; +const ICON_BASE_URL: string = 'https://static2.sharepointonline.com/files/fabric/assets/icons'; + +const systemBase: string = '"Segoe UI", -apple-system, BlinkMacSystemFont, "Roboto", "Helvetica Neue", sans-serif'; +const familyBase: string = '"Segoe UI WestEuropean", ' + systemBase; + +const lightWeight: number = 100; +const semilightWeight: number = 300; +const regularWeight: number = 400; +const semiboldWeight: number = 600; + +const miniSize: string = '10px'; +const xSmallSize: string = '11px'; +const smallSize: string = '12px'; +const smallPlusSize: string = '13px'; +const mediumSize: string = '14px'; +const mediumPlusSize: string = '15px'; +const largeSize: string = '17px'; +const xLargeSize: string = '21px'; +const xxLargeSize: string = '28px'; +const superSize: string = '42px'; + +export const fonts: any = { + mini: _createFont(miniSize, semiboldWeight), + xSmall: _createFont(xSmallSize, regularWeight), + small: _createFont(smallSize, regularWeight), + smallPlus: _createFont(smallPlusSize, regularWeight), + medium: _createFont(mediumSize, regularWeight), + mediumPlus: _createFont(mediumPlusSize, regularWeight), + large: _createFont(largeSize, semilightWeight), + xLarge: _createFont(xLargeSize, lightWeight), + xxLarge: _createFont(xxLargeSize, lightWeight), + superLarge: _createFont(superSize, lightWeight), + code: { + fontFamily: '"Courier New", "Consolas"', + fontSize: '12px' + } +}; + +export const iconFont = { + fontFamily: '"FabricMDL2Icons"', + fontWeight: regularWeight, + fontStyle: 'normal' +}; + +function _createFont(size: string, weight: number): CSSProperties { + return { + fontFamily: familyBase, + WebkitFontSmoothing: 'antialiased', + fontSize: size, + fontWeight: weight + }; +} + +function _registerFontFace( + fontFamily: string, + fontName: string, + baseUrl: string, + fontFileName: string, + fontWeight: number +): void { + fontFace({ + fontFamily, + src: + `local('${fontName}'),` + + `url('${baseUrl}/${fontFileName}.woff2') format('woff2'),` + + `url('${baseUrl}/${fontFileName}.woff') format('woff'),` + + `url('${baseUrl}/${fontFileName}.ttf') format('truetype')`, + fontWeight, + fontStyle: 'normal' + }); +} + +[ + 'Arabic', + 'Cyrillic', + 'EastEuropean', + 'Greek', + 'Hebrew', + 'Vietnamese', + 'WestEuropean' +].forEach(language => { + _registerFontFace(`'Segoe UI${language ? ' ' + language : ''}'`, 'Segoe UI Light', FONT_BASE_URL, 'segoeui-light', lightWeight); + _registerFontFace(`'Segoe UI${language ? ' ' + language : ''}'`, 'Segoe UI Semilight', FONT_BASE_URL, 'segoeui-semilight', 200); + _registerFontFace(`'Segoe UI${language ? ' ' + language : ''}'`, 'Segoe UI', FONT_BASE_URL, 'segoeui-regular', regularWeight); + _registerFontFace(`'Segoe UI${language ? ' ' + language : ''}'`, 'Segoe UI Semibold', FONT_BASE_URL, 'segoeui-semibold', semiboldWeight); +}); + +// Icon font +_registerFontFace('FabricMDL2Icons', 'FabricMDL2Icons', ICON_BASE_URL, 'fabricmdl2icons', regularWeight); + +/* + +css({ + fontFace: { + fontFamily: "Segoe UI Light", + src: + `url('${FONT_BASE_URL}/segoeui-light.woff2') format('woff2'),` + + `url('${fontBaseUrl}/segoeui-light.woff2') format('woff'),` + + `url('${fontBaseUrl}/segoeui-light.woff2') format('truetype'),`, + fontWeight: light, + fontStyle: 'normal' + } +}); +*/ \ No newline at end of file diff --git a/packages/styling/src/styles/icons.ts b/packages/styling/src/styles/icons.ts new file mode 100644 index 00000000000000..b054eb5255385d --- /dev/null +++ b/packages/styling/src/styles/icons.ts @@ -0,0 +1,728 @@ +import { fonts } from './fonts'; +import { before, css, StyleAttribute } from 'glamor'; + +console.time('createIcon'); + +export const icons = { + aadLogo: '', + accept: '', + accessLogo: '', + accounts: '', + add: '', + addEvent: '', + addFavorite: '', + addFavoriteFill: '', + addFriend: '', + addGroup: '', + addOnlineMeeting: '', + addPhone: '', + addTo: '', + admin: '', + adminALogo: '', + adminCLogo: '', + adminDLogo: '', + adminELogo: '', + adminLLogo: '', + adminMLogo: '', + adminOLogo: '', + adminPLogo: '', + adminSLogo: '', + adminYLogo: '', + airTickets: '', + airplane: '', + alarmClock: '', + album: '', + albumRemove: '', + alchemyLogo: '', + alignCenter: '', + alignLeft: '', + alignRight: '', + androidLogo: '', + annotation: '', + appForOfficeLogo: '', + appIconDefault: '', + arrivals: '', + arrowDownRight8: '', + arrowDownRightMirrored8: '', + arrowUpRight8: '', + arrowUpRightMirrored8: '', + articles: '', + ascending: '', + assetLibrary: '', + asterisk: '', + atpLogo: '', + attach: '', + australianRules: '', + autoEnhanceOff: '', + autoEnhanceOn: '', + autoRacing: '', + awayStatus: '', + azureLogo: '', + back: '', + backToWindow: '', + badge: '', + balloons: '', + barChart4: '', + barChartHorizontal: '', + baseball: '', + bidiLtr: '', + bidiRtl: '', + bingLogo: '', + blockContact: '', + blocked2: '', + blocked: '', + blowingSnow: '', + boards: '', + bold: '', + bookingsLogo: '', + bookmarks: '', + bookmarksMirrored: '', + boxLogo: '', + branchFork: '', + breadcrumb: '', + brightness: '', + broom: '', + bufferTimeAfter: '', + bufferTimeBefore: '', + bufferTimeBoth: '', + bulletedList: '', + bulletedListMirrored: '', + busSolid: '', + cafe: '', + cake: '', + calculatorAddition: '', + calculatorSubtract: '', + calendar: '', + calendarAgenda: '', + calendarDay: '', + calendarMirrored: '', + calendarReply: '', + calendarWeek: '', + calendarWorkWeek: '', + caloriesAdd: '', + camera: '', + cancel: '', + car: '', + caretBottomLeftSolid8: '', + caretBottomRightSolid8: '', + caretDown8: '', + caretDownSolid8: '', + caretHollow: '', + caretHollowMirrored: '', + caretLeft8: '', + caretLeftSolid8: '', + caretRight8: '', + caretRightSolid8: '', + caretSolid: '', + caretSolidMirrored: '', + caretTopLeftSolid8: '', + caretTopRightSolid8: '', + caretUp8: '', + caretUpSolid8: '', + cat: '', + cellPhone: '', + certificate: '', + chart: '', + chat: '', + chatInviteFriend: '', + checkList: '', + checkMark: '', + checkbox: '', + checkboxComposite: '', + checkboxIndeterminate: '', + chevronDown: '', + chevronDownMed: '', + chevronDownSmall: '', + chevronLeft: '', + chevronLeftMed: '', + chevronLeftSmall: '', + chevronRight: '', + chevronRightMed: '', + chevronRightSmall: '', + chevronUp: '', + chevronUpMed: '', + chevronUpSmall: '', + chromeBack: '', + chromeBackMirrored: '', + chromeClose: '', + chromeMinimize: '', + circleFill: '', + circleHalfFull: '', + circlePlus: '', + circleRing: '', + classNotebookLogo: '', + classroomLogo: '', + clear: '', + clearFilter: '', + clearFormatting: '', + clearNight: '', + clock: '', + closePane: '', + closePaneMirrored: '', + closedCaption: '', + cloudAdd: '', + cloudDownload: '', + cloudUpload: '', + cloudWeather: '', + cloudy: '', + cocktails: '', + code: '', + coffee: '', + collabsDbLogo: '', + collapseMenu: '', + collegeFootball: '', + collegeHoops: '', + color: '', + combine: '', + compassNw: '', + completed: '', + completedSolid: '', + contact: '', + contactCard: '', + contactInfo: '', + contrast: '', + copy: '', + cotton: '', + cricket: '', + css: '', + customList: '', + customListMirrored: '', + cycling: '', + dataConnectionLibrary: '', + dateTime2: '', + dateTime: '', + dateTimeMirrored: '', + decreaseIndentLegacy: '', + delete: '', + delveAnalytics: '', + delveAnalyticsLogo: '', + delveLogo: '', + descending: '', + design: '', + developerTools: '', + devices3: '', + devices4: '', + dialpad: '', + dictionary: '', + dietPlanNotebook: '', + disableUpdates: '', + dislike: '', + docLibrary: '', + dockLeft: '', + dockLeftMirrored: '', + dockRight: '', + docsLogo: '', + document: '', + documentReply: '', + documentSearch: '', + documentSet: '', + documentation: '', + door: '', + doubleBookmark: '', + doubleChevronDown12: '', + doubleChevronDown: '', + doubleChevronLeft12: '', + doubleChevronLeft: '', + doubleChevronLeftMed: '', + doubleChevronLeftMedMirrored: '', + doubleChevronRight12: '', + doubleChevronRight: '', + doubleChevronUp12: '', + doubleChevronUp: '', + down: '', + download: '', + drm: '', + drop: '', + dropboxLogo: '', + dropdown: '', + duststorm: '', + dynamicSmbLogo: '', + dynamics365Logo: '', + eatDrink: '', + edgeLogo: '', + edit: '', + editMail: '', + editMirrored: '', + editNote: '', + editPhoto: '', + editStyle: '', + embed: '', + emi: '', + emoji2: '', + emoji: '', + emojiDisappointed: '', + emojiNeutral: '', + emptyRecycleBin: '', + equalizer: '', + eraseTool: '', + error: '', + errorBadge: '', + event: '', + eventInfo: '', + excelDocument: '', + excelLogo: '', + exchangeLogo: '', + expandMenu: '', + fabricAssetLibrary: '', + fabricDataConnectionLibrary: '', + fabricDocLibrary: '', + fabricFolder: '', + fabricFolderFill: '', + fabricFolderSearch: '', + fabricFormLibrary: '', + fabricFormLibraryMirrored: '', + fabricMovetoFolder: '', + fabricNewFolder: '', + fabricOpenFolderHorizontal: '', + fabricPictureLibrary: '', + fabricPublicFolder: '', + fabricReportLibrary: '', + fabricReportLibraryMirrored: '', + fabricSyncFolder: '', + fabricUnsyncFolder: '', + facebookLogo: '', + family: '', + fangBody: '', + favoriteList: '', + favoriteStar: '', + favoriteStarFill: '', + fax: '', + ferry: '', + ferrySolid: '', + filter: '', + filters: '', + financial: '', + fingerprint: '', + flag: '', + flickDown: '', + flickLeft: '', + flickRight: '', + flickUp: '', + flow: '', + fog: '', + folder: '', + folderFill: '', + folderHorizontal: '', + folderOpen: '', + folderSearch: '', + font: '', + fontColor: '', + fontDecrease: '', + fontIncrease: '', + fontSize: '', + formLibrary: '', + formLibraryMirrored: '', + forward: '', + forwardEvent: '', + freezing: '', + frigid: '', + fullCircleMask: '', + fullScreen: '', + generate: '', + giftCard: '', + giftbox: '', + glasses: '', + glimmer: '', + globalNavButton: '', + globe: '', + globeFavorite: '', + golf: '', + googleDriveLogo: '', + gotoToday: '', + gripperTool: '', + group: '', + groupedAscending: '', + groupedDescending: '', + groupedList: '', + hailDay: '', + hailNight: '', + handwriting: '', + header1: '', + header2: '', + header3: '', + header4: '', + headset: '', + health: '', + heart: '', + heartFill: '', + help: '', + helpMirrored: '', + hide2: '', + hide: '', + history: '', + home: '', + homeSolid: '', + hospital: '', + hotel: '', + iOsAppStoreLogo: '', + important: '', + inboxCheck: '', + incidentTriangle: '', + increaseIndentLegacy: '', + info2: '', + info: '', + insertTextBox: '', + internetSharing: '', + issueTracking: '', + issueTrackingMirrored: '', + italic: '', + joinOnlineMeeting: '', + js: '', + label: '', + landscapeOrientation: '', + laptopSelected: '', + largeGrid: '', + library: '', + lifesaver: '', + lifesaverLock: '', + light: '', + lightbulb: '', + lightningBolt: '', + like: '', + link: '', + list: '', + listMirrored: '', + location: '', + locationCircle: '', + locationDot: '', + locationFill: '', + lock: '', + lowerBrightness: '', + lyncLogo: '', + mail: '', + mailAlert: '', + mailCheck: '', + mailFill: '', + mailForward: '', + mailForwardMirrored: '', + mailLowImportance: '', + mailPause: '', + mailRepeat: '', + mailReply: '', + mailReplyAll: '', + mailReplyAllMirrored: '', + mailReplyMirrored: '', + mapDirections: '', + mapPin: '', + market: '', + marketDown: '', + megaphone: '', + memo: '', + merge: '', + message: '', + messageFill: '', + microphone: '', + microsoftStaffhubLogo: '', + miniLink: '', + mobileSelected: '', + money: '', + more: '', + moreSports: '', + move: '', + moveToFolder: '', + msnLogo: '', + multiSelect: '', + multiSelectMirrored: '', + musicInCollection: '', + musicInCollectionFill: '', + musicNote: '', + nav2DMapView: '', + newFolder: '', + news: '', + noteForward: '', + notePinned: '', + noteReply: '', + numberField: '', + numberedList: '', + officeAssistantLogo: '', + officeFormLogo: '', + officeLogo: '', + officeStoreLogo: '', + officeVideoLogo: '', + offlineOneDriveParachute: '', + offlineOneDriveParachuteDisabled: '', + oneDrive: '', + oneDriveAdd: '', + oneNoteEduLogo: '', + oneNoteLogo: '', + openFile: '', + openFolderHorizontal: '', + openInNewWindow: '', + openPane: '', + openPaneMirrored: '', + org: '', + outOfOffice: '', + outlookLogo: '', + package: '', + page: '', + pageAdd: '', + pageCheckedOut: '', + pageCheckedin: '', + pageLeft: '', + pageRight: '', + pageSolid: '', + panoIndicator: '', + paratureLogo: '', + partlyCloudyDay: '', + partlyCloudyNight: '', + partyLeader: '', + pause: '', + paymentCard: '', + pc1: '', + pdf: '', + pencilReply: '', + people: '', + peopleAdd: '', + peopleAlert: '', + peopleBlock: '', + peoplePause: '', + peopleRepeat: '', + permissions: '', + phone: '', + photo2: '', + photo2Add: '', + photo2Remove: '', + photoCollection: '', + picture: '', + pictureLibrary: '', + pieDouble: '', + pill: '', + pin: '', + pinned: '', + pinnedFill: '', + planner: '', + play: '', + playerSettings: '', + poi: '', + postUpdate: '', + powerApps2Logo: '', + powerApps: '', + powerAppsLogo: '', + powerBiLogo: '', + powerPointDocument: '', + powerPointLogo: '', + precipitation: '', + presenceChickletVideo: '', + preview: '', + previewLink: '', + print: '', + printfaxPrinterFile: '', + proFootball: '', + proHockey: '', + product: '', + projectLogo: '', + protectedDocument: '', + publicCalendar: '', + publicContactCard: '', + publicEmail: '', + publicFolder: '', + puzzle: '', + questionnaire: '', + questionnaireMirrored: '', + quickNote: '', + radioBtnOn: '', + radioBullet: '', + rain: '', + rainShowersDay: '', + rainShowersNight: '', + rainSnow: '', + read: '', + readingMode: '', + receiptCheck: '', + receiptForward: '', + receiptReply: '', + recent: '', + recurringEvent: '', + recurringTask: '', + recycleBin: '', + redEye: '', + redo: '', + refresh: '', + reminderGroup: '', + remove: '', + removeEvent: '', + removeFilter: '', + removeLink: '', + removeOccurrence: '', + rename: '', + reopenPages: '', + repair: '', + reply: '', + replyAll: '', + replyAllAlt: '', + replyAllMirrored: '', + replyAlt: '', + replyMirrored: '', + reportLibrary: '', + reportLibraryMirrored: '', + returnToSession: '', + revToggleKey: '', + ribbon: '', + rightDoubleQuote: '', + ringer: '', + room: '', + rotate: '', + rugby: '', + running: '', + sad: '', + save: '', + saveAs: '', + search: '', + section: '', + sections: '', + securityGroup: '', + send: '', + sendMirrored: '', + setAction: '', + settings: '', + share: '', + shareiOs: '', + sharepointLogo: '', + shield: '', + shop: '', + shoppingCart: '', + showResults: '', + showResultsMirrored: '', + sidePanel: '', + singleBookmark: '', + sipMove: '', + skypeCheck: '', + skypeCircleCheck: '', + skypeCircleClock: '', + skypeCircleMinus: '', + skypeClock: '', + skypeLogo: '', + skypeMessage: '', + skypeMinus: '', + sliderThumb: '', + snow: '', + snowShowerDay: '', + snowShowerNight: '', + soccer: '', + socialListeningLogo: '', + sort: '', + sortDown: '', + sortLines: '', + sortUp: '', + speakers: '', + speedHigh: '', + split: '', + squalls: '', + stackIndicator: '', + starburst: '', + statusErrorFull: '', + statusTriangle: '', + stockDown: '', + stockUp: '', + stopwatch: '', + storeLogo: '', + storeLogoMed: '', + strikethrough: '', + subscribe: '', + subscript: '', + suitcase: '', + sunAdd: '', + sunQuestionMark: '', + sunny: '', + superscript: '', + swayLogo: '', + switch: '', + switcherStartEnd: '', + sync: '', + syncFolder: '', + syncToPc: '', + system: '', + tab: '', + table: '', + tablet: '', + tabletSelected: '', + tag: '', + taskManager: '', + taskManagerMirrored: '', + teamwork: '', + temporaryUser: '', + tennis: '', + textBox: '', + textField: '', + thumbnailView: '', + thumbnailViewMirrored: '', + thunderstorms: '', + ticket: '', + tiles2: '', + tiles: '', + timeline: '', + timer: '', + toggleBorder: '', + toggleFilled: '', + toggleThumb: '', + touch: '', + touchPointer: '', + train: '', + trainSolid: '', + transferCall: '', + triangleDown12: '', + triangleLeft12: '', + triangleRight12: '', + triangleSolidDown12: '', + triangleSolidLeft12: '', + triangleSolidRight12: '', + triangleSolidUp12: '', + triangleUp12: '', + trophy: '', + turnRight: '', + tvMonitor: '', + tvMonitorSelected: '', + underline: '', + undo: '', + unfavorite: '', + unknownCall: '', + unlock: '', + unpin: '', + unsubscribe: '', + unsyncFolder: '', + up: '', + upload: '', + video: '', + videoSolid: '', + view: '', + viewAll2: '', + viewAll: '', + visioLogo: '', + voicemailForward: '', + voicemailReply: '', + volume0: '', + volume1: '', + volume2: '', + volume3: '', + volumeDisabled: '', + waffle: '', + warning: '', + website: '', + weights: '', + windDirection: '', + windowsLogo: '', + wipePhone: '', + wordDocument: '', + wordLogo: '', + work: '', + workFlow: '', + worldClock: '', + yammerLogo: '', + zoom: '', + zoomIn: '', + zoomOut: '', +}; + +console.timeEnd('createIcon'); + +function _createIcon(content: string): any { + + let val = + css({ + display: 'inline-block', + content + }); + + + return content; +} diff --git a/packages/styling/src/utilities/colorValues.ts b/packages/styling/src/utilities/colorValues.ts new file mode 100644 index 00000000000000..6f600a62783a8c --- /dev/null +++ b/packages/styling/src/utilities/colorValues.ts @@ -0,0 +1,150 @@ +export const COLOR_VALUES = { + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 132, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 255, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + grey: [128, 128, 128], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 203], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + rebeccapurple: [102, 51, 153], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [119, 128, 144], + slategrey: [119, 128, 144], + snow: [255, 255, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 5] +}; diff --git a/packages/styling/src/utilities/colors.ts b/packages/styling/src/utilities/colors.ts new file mode 100644 index 00000000000000..fe34ab0c6f5c73 --- /dev/null +++ b/packages/styling/src/utilities/colors.ts @@ -0,0 +1,309 @@ +import { assign } from '@uifabric/utilities'; +import { COLOR_VALUES } from './colorValues'; + +export const MAX_COLOR_SATURATION = 100; +export const MAX_COLOR_HUE = 359; +export const MAX_COLOR_VALUE = 100; + +export interface IRGB { + r: number; + g: number; + b: number; + a?: number; +} + +export interface IHSV { + h: number; + s: number; + v: number; +} + +export interface IColor extends IRGB, IHSV { + hex: string; + str: string; +} + +export function cssColor(color: string): IRGB { + return _named(color) + || _hex3(color) + || _hex6(color) + || _rgb(color) + || _rgba(color) + || _hsl(color) + || _hsla(color); +} + +export function rgb2hex(r: number, g: number, b: number): string { + return [ + _numberToPaddedHex(r), + _numberToPaddedHex(g), + _numberToPaddedHex(b) + ].join(''); +} + +export function hsv2hex(h: number, s: number, v: number): string { + const { r, g, b } = hsv2rgb(h, s, v); + + return rgb2hex(r, g, b); +} + +export function rgb2hsv(r: number, g: number, b: number): IHSV { + let h; + let s; + let v; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const delta = max - min; + + // hue + if (delta === 0) { + h = 0; + } else if (r === max) { + h = ((g - b) / delta) % 6; + } else if (g === max) { + h = (b - r) / delta + 2; + } else if (b === max) { + h = (r - g) / delta + 4; + } + + h = Math.round(h * 60); + + if (h < 0) { + h += 360; + } + + // saturation + s = Math.round((max === 0 ? 0 : (delta / max)) * 100); + + // value + v = Math.round(max / 255 * 100); + + return { h, s, v }; +} + +export function hsl2hsv(h: number, s: number, l: number): IHSV { + s *= ((l < 50) ? l : (100 - l)) / 100; + + return { + h: h, + s: 2 * s / (l + s) * 100, + v: l + s + }; +} + +export function hsl2rgb(h: number, s: number, l: number): IRGB { + const hsv = hsl2hsv(h, s, l); + + return hsv2rgb(hsv.h, hsv.s, hsv.v); +} + +export function hsv2rgb(h: number, s: number, v: number): IRGB { + s = s / 100; + v = v / 100; + + let rgb: number[] = []; + + const c = v * s; + const hh = h / 60; + const x = c * (1 - Math.abs(hh % 2 - 1)); + const m = v - c; + + switch (Math.floor(hh)) { + case 0: + rgb = [c, x, 0]; + break; + + case 1: + rgb = [x, c, 0]; + break; + + case 2: + rgb = [0, c, x]; + break; + + case 3: + rgb = [0, x, c]; + break; + + case 4: + rgb = [x, 0, c]; + break; + + case 5: + rgb = [c, 0, x]; + break; + } + + return { + r: Math.round(255 * (rgb[0] + m)), + g: Math.round(255 * (rgb[1] + m)), + b: Math.round(255 * (rgb[2] + m)) + }; +} + +export function getColorFromString(color: string): IColor { + let { a, b, g, r } = cssColor(color); + let { h, s, v } = rgb2hsv(r, g, b); + + return { + a: a, + b: b, + g: g, + h: h, + hex: rgb2hex(r, g, b), + r: r, + s: s, + str: color, + v: v + }; + +} + +export function getFullColorString(color: IColor): string { + return `#${hsv2hex(color.h, MAX_COLOR_SATURATION, MAX_COLOR_VALUE)}`; +} + +export function updateSV(color: IColor, s: number, v: number): IColor { + let { r, g, b } = hsv2rgb(color.h, s, v); + let hex = rgb2hex(r, g, b); + + return { + a: color.a, + b: b, + g: g, + h: color.h, + hex: hex, + r: r, + s: s, + str: (color.a === 100) ? `#${hex}` : `rgba(${r}, ${g}, ${b}, ${color.a / 100})`, + v: v + }; +} + +export function updateH(color: IColor, h: number): IColor { + let { r, g, b } = hsv2rgb(h, color.s, color.v); + let hex = rgb2hex(r, g, b); + + return { + a: color.a, + b: b, + g: g, + h: h, + hex: hex, + r: r, + s: color.s, + str: (color.a === 100) ? `#${hex}` : `rgba(${r}, ${g}, ${b}, ${color.a / 100})`, + v: color.v + }; +} + +export function updateA(color: IColor, a: number): IColor { + return assign({}, color, { + a: a, + str: (a === 100) ? `#${color.hex}` : `rgba(${color.r}, ${color.g}, ${color.b}, ${a / 100})` + }); +} + +function _numberToPaddedHex(num: number) { + const hex = num.toString(16); + + return hex.length === 1 ? '0' + hex : hex; +} + +function _named(str) { + const c = COLOR_VALUES[str.toLowerCase()]; + + if (c) { + return { + r: c[0], + g: c[1], + b: c[2], + a: 100 + }; + } +} + +function _rgb(str) { + if (0 === str.indexOf('rgb(')) { + str = str.match(/rgb\(([^)]+)\)/)[1]; + + const parts = str.split(/ *, */).map(Number); + + return { + r: parts[0], + g: parts[1], + b: parts[2], + a: 100 + }; + } +} + +function _rgba(str) { + if (str.indexOf('rgba(') === 0) { + str = str.match(/rgba\(([^)]+)\)/)[1]; + + const parts = str.split(/ *, */).map(Number); + + return { + r: parts[0], + g: parts[1], + b: parts[2], + a: parts[3] * 100 + }; + } +} + +function _hex6(str) { + if ('#' === str[0] && 7 === str.length) { + return { + r: parseInt(str.slice(1, 3), 16), + g: parseInt(str.slice(3, 5), 16), + b: parseInt(str.slice(5, 7), 16), + a: 100 + }; + } +} + +function _hex3(str) { + if ('#' === str[0] && 4 === str.length) { + return { + r: parseInt(str[1] + str[1], 16), + g: parseInt(str[2] + str[2], 16), + b: parseInt(str[3] + str[3], 16), + a: 100 + }; + } +} + +function _hsl(str) { + if (str.indexOf('hsl(') === 0) { + str = str.match(/hsl\(([^)]+)\)/)[1]; + const parts = str.split(/ *, */); + + const h = parseInt(parts[0], 10); + const s = parseInt(parts[1], 10); + const l = parseInt(parts[2], 10); + + const rgba = hsl2rgb(h, s, l); + rgba.a = 100; + + return rgba; + } +} + +function _hsla(str) { + if (str.indexOf('hsla(') === 0) { + str = str.match(/hsla\(([^)]+)\)/)[1]; + + const parts = str.split(/ *, */); + const h = parseInt(parts[0], 10); + const s = parseInt(parts[1], 10); + const l = parseInt(parts[2], 10); + const a = parseInt(parts[3], 10) * 100; + const rgba = hsl2rgb(h, s, l); + + rgba.a = a; + + return rgba; + } +} \ No newline at end of file diff --git a/packages/styling/src/utilities/theme.ts b/packages/styling/src/utilities/theme.ts new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/packages/styling/tsconfig.json b/packages/styling/tsconfig.json new file mode 100644 index 00000000000000..b7a11f36fe256d --- /dev/null +++ b/packages/styling/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "es5", + "module": "commonjs", + "jsx": "react", + "declaration": true, + "sourceMap": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "types": [ + "chai", + "mocha", + "webpack-env" + ], + "paths": { + "office-ui-fabric-react/lib/*": [ + "./src/*" + ] + } + }, + "exclude": [ + "node_modules", + "dist", + "lib", + "lib-amd" + ] +} \ No newline at end of file diff --git a/packages/styling/webpack.serve.config.js b/packages/styling/webpack.serve.config.js new file mode 100644 index 00000000000000..dc98656aae2fb4 --- /dev/null +++ b/packages/styling/webpack.serve.config.js @@ -0,0 +1,47 @@ +let path = require('path'); +let WebpackNotifierPlugin = require('webpack-notifier'); + +const PACKAGE_NAME = require('./package.json').name; + +module.exports = { + entry: './src/demoIndex.tsx', + + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'demo.js', + }, + + externals: { + 'react': 'React', + 'react-dom': 'ReactDOM' + }, + + resolve: { + alias: { + }, + extensions: ['.js', '.ts', '.tsx'] + }, + + devtool: 'source-map', + + devServer: { + inline: true, + port: 4322 + }, + + module: { + loaders: [ + { + test: /\.tsx?$/, + loader: 'ts-loader', + exclude: [ + /node_modules/ + ] + } + ] + }, + + plugins: [ + new WebpackNotifierPlugin() + ] +} diff --git a/packages/styling/yarn.lock b/packages/styling/yarn.lock new file mode 100644 index 00000000000000..9da3882e1a1c83 --- /dev/null +++ b/packages/styling/yarn.lock @@ -0,0 +1,4364 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@microsoft/load-themed-styles@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@microsoft/load-themed-styles/-/load-themed-styles-1.2.2.tgz#fa2fa1ca9c4f0c49623e2e48ad3ba30524495867" + +"@types/chai@^3.4.35": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.4.35.tgz#e8d65f83492d2944f816fc620741821c28a8c900" + +"@types/cheerio@*": + version "0.22.1" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.1.tgz#740c4cd8c4d3f3074f83b9ab62e711eac2c764ce" + +"@types/enzyme@^2.7.5": + version "2.7.7" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-2.7.7.tgz#52688e130fe55185f14844919ec559961488f53d" + dependencies: + "@types/cheerio" "*" + "@types/react" "*" + +"@types/mocha@^2.2.39": + version "2.2.40" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.40.tgz#9811dd800ece544cd84b5b859917bf584a150c4c" + +"@types/react-addons-test-utils@^0.14.17": + version "0.14.17" + resolved "https://registry.yarnpkg.com/@types/react-addons-test-utils/-/react-addons-test-utils-0.14.17.tgz#79adf8a0246a7fe1bb9a6651e2545a7b43d7f0b8" + dependencies: + "@types/react" "*" + +"@types/react-dom@^0.14.23": + version "0.14.23" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e" + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^15.0.16": + version "15.0.21" + resolved "https://registry.yarnpkg.com/@types/react/-/react-15.0.21.tgz#29d849427237c1463abfb7b370755ee3e5b5b375" + +"@types/webpack-env@^1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.0.tgz#3044381647e11ee973c5af2e925323930f691d80" + +"@uifabric/example-app-base@1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@uifabric/example-app-base/-/example-app-base-1.3.4.tgz#4b769ed6b398e776a5504d510c82164e2bddc628" + dependencies: + "@uifabric/utilities" "1.3.0" + highlight.js "^9.9.0" + office-ui-fabric-core ">=5.0.0 <6.0.0" + office-ui-fabric-react ">=2.7.1-0 <3.0.0-0" + +"@uifabric/utilities@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@uifabric/utilities/-/utilities-1.3.0.tgz#703a4a8682fefb9af077b165b3d932af28cd2101" + +"@uifabric/utilities@1.4.0", "@uifabric/utilities@>=1.4.0-0 <2.0.0-0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@uifabric/utilities/-/utilities-1.4.0.tgz#da5e6a996add5589d9156d01adf8b8094beed1e1" + +abbrev@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + +accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + +acorn@^4.0.11, acorn@^4.0.3, acorn@^4.0.4: + version "4.0.11" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + +ajv-keywords@^1.1.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.7.0, ajv@^4.9.1: + version "4.11.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansicolors@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +aproba@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@^0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.2.0.tgz#c324eba010a237e4fbd55a12dee86367d5c0ef32" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-runtime@^6.18.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +balanced-match@^0.4.1, balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + +batch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +bytes@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +caniuse-api@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" + dependencies: + browserslist "^1.0.1" + caniuse-db "^1.0.30000346" + lodash.memoize "^4.1.0" + lodash.uniq "^4.3.0" + +caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000646" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000646.tgz#c724b90d61df24286e015fc528d062073c00def4" + +cardinal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" + dependencies: + ansicolors "~0.2.1" + redeyed "~1.0.0" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chai@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +chokidar@^1.4.3, chokidar@^1.6.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + +clap@^1.0.9: + version "1.1.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" + dependencies: + chalk "^1.1.3" + +cli-table@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + dependencies: + colors "1.0.3" + +cli-usage@^0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2" + dependencies: + marked "^0.3.6" + marked-terminal "^1.6.2" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" + +clone@^1.0.0, clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.3.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +colors@^1.0.3, colors@^1.1.2, colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@2.9.0, commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +compressible@~2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" + dependencies: + mime-db ">= 1.27.0 < 2" + +compression@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" + dependencies: + accepts "~1.3.3" + bytes "2.3.0" + compressible "~2.0.8" + debug "~2.2.0" + on-headers "~1.0.1" + vary "~1.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +connect-history-api-fallback@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^1.0.0" + sha.js "^2.3.6" + +create-hmac@^1.1.0, create-hmac@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" + dependencies: + create-hash "^1.1.0" + inherits "^2.0.1" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@~0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.23.1.tgz#9fa23f2b5c0965235910ad5ecef3b8a36390fe50" + dependencies: + css-selector-tokenizer "^0.5.1" + cssnano ">=2.6.1 <4" + loader-utils "~0.2.2" + lodash.camelcase "^3.0.1" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + source-list-map "^0.1.4" + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.5.1: + version "0.5.4" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz#139bafd34a35fd0c1428487049e0699e6f6a2c21" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + +css-selector-tokenizer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4": + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +dateformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + +debug@2.2.0, debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" + dependencies: + ms "0.7.2" + +debug@2.6.3, debug@^2.2.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" + dependencies: + ms "0.7.2" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +defaults@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.0, depd@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +deprecated@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-file@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" + dependencies: + fs-exists-sync "^0.1.0" + +diff@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + +diff@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + dependencies: + domelementtype "1" + +domutils@1.5.1, domutils@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +ejs@^2.5.5: + version "2.5.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" + +electron-to-chromium@^1.2.7: + version "1.3.2" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz#b8ce5c93b308db0e92f6d0435c46ddec8f6363ab" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" + dependencies: + once "~1.3.0" + +enhanced-resolve@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.5" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +enzyme@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.8.0.tgz#86cc1fc96e5cbd7695766dd6e89deb13a0aead51" + dependencies: + cheerio "^0.22.0" + function.prototype.name "^1.0.0" + is-subset "^0.1.1" + lodash "^4.17.2" + object-is "^1.0.1" + object.assign "^4.0.4" + object.entries "^1.0.3" + object.values "^1.0.3" + uuid "^2.0.3" + +errno@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + is-callable "^1.1.3" + is-regex "^1.0.3" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es6-promise@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" + +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +expand-tilde@^1.2.1, expand-tilde@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" + dependencies: + os-homedir "^1.0.1" + +express@^4.13.3, express@^4.14.1: + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.1" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.3" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.14" + utils-merge "1.0.0" + vary "~1.1.0" + +extend@^3.0.0, extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fancy-log@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" + dependencies: + chalk "^1.1.1" + time-stamp "^1.0.0" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.8: + version "0.8.12" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +filesize@^3.5.4: + version "3.5.6" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" + dependencies: + debug "2.6.3" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-index@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +findup-sync@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" + dependencies: + detect-file "^0.1.0" + is-glob "^2.0.1" + micromatch "^2.3.7" + resolve-dir "^0.1.0" + +findup-sync@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" + dependencies: + glob "~5.0.0" + +fined@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.0.2.tgz#5b28424b760d7598960b7ef8480dff8ad3660e97" + dependencies: + expand-tilde "^1.2.1" + lodash.assignwith "^4.0.7" + lodash.isempty "^4.2.1" + lodash.isplainobject "^4.0.4" + lodash.isstring "^4.0.1" + lodash.pick "^4.2.1" + parse-filepath "^1.0.1" + +first-chunk-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" + +flagged-respawn@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + +fs-exists-sync@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +function.prototype.name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + is-callable "^1.1.2" + +gauge@~2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" + dependencies: + globule "~0.1.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +glamor@^2.20.24: + version "2.20.24" + resolved "https://registry.yarnpkg.com/glamor/-/glamor-2.20.24.tgz#a299af2eec687322634ba38e4a0854d8743d2041" + dependencies: + babel-runtime "^6.18.0" + fbjs "^0.8.8" + object-assign "^4.1.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-stream@^3.1.5: + version "3.1.18" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" + dependencies: + glob "^4.3.1" + glob2base "^0.0.12" + minimatch "^2.0.1" + ordered-read-streams "^0.1.0" + through2 "^0.6.1" + unique-stream "^1.0.0" + +glob-watcher@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" + dependencies: + gaze "^0.5.1" + +glob2base@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + dependencies: + find-index "^0.1.1" + +glob@7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^4.3.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.0" + +glob@^7.0.3, glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~3.1.21: + version "3.1.21" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" + dependencies: + graceful-fs "~1.2.0" + inherits "1" + minimatch "~0.2.11" + +glob@~5.0.0: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" + dependencies: + global-prefix "^0.1.4" + is-windows "^0.2.0" + +global-prefix@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" + dependencies: + homedir-polyfill "^1.0.0" + ini "^1.3.4" + is-windows "^0.2.0" + which "^1.2.12" + +globule@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" + dependencies: + glob "~3.1.21" + lodash "~1.0.1" + minimatch "~0.2.11" + +glogg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + dependencies: + sparkles "^1.0.0" + +graceful-fs@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + +graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +graceful-fs@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +growly@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +gulp-util@^3.0.0: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulp@~3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" + dependencies: + archy "^1.0.0" + chalk "^1.0.0" + deprecated "^0.0.1" + gulp-util "^3.0.0" + interpret "^1.0.0" + liftoff "^2.1.0" + minimist "^1.1.0" + orchestrator "^0.3.0" + pretty-hrtime "^1.0.0" + semver "^4.1.0" + tildify "^1.0.0" + v8flags "^2.0.2" + vinyl-fs "^0.3.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + dependencies: + duplexer "^0.1.1" + +handle-thing@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + dependencies: + inherits "^2.0.1" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +highlight.js@^9.9.0: + version "9.10.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.10.0.tgz#f9f0b14c0be00f0e4fb1e577b749fed9e6f52f55" + +hmac-drbg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.0.tgz#3db471f45aae4a994a0688322171f51b8b91bee5" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +homedir-polyfill@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.4.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-entities@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" + +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +http-deceiver@^1.2.4: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" + dependencies: + inherits "2.0.3" + setprototypeof "1.0.2" + statuses ">= 1.3.1 < 2" + +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + +iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +icss-replace-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +interpret@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.2.tgz#f4f623f0bb7122f15f5717c8e254b8161b5c5b2d" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ipaddr.js@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-absolute@^0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" + dependencies: + is-relative "^0.2.1" + is-windows "^0.2.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.0.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.2, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-regex@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-relative@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" + dependencies: + is-unc-path "^0.1.1" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-unc-path@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" + dependencies: + unc-path-regex "^0.1.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-base64@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@3.3.2, json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + dependencies: + is-buffer "^1.0.2" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +liftoff@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" + dependencies: + extend "^3.0.0" + findup-sync "^0.4.2" + fined "^1.0.1" + flagged-respawn "^0.3.2" + lodash.isplainobject "^4.0.4" + lodash.isstring "^4.0.1" + lodash.mapvalues "^4.4.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@^0.2.16, loader-utils@~0.2.2: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +lodash._arraycopy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + +lodash._arrayeach@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._baseclone@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" + dependencies: + lodash._arraycopy "^3.0.0" + lodash._arrayeach "^3.0.0" + lodash._baseassign "^3.0.0" + lodash._basefor "^3.0.0" + lodash.isarray "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._basefor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._createcompounder@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" + dependencies: + lodash.deburr "^3.0.0" + lodash.words "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + +lodash.assignwith@^4.0.7: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb" + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + +lodash.camelcase@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" + dependencies: + lodash._createcompounder "^3.0.0" + +lodash.clonedeep@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" + dependencies: + lodash._baseclone "^3.0.0" + lodash._bindcallback "^3.0.0" + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.deburr@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" + dependencies: + lodash._root "^3.0.0" + +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isempty@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" + +lodash.isplainobject@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + +lodash.mapvalues@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + +lodash.memoize@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.merge@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.uniq@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash.words@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" + dependencies: + lodash._root "^3.0.0" + +lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +lodash@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + +map-cache@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +marked-terminal@^1.6.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904" + dependencies: + cardinal "^1.0.0" + chalk "^1.1.3" + cli-table "^0.3.1" + lodash.assign "^4.2.0" + node-emoji "^1.4.1" + +marked@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + +math-expression-evaluator@^1.2.14: + version "1.2.16" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.27.0 < 2", mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +mime@1.3.4, mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimatch@^2.0.1: + version "2.0.10" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + dependencies: + brace-expansion "^1.0.0" + +minimatch@~0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha-loader@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mocha-loader/-/mocha-loader-1.1.1.tgz#39c9b78c4ad69abc533ed02e2dab398244ca33ab" + dependencies: + css-loader "~0.23.1" + loader-utils "^1.0.2" + script-loader "~0.7.0" + style-loader "~0.13.1" + +mocha@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.2.0" + diff "1.4.0" + escape-string-regexp "1.0.5" + glob "7.0.5" + growl "1.9.2" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +nan@^2.3.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + +natives@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +node-emoji@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.5.1.tgz#fd918e412769bf8c448051238233840b2aff16a1" + dependencies: + string.prototype.codepointat "^0.2.0" + +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-libs-browser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "0.0.1" + os-browserify "^0.2.0" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^2.0.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-notifier@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3" + dependencies: + cli-usage "^0.1.1" + growly "^1.2.0" + lodash.clonedeep "^3.0.0" + minimist "^1.1.1" + semver "^5.1.0" + shellwords "^0.1.0" + which "^1.0.5" + +node-pre-gyp@^0.6.29: + version "0.6.34" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" + dependencies: + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npmlog@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + +object-keys@^1.0.10, object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.assign@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + object-keys "^1.0.10" + +object.entries@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.values@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +obuf@^1.0.0, obuf@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" + +"office-ui-fabric-core@>=5.0.0 <6.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/office-ui-fabric-core/-/office-ui-fabric-core-5.1.0.tgz#bf8f4308e15b363244c167345b28334514ec0920" + +"office-ui-fabric-react@>=2.7.1-0 <3.0.0-0": + version "2.10.5" + resolved "https://registry.yarnpkg.com/office-ui-fabric-react/-/office-ui-fabric-react-2.10.5.tgz#6298e0ae86510d4552d6c4965de22f23b04a1f8c" + dependencies: + "@microsoft/load-themed-styles" "^1.2.2" + "@uifabric/utilities" "1.4.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +opener@^1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" + +opn@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +orchestrator@^0.3.0: + version "0.3.8" + resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" + dependencies: + end-of-stream "~0.1.5" + sequencify "~0.0.7" + stream-consume "~0.1.0" + +ordered-read-streams@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + +os-browserify@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-filepath@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" + dependencies: + is-absolute "^0.2.3" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + dependencies: + path-root-regex "^0.1.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pbkdf2@^3.0.3: + version "3.0.9" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + dependencies: + create-hmac "^1.1.2" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +portfinder@^1.0.9: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" + dependencies: + postcss "^5.0.4" + +postcss-modules-local-by-default@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-scope@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-values@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" + dependencies: + icss-replace-symbols "^1.0.2" + postcss "^5.0.14" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-hrtime@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + +promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + dependencies: + asap "~2.0.3" + +proxy-addr@~1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.3.0" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + +qs@6.4.0, qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +query-string@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-loader@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + +rc@^1.1.7: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.0.tgz#c7de973b7b46297c041366b2fd3d2363b1697c66" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-addons-test-utils@^15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2" + dependencies: + fbjs "^0.8.4" + object-assign "^4.1.0" + +react-dom@^15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.2.tgz#015363f05b0a1fd52ae9efdd3a0060d90695208f" + dependencies: + fbjs "^0.8.1" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +react@^15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef" + dependencies: + fbjs "^0.8.4" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +"readable-stream@>=1.0.33-1 <1.1.0-0": + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4, readable-stream@^2.1.5: + version "2.2.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +redeyed@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" + dependencies: + esprima "~3.0.0" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +request@^2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +requires-port@1.0.x, requires-port@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-dir@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" + dependencies: + expand-tilde "^1.2.2" + global-modules "^0.2.3" + +resolve@^1.1.6, resolve@^1.1.7: + version "1.3.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +ripemd160@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" + +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +sax@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +script-loader@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/script-loader/-/script-loader-0.7.0.tgz#685dc7e7069e0dee7a92674f0ebc5b0f55baa5ec" + dependencies: + raw-loader "~0.5.1" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.1.0, semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +semver@^4.1.0: + version "4.3.6" + resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + +send@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" + dependencies: + debug "2.6.1" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "0.7.2" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +sequencify@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" + +serve-index@^1.7.2: + version "1.8.0" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" + dependencies: + accepts "~1.3.3" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.5.0" + mime-types "~2.1.11" + parseurl "~1.3.1" + +serve-static@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +sha.js@^2.3.6: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sockjs-client@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.2.tgz#f0212a8550e4c9468c8cceaeefd2e3493c033ad5" + dependencies: + debug "^2.2.0" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.1" + +sockjs@0.3.18: + version "0.3.18" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" + dependencies: + faye-websocket "^0.10.0" + uuid "^2.0.2" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^0.1.4: + version "0.1.8" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + +source-list-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.1.tgz#1a33ac210ca144d1e561f906ebccab5669ff4cb4" + +source-map-loader@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-0.1.5.tgz#0ec6ca58aa0e61463a28673dd4c49e8ba67dc718" + dependencies: + async "^0.9.0" + loader-utils "~0.2.2" + source-map "~0.1.33" + +source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.1.33: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +spdy-transport@^2.0.15: + version "2.0.18" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.18.tgz#43fc9c56be2cccc12bb3e2754aa971154e836ea6" + dependencies: + debug "^2.2.0" + hpack.js "^2.1.6" + obuf "^1.1.0" + readable-stream "^2.0.1" + wbuf "^1.4.0" + +spdy@^3.4.1: + version "3.4.4" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.4.tgz#e0406407ca90ff01b553eb013505442649f5a819" + dependencies: + debug "^2.2.0" + handle-thing "^1.2.4" + http-deceiver "^1.2.4" + select-hose "^2.0.0" + spdy-transport "^2.0.15" + +sprintf-js@^1.0.3, sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-consume@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" + +stream-http@^2.3.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.1.0" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string.prototype.codepointat@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz#6b26e9bd3afcaa7be3b4269b526de1b82000ac78" + +string_decoder@^0.10.25, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" + dependencies: + first-chunk-stream "^1.0.0" + is-utf8 "^0.2.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +style-loader@~0.13.1: + version "0.13.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" + dependencies: + loader-utils "^1.0.2" + +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +tapable@^0.2.5, tapable@~0.2.5: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" + +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +through2@^0.6.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +tildify@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" + dependencies: + os-homedir "^1.0.0" + +time-stamp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" + +timers-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +ts-loader@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-2.0.3.tgz#89b8c87598f048df065766e07e1538f0eaeb1165" + dependencies: + colors "^1.0.3" + enhanced-resolve "^3.0.0" + loader-utils "^1.0.2" + semver "^5.0.1" + +tslint-microsoft-contrib@^2.0.9: + version "2.0.14" + resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-2.0.14.tgz#a6c1acafedd4b2707d0a8719472d1ba8c0a7eb78" + +tslint@^3.15.1: + version "3.15.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-3.15.1.tgz#da165ca93d8fdc2c086b51165ee1bacb48c98ea5" + dependencies: + colors "^1.1.2" + diff "^2.2.1" + findup-sync "~0.3.0" + glob "^7.0.3" + optimist "~0.6.0" + resolve "^1.1.7" + underscore.string "^3.3.4" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + +type-is@~1.6.14: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +typescript@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.2.tgz#606022508479b55ffa368b58fee963a03dfd7b0c" + +ua-parser-js@^0.7.9: + version "0.7.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + +uglify-js@^2.8.5: + version "2.8.20" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.20.tgz#be87100fbc18de3876ed606e9d24b4568311cecf" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +unc-path-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + +underscore.string@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db" + dependencies: + sprintf-js "^1.0.3" + util-deprecate "^1.0.2" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unique-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.8.tgz#7a65b3a8d57a1e86af6b4e2276e34774167c0156" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^2.0.2, uuid@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +v8flags@^2.0.2: + version "2.0.12" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.12.tgz#73235d9f7176f8e8833fb286795445f7938d84e5" + dependencies: + user-home "^1.1.1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vary@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vinyl-fs@^0.3.0: + version "0.3.14" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" + dependencies: + defaults "^1.0.0" + glob-stream "^3.1.5" + glob-watcher "^0.0.6" + graceful-fs "^3.0.0" + mkdirp "^0.5.0" + strip-bom "^1.0.0" + through2 "^0.6.1" + vinyl "^0.4.0" + +vinyl@^0.4.0: + version "0.4.6" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" + dependencies: + clone "^0.2.0" + clone-stats "^0.0.1" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +watchpack@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" + dependencies: + async "^2.1.2" + chokidar "^1.4.3" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.4.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" + dependencies: + minimalistic-assert "^1.0.0" + +webpack-bundle-analyzer@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.3.1.tgz#d97f8aadbcce68fc865c5787741d8549359a25cd" + dependencies: + acorn "^4.0.11" + chalk "^1.1.3" + commander "^2.9.0" + ejs "^2.5.5" + express "^4.14.1" + filesize "^3.5.4" + gzip-size "^3.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + opener "^1.4.2" + +webpack-dev-middleware@^1.9.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" + dependencies: + memory-fs "~0.4.1" + mime "^1.3.4" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + +webpack-dev-server@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.4.2.tgz#cf595d6b40878452b6d2ad7229056b686f8a16be" + dependencies: + ansi-html "0.0.7" + chokidar "^1.6.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + express "^4.13.3" + html-entities "^1.2.0" + http-proxy-middleware "~0.17.4" + opn "4.0.2" + portfinder "^1.0.9" + serve-index "^1.7.2" + sockjs "0.3.18" + sockjs-client "1.1.2" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^3.1.1" + webpack-dev-middleware "^1.9.0" + yargs "^6.0.0" + +webpack-notifier@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/webpack-notifier/-/webpack-notifier-1.5.0.tgz#c010007d448cebc34defc99ecf288fa5e8c6baf6" + dependencies: + node-notifier "^4.1.0" + object-assign "^4.1.0" + strip-ansi "^3.0.1" + +webpack-sources@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + +webpack-split-by-path@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/webpack-split-by-path/-/webpack-split-by-path-0.0.10.tgz#6350c48d0d5891ea98cfdfd2e80debcb602e91ca" + +webpack@^2.2.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.2.tgz#7d521e6f0777a3a58985c69425263fdfe977b458" + dependencies: + acorn "^4.0.4" + acorn-dynamic-import "^2.0.0" + ajv "^4.7.0" + ajv-keywords "^1.1.1" + async "^2.1.2" + enhanced-resolve "^3.0.0" + interpret "^1.0.0" + json-loader "^0.5.4" + loader-runner "^2.3.0" + loader-utils "^0.2.16" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^3.1.0" + tapable "~0.2.5" + uglify-js "^2.8.5" + watchpack "^1.3.1" + webpack-sources "^0.2.3" + yargs "^6.0.0" + +websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@^1.0.5, which@^1.2.12: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2, wordwrap@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs@^6.0.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff --git a/rush.json b/rush.json index fff2f91ef55103..df614ad3d14e40 100644 --- a/rush.json +++ b/rush.json @@ -12,7 +12,7 @@ { "packageName": "office-ui-fabric-react", "projectFolder": "packages/office-ui-fabric-react", - "shouldPublish": true, + "shouldPublish": true }, { "packageName": "@uifabric/utilities", From 5fe5c646f12117d6e249e12d71f097a92d4805f8 Mon Sep 17 00:00:00 2001 From: David Zearing Date: Tue, 11 Apr 2017 11:23:13 -0700 Subject: [PATCH 12/25] Adding animations and icons. --- .../src/components/Nav/Nav.Props.ts | 1 + packages/styling/src/demoIndex.tsx | 3 +- .../styling/src/examples/AnimationPage.tsx | 14 +- packages/styling/src/examples/ColorPage.tsx | 1 - packages/styling/src/examples/IconPage.tsx | 7 +- .../src/examples/components/Header.tsx | 11 + packages/styling/src/styles/animations.ts | 167 ++ packages/styling/src/styles/fonts.ts | 41 +- packages/styling/src/styles/icons.ts | 1418 ++++++++--------- packages/styling/src/utilities/theme.ts | 50 + 10 files changed, 975 insertions(+), 738 deletions(-) create mode 100644 packages/styling/src/examples/components/Header.tsx create mode 100644 packages/styling/src/styles/animations.ts diff --git a/apps/fabric-website/src/components/Nav/Nav.Props.ts b/apps/fabric-website/src/components/Nav/Nav.Props.ts index 874952da57cd35..1c54a2e0b7a5e9 100644 --- a/apps/fabric-website/src/components/Nav/Nav.Props.ts +++ b/apps/fabric-website/src/components/Nav/Nav.Props.ts @@ -32,6 +32,7 @@ export interface INavPage { * The component to render for this page's content. */ component?: any; + /** * Loads the component using require.ensure; */ diff --git a/packages/styling/src/demoIndex.tsx b/packages/styling/src/demoIndex.tsx index cde7b42f6fd936..3df71f8ff4467a 100644 --- a/packages/styling/src/demoIndex.tsx +++ b/packages/styling/src/demoIndex.tsx @@ -1,7 +1,8 @@ import * as React from 'react'; import * as Glamor from 'glamor'; -Glamor['speedy'](true); + +Glamor['speedy'](false); import { examplesOf, createApp } from '@uifabric/example-app-base'; import { ColorPage } from './examples/ColorPage'; diff --git a/packages/styling/src/examples/AnimationPage.tsx b/packages/styling/src/examples/AnimationPage.tsx index 8cd5c552c1a2ce..5c4e23fdb46c4a 100644 --- a/packages/styling/src/examples/AnimationPage.tsx +++ b/packages/styling/src/examples/AnimationPage.tsx @@ -1,11 +1,23 @@ import * as React from 'react'; import { BaseComponent } from '@uifabric/utilities'; +import { css } from 'glamor'; + +const styles = { + root: { + + }, + header: { + + } +}; export class AnimationPage extends BaseComponent<{}, {}> { public render(): JSX.Element { return ( -
I am the AnimationPage
+
+
Animations
+
); } } diff --git a/packages/styling/src/examples/ColorPage.tsx b/packages/styling/src/examples/ColorPage.tsx index 437d9457408cef..1b9c485bef6a84 100644 --- a/packages/styling/src/examples/ColorPage.tsx +++ b/packages/styling/src/examples/ColorPage.tsx @@ -28,7 +28,6 @@ const styles = { vertikcalAlign: 'middle', }, swatchText: { - ...fonts.code } }; diff --git a/packages/styling/src/examples/IconPage.tsx b/packages/styling/src/examples/IconPage.tsx index 42ffd1424c7721..fc5fd2233ffd26 100644 --- a/packages/styling/src/examples/IconPage.tsx +++ b/packages/styling/src/examples/IconPage.tsx @@ -6,6 +6,7 @@ import { fonts, iconFont } from '../styles/fonts'; import { defaultPalette } from '../styles/colors'; import { SearchBox } from 'office-ui-fabric-react/lib/SearchBox'; import { FocusZone } from 'office-ui-fabric-react/lib/FocusZone'; +import { animations } from '../styles/animations'; const styles = { root: css({ @@ -24,13 +25,14 @@ const styles = { borderBottom: '1px solid #aaa', userSelect: 'none' }), + cell: css( fonts.medium, { margin: '0 4px' } ), iconTile: css( - fonts.xSmall, + fonts.small, { flexShrink: 0, display: 'flex', @@ -54,6 +56,7 @@ const styles = { bottom: 0, border: '1px solid ' + defaultPalette.themePrimary }, + ':focus': { opacity: 1, background: defaultPalette.themeLighterAlt @@ -86,7 +89,7 @@ export function IconTile(props) { let { iconName, ...divProps } = props; return (
- + { icons[iconName] }
{ iconName }
); diff --git a/packages/styling/src/examples/components/Header.tsx b/packages/styling/src/examples/components/Header.tsx new file mode 100644 index 00000000000000..f5e423c2c16beb --- /dev/null +++ b/packages/styling/src/examples/components/Header.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; + +export class Header extends React.Component { + public render() { + return ( +
+ +
+ ); + } +} \ No newline at end of file diff --git a/packages/styling/src/styles/animations.ts b/packages/styling/src/styles/animations.ts new file mode 100644 index 00000000000000..1a1fa5445f4a27 --- /dev/null +++ b/packages/styling/src/styles/animations.ts @@ -0,0 +1,167 @@ +import { keyframes, CSSProperties } from 'glamor'; + +const ease1: string = 'cubic-bezier(.1,.9,.2,1)'; +const ease2: string = 'cubic-bezier(.1,.25,.75,.9)'; +const duration1: string = '0.167s'; +const duration2: string = '0.267s'; +const duration3: string = '0.367s'; +const duration4: string = '0.467s'; + +const fadeIn: string = keyframes({ + from: { opacity: 0 }, + to: { opacity: 1 } +}); + +const fadeOut: string = keyframes({ + from: { opacity: 1 }, + to: { opacity: 0 } +}); + +const slideRightIn10: string = _createSlideInX('-10px'); +const slideRightIn20: string = _createSlideInX('-20px'); +const slideRightIn40: string = _createSlideInX('-40px'); +const slideRightIn400: string = _createSlideInX('-400px'); +const slideLeftIn10: string = _createSlideInX('10px'); +const slideLeftIn20: string = _createSlideInX('20px'); +const slideLeftIn40: string = _createSlideInX('40px'); +const slideLeftIn400: string = _createSlideInX('400px'); +const slideUpIn10: string = _createSlideInY('10px'); +const slideUpIn20: string = _createSlideInY('20px'); +const slideDownIn10: string = _createSlideInY('-10px'); +const slideDownIn20: string = _createSlideInY('-20px'); + +const slideRightOut10: string = _createSlideOutX('-10px'); +const slideRightOut20: string = _createSlideOutX('-20px'); +const slideRightOut40: string = _createSlideOutX('-40px'); +const slideRightOut400: string = _createSlideOutX('-400px'); +const slideLeftOut10: string = _createSlideOutX('10px'); +const slideLeftOut20: string = _createSlideOutX('20px'); +const slideLeftOut40: string = _createSlideOutX('40px'); +const slideLeftOut400: string = _createSlideOutX('400px'); +const slideUpOut10: string = _createSlideOutY('10px'); +const slideUpOut20: string = _createSlideOutY('20px'); +const slideDownOut10: string = _createSlideOutY('-10px'); +const slideDownOut20: string = _createSlideOutY('-20px'); + +const scaleUp100: string = keyframes({ + from: { transform: 'scale3d(.98,.98,1)' }, + to: { transform: 'scale3d(1,1,1)' } +}); + +const scaleDown98: string = keyframes({ + from: { transform: 'scale3d(1,1,1)' }, + 'top': { transform: 'scale3d(.98,.98,1)' }, +}); + +const scaleDown100: string = keyframes({ + from: { transform: 'scale3d(1.03,1.03,1)' }, + to: { transform: 'scale3d(1,1,1)' } +}); + +const scaleUp103: string = keyframes({ + from: { transform: 'scale3d(1,1,1)' }, + to: { transform: 'scale3d(1.03,1.03,1)' } +}); + +const rotate90: string = keyframes({ + from: { transform: 'rotateZ(0deg)' }, + to: { transform: 'rotateZ(90deg)' } +}); + +const rotateN90: string = keyframes({ + from: { transform: 'rotateZ(90deg)' }, + to: { transform: 'rotateZ(0deg)' } +}); + +export const animations = { + slideRightIn10: _createAnimation(`${fadeIn},${slideRightIn10}`, duration3, ease1), + slideRightIn20: _createAnimation(`${fadeIn},${slideRightIn20}`, duration3, ease1), + slideRightIn40: _createAnimation(`${fadeIn},${slideRightIn40}`, duration3, ease1), + slideRightIn400: _createAnimation(`${fadeIn},${slideRightIn400}`, duration3, ease1), + slideLeftIn10: _createAnimation(`${fadeIn},${slideLeftIn10}`, duration3, ease1), + slideLeftIn20: _createAnimation(`${fadeIn},${slideLeftIn20}`, duration3, ease1), + slideLeftIn40: _createAnimation(`${fadeIn},${slideLeftIn40}`, duration3, ease1), + slideLeftIn400: _createAnimation(`${fadeIn},${slideLeftIn400}`, duration3, ease1), + slideUpIn10: _createAnimation(`${fadeIn},${slideUpIn10}`, duration3, ease1), + slideUpIn20: _createAnimation(`${fadeIn},${slideUpIn20}`, duration3, ease1), + slideDownIn10: _createAnimation(`${fadeIn},${slideDownIn10}`, duration3, ease1), + slideDownIn20: _createAnimation(`${fadeIn},${slideDownIn20}`, duration3, ease1), + + slideRightOut10: _createAnimation(`${fadeIn},${slideRightOut10}`, duration3, ease1), + slideRightOut20: _createAnimation(`${fadeIn},${slideRightOut20}`, duration3, ease1), + slideRightOut40: _createAnimation(`${fadeIn},${slideRightOut40}`, duration3, ease1), + slideRightOut400: _createAnimation(`${fadeIn},${slideRightOut400}`, duration3, ease1), + slideLeftOut10: _createAnimation(`${fadeIn},${slideLeftOut10}`, duration3, ease1), + slideLeftOut20: _createAnimation(`${fadeIn},${slideLeftOut20}`, duration3, ease1), + slideLeftOut40: _createAnimation(`${fadeIn},${slideLeftOut40}`, duration3, ease1), + slideLeftOut400: _createAnimation(`${fadeIn},${slideLeftOut400}`, duration3, ease1), + slideUpOut10: _createAnimation(`${fadeIn},${slideUpOut10}`, duration3, ease1), + slideUpOut20: _createAnimation(`${fadeIn},${slideUpOut20}`, duration3, ease1), + slideDownOut10: _createAnimation(`${fadeIn},${slideDownOut10}`, duration3, ease1), + slideDownOut20: _createAnimation(`${fadeIn},${slideDownOut20}`, duration3, ease1), + + scaleUpIn100: _createAnimation(`${fadeIn},${scaleUp100}`, duration3, ease1), + scaleDownIn100: _createAnimation(`${fadeIn},${scaleDown100}`, duration3, ease1), + + scaleUpOut103: _createAnimation(`${fadeOut},${scaleUp103}`, duration1, ease2), + scaleDownOut98: _createAnimation(`${fadeOut},${scaleDown98}`, duration1, ease2), + + fadeIn100: _createAnimation(fadeIn, duration1, ease2), + fadeIn200: _createAnimation(fadeIn, duration2, ease2), + fadeIn400: _createAnimation(fadeIn, duration3, ease2), + fadeIn500: _createAnimation(fadeIn, duration4, ease2), + + /** + * Useful for fading out in 100ms. + */ + fadeOut100: _createAnimation(fadeOut, duration1, ease2), + fadeOut200: _createAnimation(fadeOut, duration2, ease2), + fadeOut400: _createAnimation(fadeOut, duration3, ease2), + fadeOut500: _createAnimation(fadeOut, duration4, ease2), + + rotate90deg: _createAnimation(rotate90, '0.1s', ease2), + rotateN90deg: _createAnimation(rotateN90, '0.1s', ease2) + + // expandCollapse 100/200/400, delay 100/200 +}; + +function _createAnimation( + animationName: string, + animationDuration: string, + animationTimingFunction: string +): CSSProperties { + return { + animationName, + animationDuration, + animationTimingFunction, + animationFillMode: 'both' + }; +} + +function _createSlideInX(fromX: string): string { + return keyframes({ + from: { transform: `translate3d(${fromX},0,0)` }, + to: { transform: `translate3d(0,0,0)` } + }); +} + +function _createSlideInY(fromY: string): string { + return keyframes({ + from: { transform: `translate3d(0,${fromY},0)` }, + to: { transform: `translate3d(0,0,0)` } + }); +} + +function _createSlideOutX(toX: string): string { + return keyframes({ + from: { transform: `translate3d(0,0,0)` }, + to: { transform: `translate3d(${toX},0,0)` } + }); +} + +function _createSlideOutY(toY: string): string { + return keyframes({ + to: { transform: `translate3d(0,0,0)` }, + from: { transform: `translate3d(0,${toY},0)` } + }); +} \ No newline at end of file diff --git a/packages/styling/src/styles/fonts.ts b/packages/styling/src/styles/fonts.ts index 362abda4b354fa..ac1b3048611a38 100644 --- a/packages/styling/src/styles/fonts.ts +++ b/packages/styling/src/styles/fonts.ts @@ -1,4 +1,4 @@ -import { css, fontFace, CSSProperties } from 'glamor'; +import { fontFace, CSSProperties } from 'glamor'; const FONT_BASE_URL: string = 'https://static2.sharepointonline.com/files/fabric/assets/fonts/segoeui-westeuropean'; const ICON_BASE_URL: string = 'https://static2.sharepointonline.com/files/fabric/assets/icons'; @@ -21,9 +21,24 @@ const largeSize: string = '17px'; const xLargeSize: string = '21px'; const xxLargeSize: string = '28px'; const superSize: string = '42px'; +const megaSize: string = '72px'; -export const fonts: any = { - mini: _createFont(miniSize, semiboldWeight), +export interface IFonts { + tiny: CSSProperties; + xSmall: CSSProperties; + small: CSSProperties; + smallPlus: CSSProperties; + medium: CSSProperties; + mediumPlus: CSSProperties; + large: CSSProperties; + xLarge: CSSProperties; + xxLarge: CSSProperties; + superLarge: CSSProperties; + mega: CSSProperties; +} + +export const fonts: IFonts = { + tiny: _createFont(miniSize, semiboldWeight), xSmall: _createFont(xSmallSize, regularWeight), small: _createFont(smallSize, regularWeight), smallPlus: _createFont(smallPlusSize, regularWeight), @@ -33,10 +48,7 @@ export const fonts: any = { xLarge: _createFont(xLargeSize, lightWeight), xxLarge: _createFont(xxLargeSize, lightWeight), superLarge: _createFont(superSize, lightWeight), - code: { - fontFamily: '"Courier New", "Consolas"', - fontSize: '12px' - } + mega: _createFont(megaSize, lightWeight) }; export const iconFont = { @@ -90,18 +102,3 @@ function _registerFontFace( // Icon font _registerFontFace('FabricMDL2Icons', 'FabricMDL2Icons', ICON_BASE_URL, 'fabricmdl2icons', regularWeight); - -/* - -css({ - fontFace: { - fontFamily: "Segoe UI Light", - src: - `url('${FONT_BASE_URL}/segoeui-light.woff2') format('woff2'),` + - `url('${fontBaseUrl}/segoeui-light.woff2') format('woff'),` + - `url('${fontBaseUrl}/segoeui-light.woff2') format('truetype'),`, - fontWeight: light, - fontStyle: 'normal' - } -}); -*/ \ No newline at end of file diff --git a/packages/styling/src/styles/icons.ts b/packages/styling/src/styles/icons.ts index b054eb5255385d..5ba5eab662d6b8 100644 --- a/packages/styling/src/styles/icons.ts +++ b/packages/styling/src/styles/icons.ts @@ -1,720 +1,716 @@ import { fonts } from './fonts'; import { before, css, StyleAttribute } from 'glamor'; -console.time('createIcon'); - export const icons = { - aadLogo: '', - accept: '', - accessLogo: '', - accounts: '', - add: '', - addEvent: '', - addFavorite: '', - addFavoriteFill: '', - addFriend: '', - addGroup: '', - addOnlineMeeting: '', - addPhone: '', - addTo: '', - admin: '', - adminALogo: '', - adminCLogo: '', - adminDLogo: '', - adminELogo: '', - adminLLogo: '', - adminMLogo: '', - adminOLogo: '', - adminPLogo: '', - adminSLogo: '', - adminYLogo: '', - airTickets: '', - airplane: '', - alarmClock: '', - album: '', - albumRemove: '', - alchemyLogo: '', - alignCenter: '', - alignLeft: '', - alignRight: '', - androidLogo: '', - annotation: '', - appForOfficeLogo: '', - appIconDefault: '', - arrivals: '', - arrowDownRight8: '', - arrowDownRightMirrored8: '', - arrowUpRight8: '', - arrowUpRightMirrored8: '', - articles: '', - ascending: '', - assetLibrary: '', - asterisk: '', - atpLogo: '', - attach: '', - australianRules: '', - autoEnhanceOff: '', - autoEnhanceOn: '', - autoRacing: '', - awayStatus: '', - azureLogo: '', - back: '', - backToWindow: '', - badge: '', - balloons: '', - barChart4: '', - barChartHorizontal: '', - baseball: '', - bidiLtr: '', - bidiRtl: '', - bingLogo: '', - blockContact: '', - blocked2: '', - blocked: '', - blowingSnow: '', - boards: '', - bold: '', - bookingsLogo: '', - bookmarks: '', - bookmarksMirrored: '', - boxLogo: '', - branchFork: '', - breadcrumb: '', - brightness: '', - broom: '', - bufferTimeAfter: '', - bufferTimeBefore: '', - bufferTimeBoth: '', - bulletedList: '', - bulletedListMirrored: '', - busSolid: '', - cafe: '', - cake: '', - calculatorAddition: '', - calculatorSubtract: '', - calendar: '', - calendarAgenda: '', - calendarDay: '', - calendarMirrored: '', - calendarReply: '', - calendarWeek: '', - calendarWorkWeek: '', - caloriesAdd: '', - camera: '', - cancel: '', - car: '', - caretBottomLeftSolid8: '', - caretBottomRightSolid8: '', - caretDown8: '', - caretDownSolid8: '', - caretHollow: '', - caretHollowMirrored: '', - caretLeft8: '', - caretLeftSolid8: '', - caretRight8: '', - caretRightSolid8: '', - caretSolid: '', - caretSolidMirrored: '', - caretTopLeftSolid8: '', - caretTopRightSolid8: '', - caretUp8: '', - caretUpSolid8: '', - cat: '', - cellPhone: '', - certificate: '', - chart: '', - chat: '', - chatInviteFriend: '', - checkList: '', - checkMark: '', - checkbox: '', - checkboxComposite: '', - checkboxIndeterminate: '', - chevronDown: '', - chevronDownMed: '', - chevronDownSmall: '', - chevronLeft: '', - chevronLeftMed: '', - chevronLeftSmall: '', - chevronRight: '', - chevronRightMed: '', - chevronRightSmall: '', - chevronUp: '', - chevronUpMed: '', - chevronUpSmall: '', - chromeBack: '', - chromeBackMirrored: '', - chromeClose: '', - chromeMinimize: '', - circleFill: '', - circleHalfFull: '', - circlePlus: '', - circleRing: '', - classNotebookLogo: '', - classroomLogo: '', - clear: '', - clearFilter: '', - clearFormatting: '', - clearNight: '', - clock: '', - closePane: '', - closePaneMirrored: '', - closedCaption: '', - cloudAdd: '', - cloudDownload: '', - cloudUpload: '', - cloudWeather: '', - cloudy: '', - cocktails: '', - code: '', - coffee: '', - collabsDbLogo: '', - collapseMenu: '', - collegeFootball: '', - collegeHoops: '', - color: '', - combine: '', - compassNw: '', - completed: '', - completedSolid: '', - contact: '', - contactCard: '', - contactInfo: '', - contrast: '', - copy: '', - cotton: '', - cricket: '', - css: '', - customList: '', - customListMirrored: '', - cycling: '', - dataConnectionLibrary: '', - dateTime2: '', - dateTime: '', - dateTimeMirrored: '', - decreaseIndentLegacy: '', - delete: '', - delveAnalytics: '', - delveAnalyticsLogo: '', - delveLogo: '', - descending: '', - design: '', - developerTools: '', - devices3: '', - devices4: '', - dialpad: '', - dictionary: '', - dietPlanNotebook: '', - disableUpdates: '', - dislike: '', - docLibrary: '', - dockLeft: '', - dockLeftMirrored: '', - dockRight: '', - docsLogo: '', - document: '', - documentReply: '', - documentSearch: '', - documentSet: '', - documentation: '', - door: '', - doubleBookmark: '', - doubleChevronDown12: '', - doubleChevronDown: '', - doubleChevronLeft12: '', - doubleChevronLeft: '', - doubleChevronLeftMed: '', - doubleChevronLeftMedMirrored: '', - doubleChevronRight12: '', - doubleChevronRight: '', - doubleChevronUp12: '', - doubleChevronUp: '', - down: '', - download: '', - drm: '', - drop: '', - dropboxLogo: '', - dropdown: '', - duststorm: '', - dynamicSmbLogo: '', - dynamics365Logo: '', - eatDrink: '', - edgeLogo: '', - edit: '', - editMail: '', - editMirrored: '', - editNote: '', - editPhoto: '', - editStyle: '', - embed: '', - emi: '', - emoji2: '', - emoji: '', - emojiDisappointed: '', - emojiNeutral: '', - emptyRecycleBin: '', - equalizer: '', - eraseTool: '', - error: '', - errorBadge: '', - event: '', - eventInfo: '', - excelDocument: '', - excelLogo: '', - exchangeLogo: '', - expandMenu: '', - fabricAssetLibrary: '', - fabricDataConnectionLibrary: '', - fabricDocLibrary: '', - fabricFolder: '', - fabricFolderFill: '', - fabricFolderSearch: '', - fabricFormLibrary: '', - fabricFormLibraryMirrored: '', - fabricMovetoFolder: '', - fabricNewFolder: '', - fabricOpenFolderHorizontal: '', - fabricPictureLibrary: '', - fabricPublicFolder: '', - fabricReportLibrary: '', - fabricReportLibraryMirrored: '', - fabricSyncFolder: '', - fabricUnsyncFolder: '', - facebookLogo: '', - family: '', - fangBody: '', - favoriteList: '', - favoriteStar: '', - favoriteStarFill: '', - fax: '', - ferry: '', - ferrySolid: '', - filter: '', - filters: '', - financial: '', - fingerprint: '', - flag: '', - flickDown: '', - flickLeft: '', - flickRight: '', - flickUp: '', - flow: '', - fog: '', - folder: '', - folderFill: '', - folderHorizontal: '', - folderOpen: '', - folderSearch: '', - font: '', - fontColor: '', - fontDecrease: '', - fontIncrease: '', - fontSize: '', - formLibrary: '', - formLibraryMirrored: '', - forward: '', - forwardEvent: '', - freezing: '', - frigid: '', - fullCircleMask: '', - fullScreen: '', - generate: '', - giftCard: '', - giftbox: '', - glasses: '', - glimmer: '', - globalNavButton: '', - globe: '', - globeFavorite: '', - golf: '', - googleDriveLogo: '', - gotoToday: '', - gripperTool: '', - group: '', - groupedAscending: '', - groupedDescending: '', - groupedList: '', - hailDay: '', - hailNight: '', - handwriting: '', - header1: '', - header2: '', - header3: '', - header4: '', - headset: '', - health: '', - heart: '', - heartFill: '', - help: '', - helpMirrored: '', - hide2: '', - hide: '', - history: '', - home: '', - homeSolid: '', - hospital: '', - hotel: '', - iOsAppStoreLogo: '', - important: '', - inboxCheck: '', - incidentTriangle: '', - increaseIndentLegacy: '', - info2: '', - info: '', - insertTextBox: '', - internetSharing: '', - issueTracking: '', - issueTrackingMirrored: '', - italic: '', - joinOnlineMeeting: '', - js: '', - label: '', - landscapeOrientation: '', - laptopSelected: '', - largeGrid: '', - library: '', - lifesaver: '', - lifesaverLock: '', - light: '', - lightbulb: '', - lightningBolt: '', - like: '', - link: '', - list: '', - listMirrored: '', - location: '', - locationCircle: '', - locationDot: '', - locationFill: '', - lock: '', - lowerBrightness: '', - lyncLogo: '', - mail: '', - mailAlert: '', - mailCheck: '', - mailFill: '', - mailForward: '', - mailForwardMirrored: '', - mailLowImportance: '', - mailPause: '', - mailRepeat: '', - mailReply: '', - mailReplyAll: '', - mailReplyAllMirrored: '', - mailReplyMirrored: '', - mapDirections: '', - mapPin: '', - market: '', - marketDown: '', - megaphone: '', - memo: '', - merge: '', - message: '', - messageFill: '', - microphone: '', - microsoftStaffhubLogo: '', - miniLink: '', - mobileSelected: '', - money: '', - more: '', - moreSports: '', - move: '', - moveToFolder: '', - msnLogo: '', - multiSelect: '', - multiSelectMirrored: '', - musicInCollection: '', - musicInCollectionFill: '', - musicNote: '', - nav2DMapView: '', - newFolder: '', - news: '', - noteForward: '', - notePinned: '', - noteReply: '', - numberField: '', - numberedList: '', - officeAssistantLogo: '', - officeFormLogo: '', - officeLogo: '', - officeStoreLogo: '', - officeVideoLogo: '', - offlineOneDriveParachute: '', - offlineOneDriveParachuteDisabled: '', - oneDrive: '', - oneDriveAdd: '', - oneNoteEduLogo: '', - oneNoteLogo: '', - openFile: '', - openFolderHorizontal: '', - openInNewWindow: '', - openPane: '', - openPaneMirrored: '', - org: '', - outOfOffice: '', - outlookLogo: '', - package: '', - page: '', - pageAdd: '', - pageCheckedOut: '', - pageCheckedin: '', - pageLeft: '', - pageRight: '', - pageSolid: '', - panoIndicator: '', - paratureLogo: '', - partlyCloudyDay: '', - partlyCloudyNight: '', - partyLeader: '', - pause: '', - paymentCard: '', - pc1: '', - pdf: '', - pencilReply: '', - people: '', - peopleAdd: '', - peopleAlert: '', - peopleBlock: '', - peoplePause: '', - peopleRepeat: '', - permissions: '', - phone: '', - photo2: '', - photo2Add: '', - photo2Remove: '', - photoCollection: '', - picture: '', - pictureLibrary: '', - pieDouble: '', - pill: '', - pin: '', - pinned: '', - pinnedFill: '', - planner: '', - play: '', - playerSettings: '', - poi: '', - postUpdate: '', - powerApps2Logo: '', - powerApps: '', - powerAppsLogo: '', - powerBiLogo: '', - powerPointDocument: '', - powerPointLogo: '', - precipitation: '', - presenceChickletVideo: '', - preview: '', - previewLink: '', - print: '', - printfaxPrinterFile: '', - proFootball: '', - proHockey: '', - product: '', - projectLogo: '', - protectedDocument: '', - publicCalendar: '', - publicContactCard: '', - publicEmail: '', - publicFolder: '', - puzzle: '', - questionnaire: '', - questionnaireMirrored: '', - quickNote: '', - radioBtnOn: '', - radioBullet: '', - rain: '', - rainShowersDay: '', - rainShowersNight: '', - rainSnow: '', - read: '', - readingMode: '', - receiptCheck: '', - receiptForward: '', - receiptReply: '', - recent: '', - recurringEvent: '', - recurringTask: '', - recycleBin: '', - redEye: '', - redo: '', - refresh: '', - reminderGroup: '', - remove: '', - removeEvent: '', - removeFilter: '', - removeLink: '', - removeOccurrence: '', - rename: '', - reopenPages: '', - repair: '', - reply: '', - replyAll: '', - replyAllAlt: '', - replyAllMirrored: '', - replyAlt: '', - replyMirrored: '', - reportLibrary: '', - reportLibraryMirrored: '', - returnToSession: '', - revToggleKey: '', - ribbon: '', - rightDoubleQuote: '', - ringer: '', - room: '', - rotate: '', - rugby: '', - running: '', - sad: '', - save: '', - saveAs: '', - search: '', - section: '', - sections: '', - securityGroup: '', - send: '', - sendMirrored: '', - setAction: '', - settings: '', - share: '', - shareiOs: '', - sharepointLogo: '', - shield: '', - shop: '', - shoppingCart: '', - showResults: '', - showResultsMirrored: '', - sidePanel: '', - singleBookmark: '', - sipMove: '', - skypeCheck: '', - skypeCircleCheck: '', - skypeCircleClock: '', - skypeCircleMinus: '', - skypeClock: '', - skypeLogo: '', - skypeMessage: '', - skypeMinus: '', - sliderThumb: '', - snow: '', - snowShowerDay: '', - snowShowerNight: '', - soccer: '', - socialListeningLogo: '', - sort: '', - sortDown: '', - sortLines: '', - sortUp: '', - speakers: '', - speedHigh: '', - split: '', - squalls: '', - stackIndicator: '', - starburst: '', - statusErrorFull: '', - statusTriangle: '', - stockDown: '', - stockUp: '', - stopwatch: '', - storeLogo: '', - storeLogoMed: '', - strikethrough: '', - subscribe: '', - subscript: '', - suitcase: '', - sunAdd: '', - sunQuestionMark: '', - sunny: '', - superscript: '', - swayLogo: '', - switch: '', - switcherStartEnd: '', - sync: '', - syncFolder: '', - syncToPc: '', - system: '', - tab: '', - table: '', - tablet: '', - tabletSelected: '', - tag: '', - taskManager: '', - taskManagerMirrored: '', - teamwork: '', - temporaryUser: '', - tennis: '', - textBox: '', - textField: '', - thumbnailView: '', - thumbnailViewMirrored: '', - thunderstorms: '', - ticket: '', - tiles2: '', - tiles: '', - timeline: '', - timer: '', - toggleBorder: '', - toggleFilled: '', - toggleThumb: '', - touch: '', - touchPointer: '', - train: '', - trainSolid: '', - transferCall: '', - triangleDown12: '', - triangleLeft12: '', - triangleRight12: '', - triangleSolidDown12: '', - triangleSolidLeft12: '', - triangleSolidRight12: '', - triangleSolidUp12: '', - triangleUp12: '', - trophy: '', - turnRight: '', - tvMonitor: '', - tvMonitorSelected: '', - underline: '', - undo: '', - unfavorite: '', - unknownCall: '', - unlock: '', - unpin: '', - unsubscribe: '', - unsyncFolder: '', - up: '', - upload: '', - video: '', - videoSolid: '', - view: '', - viewAll2: '', - viewAll: '', - visioLogo: '', - voicemailForward: '', - voicemailReply: '', - volume0: '', - volume1: '', - volume2: '', - volume3: '', - volumeDisabled: '', - waffle: '', - warning: '', - website: '', - weights: '', - windDirection: '', - windowsLogo: '', - wipePhone: '', - wordDocument: '', - wordLogo: '', - work: '', - workFlow: '', - worldClock: '', - yammerLogo: '', - zoom: '', - zoomIn: '', - zoomOut: '', + aadLogo: '\uED68', + accept: '\uE8FB', + accessLogo: '\uED69', + accounts: '\uE910', + add: '\uE710', + addEvent: '\uEEB5', + addFavorite: '\uF0C8', + addFavoriteFill: '\uF0C9', + addFriend: '\uE8FA', + addGroup: '\uEE3D', + addOnlineMeeting: '\uED8E', + addPhone: '\uED96', + addTo: '\uECC8', + admin: '\uE7EF', + adminALogo: '\uED6A', + adminCLogo: '\uED6B', + adminDLogo: '\uED6C', + adminELogo: '\uED6D', + adminLLogo: '\uED6E', + adminMLogo: '\uED6F', + adminOLogo: '\uED70', + adminPLogo: '\uED71', + adminSLogo: '\uED72', + adminYLogo: '\uED73', + airTickets: '\uEF7A', + airplane: '\uE709', + alarmClock: '\uE919', + album: '\uE7AB', + albumRemove: '\uEC62', + alchemyLogo: '\uED74', + alignCenter: '\uE8E3', + alignLeft: '\uE8E4', + alignRight: '\uE8E2', + androidLogo: '\uEF8B', + annotation: '\uE924', + appForOfficeLogo: '\uEEC7', + appIconDefault: '\uECAA', + arrivals: '\uEB34', + arrowDownRight8: '\uEED5', + arrowDownRightMirrored8: '\uEEF0', + arrowUpRight8: '\uEED4', + arrowUpRightMirrored8: '\uEEEF', + articles: '\uEAC1', + ascending: '\uEDC0', + assetLibrary: '\uEEB6', + asterisk: '\uEA38', + atpLogo: '\uEF85', + attach: '\uE723', + australianRules: '\uEE70', + autoEnhanceOff: '\uE78E', + autoEnhanceOn: '\uE78D', + autoRacing: '\uEB24', + awayStatus: '\uEE6A', + azureLogo: '\uEB6A', + back: '\uE72B', + backToWindow: '\uE73F', + badge: '\uEC1B', + balloons: '\uED7E', + barChart4: '\uEAE7', + barChartHorizontal: '\uE9EB', + baseball: '\uEB20', + bidiLtr: '\uE9AA', + bidiRtl: '\uE9AB', + bingLogo: '\uEB6B', + blockContact: '\uE8F8', + blocked2: '\uECE4', + blocked: '\uE733', + blowingSnow: '\uE9C9', + boards: '\uEF68', + bold: '\uE8DD', + bookingsLogo: '\uEDC7', + bookmarks: '\uE8A4', + bookmarksMirrored: '\uEA41', + boxLogo: '\uED75', + branchFork: '\uF173', + breadcrumb: '\uEF8C', + brightness: '\uE706', + broom: '\uEA99', + bufferTimeAfter: '\uF0D0', + bufferTimeBefore: '\uF0CF', + bufferTimeBoth: '\uF0D1', + bulletedList: '\uE8FD', + bulletedListMirrored: '\uEA42', + busSolid: '\uEB47', + cafe: '\uEC32', + cake: '\uECA4', + calculatorAddition: '\uE948', + calculatorSubtract: '\uE949', + calendar: '\uE787', + calendarAgenda: '\uEE9A', + calendarDay: '\uE8BF', + calendarMirrored: '\uED28', + calendarReply: '\uE8F5', + calendarWeek: '\uE8C0', + calendarWorkWeek: '\uEF51', + caloriesAdd: '\uF172', + camera: '\uE722', + cancel: '\uE711', + car: '\uE804', + caretBottomLeftSolid8: '\uF121', + caretBottomRightSolid8: '\uF122', + caretDown8: '\uEDD8', + caretDownSolid8: '\uEDDC', + caretHollow: '\uE817', + caretHollowMirrored: '\uEA45', + caretLeft8: '\uEDD5', + caretLeftSolid8: '\uEDD9', + caretRight8: '\uEDD6', + caretRightSolid8: '\uEDDA', + caretSolid: '\uE818', + caretSolidMirrored: '\uEA46', + caretTopLeftSolid8: '\uEF54', + caretTopRightSolid8: '\uEF55', + caretUp8: '\uEDD7', + caretUpSolid8: '\uEDDB', + cat: '\uED7F', + cellPhone: '\uE8EA', + certificate: '\uEB95', + chart: '\uE999', + chat: '\uE901', + chatInviteFriend: '\uECFE', + checkList: '\uE9D5', + checkMark: '\uE73E', + checkbox: '\uE739', + checkboxComposite: '\uE73A', + checkboxIndeterminate: '\uE73C', + chevronDown: '\uE70D', + chevronDownMed: '\uE972', + chevronDownSmall: '\uE96E', + chevronLeft: '\uE76B', + chevronLeftMed: '\uE973', + chevronLeftSmall: '\uE96F', + chevronRight: '\uE76C', + chevronRightMed: '\uE974', + chevronRightSmall: '\uE970', + chevronUp: '\uE70E', + chevronUpMed: '\uE971', + chevronUpSmall: '\uE96D', + chromeBack: '\uE830', + chromeBackMirrored: '\uEA47', + chromeClose: '\uE8BB', + chromeMinimize: '\uE921', + circleFill: '\uEA3B', + circleHalfFull: '\uED9E', + circlePlus: '\uEAEE', + circleRing: '\uEA3A', + classNotebookLogo: '\uEDC8', + classroomLogo: '\uEF75', + clear: '\uE894', + clearFilter: '\uEF8F', + clearFormatting: '\uEDDD', + clearNight: '\uE9C2', + clock: '\uE917', + closePane: '\uE89F', + closePaneMirrored: '\uEA49', + closedCaption: '\uEF84', + cloudAdd: '\uECA9', + cloudDownload: '\uEBD3', + cloudUpload: '\uEC8E', + cloudWeather: '\uE9BE', + cloudy: '\uE9BF', + cocktails: '\uEA9D', + code: '\uE943', + coffee: '\uEAEF', + collabsDbLogo: '\uEDC9', + collapseMenu: '\uEF66', + collegeFootball: '\uEB26', + collegeHoops: '\uEB25', + color: '\uE790', + combine: '\uEDBB', + compassNw: '\uE942', + completed: '\uE930', + completedSolid: '\uEC61', + contact: '\uE77B', + contactCard: '\uEEBD', + contactInfo: '\uE779', + contrast: '\uE7A1', + copy: '\uE8C8', + cotton: '\uEAF3', + cricket: '\uEB1E', + css: '\uEBEF', + customList: '\uEEBE', + customListMirrored: '\uEEBF', + cycling: '\uEAC7', + dataConnectionLibrary: '\uEEB7', + dateTime2: '\uEA17', + dateTime: '\uEC92', + dateTimeMirrored: '\uEE93', + decreaseIndentLegacy: '\uE290', + delete: '\uE74D', + delveAnalytics: '\uEEEE', + delveAnalyticsLogo: '\uEDCA', + delveLogo: '\uED76', + descending: '\uEDC1', + design: '\uEB3C', + developerTools: '\uEC7A', + devices3: '\uEA6C', + devices4: '\uEB66', + dialpad: '\uE75F', + dictionary: '\uE82D', + dietPlanNotebook: '\uEAC8', + disableUpdates: '\uE8D8', + dislike: '\uE8E0', + docLibrary: '\uEEB8', + dockLeft: '\uE90C', + dockLeftMirrored: '\uEA4C', + dockRight: '\uE90D', + docsLogo: '\uEDCB', + document: '\uE8A5', + documentReply: '\uEF57', + documentSearch: '\uEF6C', + documentSet: '\uEED6', + documentation: '\uEC17', + door: '\uEB75', + doubleBookmark: '\uEB8F', + doubleChevronDown12: '\uEE97', + doubleChevronDown: '\uEE04', + doubleChevronLeft12: '\uEE98', + doubleChevronLeft: '\uEDBE', + doubleChevronLeftMed: '\uE991', + doubleChevronLeftMedMirrored: '\uEA4D', + doubleChevronRight12: '\uEE99', + doubleChevronRight: '\uEDBF', + doubleChevronUp12: '\uEE96', + doubleChevronUp: '\uEDBD', + down: '\uE74B', + download: '\uE896', + drm: '\uECA8', + drop: '\uEB42', + dropboxLogo: '\uED77', + dropdown: '\uEDC5', + duststorm: '\uE9CD', + dynamicSmbLogo: '\uEDCD', + dynamics365Logo: '\uEDCC', + eatDrink: '\uE807', + edgeLogo: '\uEC60', + edit: '\uE70F', + editMail: '\uEF61', + editMirrored: '\uEB7E', + editNote: '\uED9D', + editPhoto: '\uEF77', + editStyle: '\uEF60', + embed: '\uECCE', + emi: '\uE731', + emoji2: '\uE76E', + emoji: '\uE899', + emojiDisappointed: '\uEA88', + emojiNeutral: '\uEA87', + emptyRecycleBin: '\uEF88', + equalizer: '\uE9E9', + eraseTool: '\uE75C', + error: '\uE783', + errorBadge: '\uEA39', + event: '\uECA3', + eventInfo: '\uED8B', + excelDocument: '\uEF73', + excelLogo: '\uEC28', + exchangeLogo: '\uED78', + expandMenu: '\uEF67', + fabricAssetLibrary: '\uF09C', + fabricDataConnectionLibrary: '\uF09D', + fabricDocLibrary: '\uF09E', + fabricFolder: '\uF0A9', + fabricFolderFill: '\uF0AA', + fabricFolderSearch: '\uF0A4', + fabricFormLibrary: '\uF09F', + fabricFormLibraryMirrored: '\uF0A0', + fabricMovetoFolder: '\uF0A5', + fabricNewFolder: '\uF0AB', + fabricOpenFolderHorizontal: '\uF0A8', + fabricPictureLibrary: '\uF0AC', + fabricPublicFolder: '\uF0A3', + fabricReportLibrary: '\uF0A1', + fabricReportLibraryMirrored: '\uF0A2', + fabricSyncFolder: '\uF0A7', + fabricUnsyncFolder: '\uF0A6', + facebookLogo: '\uECB3', + family: '\uEBDA', + fangBody: '\uECEB', + favoriteList: '\uE728', + favoriteStar: '\uE734', + favoriteStarFill: '\uE735', + fax: '\uEF5C', + ferry: '\uE7E3', + ferrySolid: '\uEB48', + filter: '\uE71C', + filters: '\uE795', + financial: '\uE7BB', + fingerprint: '\uE928', + flag: '\uE7C1', + flickDown: '\uE935', + flickLeft: '\uE937', + flickRight: '\uE938', + flickUp: '\uE936', + flow: '\uEF90', + fog: '\uE9CB', + folder: '\uE8B7', + folderFill: '\uE8D5', + folderHorizontal: '\uF12B', + folderOpen: '\uE838', + folderSearch: '\uEF65', + font: '\uE8D2', + fontColor: '\uE8D3', + fontDecrease: '\uE8E7', + fontIncrease: '\uE8E8', + fontSize: '\uE8E9', + formLibrary: '\uEEB9', + formLibraryMirrored: '\uEEBA', + forward: '\uE72A', + forwardEvent: '\uED8C', + freezing: '\uE9EF', + frigid: '\uE9CA', + fullCircleMask: '\uE91F', + fullScreen: '\uE740', + generate: '\uE9DA', + giftCard: '\uEB8E', + giftbox: '\uEC1F', + glasses: '\uEA16', + glimmer: '\uECF4', + globalNavButton: '\uE700', + globe: '\uE774', + globeFavorite: '\uEF53', + golf: '\uEB1F', + googleDriveLogo: '\uEE0B', + gotoToday: '\uE8D1', + gripperTool: '\uE75E', + group: '\uE902', + groupedAscending: '\uEE67', + groupedDescending: '\uEE66', + groupedList: '\uEF74', + hailDay: '\uEA00', + hailNight: '\uEA13', + handwriting: '\uE929', + header1: '\uEA19', + header2: '\uEF36', + header3: '\uEF37', + header4: '\uEF38', + headset: '\uE95B', + health: '\uE95E', + heart: '\uEB51', + heartFill: '\uEB52', + help: '\uE897', + helpMirrored: '\uEA51', + hide2: '\uEF89', + hide: '\uED1A', + history: '\uE81C', + home: '\uE80F', + homeSolid: '\uEA8A', + hospital: '\uE91D', + hotel: '\uE824', + iOsAppStoreLogo: '\uEF8A', + important: '\uE8C9', + inboxCheck: '\uEF64', + incidentTriangle: '\uE814', + increaseIndentLegacy: '\uE291', + info2: '\uEA1F', + info: '\uE946', + insertTextBox: '\uEC7D', + internetSharing: '\uE704', + issueTracking: '\uEEC0', + issueTrackingMirrored: '\uEEC1', + italic: '\uE8DB', + joinOnlineMeeting: '\uED8F', + js: '\uEBF0', + label: '\uE932', + landscapeOrientation: '\uEF6B', + laptopSelected: '\uEC76', + largeGrid: '\uEECB', + library: '\uE8F1', + lifesaver: '\uEF62', + lifesaverLock: '\uEF63', + light: '\uE793', + lightbulb: '\uEA80', + lightningBolt: '\uE945', + like: '\uE8E1', + link: '\uE71B', + list: '\uEA37', + listMirrored: '\uEA55', + location: '\uE81D', + locationCircle: '\uE80E', + locationDot: '\uE827', + locationFill: '\uE920', + lock: '\uE72E', + lowerBrightness: '\uEC8A', + lyncLogo: '\uED79', + mail: '\uE715', + mailAlert: '\uED80', + mailCheck: '\uED81', + mailFill: '\uE8A8', + mailForward: '\uE89C', + mailForwardMirrored: '\uEA56', + mailLowImportance: '\uED82', + mailPause: '\uED83', + mailRepeat: '\uED84', + mailReply: '\uE8CA', + mailReplyAll: '\uE8C2', + mailReplyAllMirrored: '\uEA58', + mailReplyMirrored: '\uEA57', + mapDirections: '\uE816', + mapPin: '\uE707', + market: '\uEAFC', + marketDown: '\uEF42', + megaphone: '\uE789', + memo: '\uE77C', + merge: '\uE7D5', + message: '\uE8BD', + messageFill: '\uEC70', + microphone: '\uE720', + microsoftStaffhubLogo: '\uF130', + miniLink: '\uE732', + mobileSelected: '\uEC75', + money: '\uEAFD', + more: '\uE712', + moreSports: '\uEB22', + move: '\uE7C2', + moveToFolder: '\uE8DE', + msnLogo: '\uEB6C', + multiSelect: '\uE762', + multiSelectMirrored: '\uEA98', + musicInCollection: '\uE940', + musicInCollectionFill: '\uEA36', + musicNote: '\uEC4F', + nav2DMapView: '\uE800', + newFolder: '\uE8F4', + news: '\uE900', + noteForward: '\uED99', + notePinned: '\uED9A', + noteReply: '\uED98', + numberField: '\uEDC4', + numberedList: '\uEA1C', + officeAssistantLogo: '\uEDCE', + officeFormLogo: '\uEF86', + officeLogo: '\uEB6E', + officeStoreLogo: '\uEDCF', + officeVideoLogo: '\uED7A', + offlineOneDriveParachute: '\uEEC8', + offlineOneDriveParachuteDisabled: '\uEEC9', + oneDrive: '\uE941', + oneDriveAdd: '\uEF32', + oneNoteEduLogo: '\uEDD0', + oneNoteLogo: '\uEC0D', + openFile: '\uE8E5', + openFolderHorizontal: '\uED25', + openInNewWindow: '\uE8A7', + openPane: '\uE8A0', + openPaneMirrored: '\uEA5B', + org: '\uECA6', + outOfOffice: '\uED34', + outlookLogo: '\uEB6D', + package: '\uE7B8', + page: '\uE7C3', + pageAdd: '\uEA1A', + pageCheckedOut: '\uF02C', + pageCheckedin: '\uF104', + pageLeft: '\uE760', + pageRight: '\uE761', + pageSolid: '\uE729', + panoIndicator: '\uE7B0', + paratureLogo: '\uED7B', + partlyCloudyDay: '\uE9C0', + partlyCloudyNight: '\uE9C1', + partyLeader: '\uECA7', + pause: '\uE769', + paymentCard: '\uE8C7', + pc1: '\uE977', + pdf: '\uEA90', + pencilReply: '\uEF7B', + people: '\uE716', + peopleAdd: '\uEA15', + peopleAlert: '\uED93', + peopleBlock: '\uED91', + peoplePause: '\uED94', + peopleRepeat: '\uED92', + permissions: '\uE8D7', + phone: '\uE717', + photo2: '\uEB9F', + photo2Add: '\uECAB', + photo2Remove: '\uECAC', + photoCollection: '\uE7AA', + picture: '\uE8B9', + pictureLibrary: '\uEEC2', + pieDouble: '\uEB04', + pill: '\uEACB', + pin: '\uE718', + pinned: '\uE840', + pinnedFill: '\uE842', + planner: '\uEDD1', + play: '\uE768', + playerSettings: '\uEF58', + poi: '\uECAF', + postUpdate: '\uE8F3', + powerApps2Logo: '\uF092', + powerApps: '\uEDD2', + powerAppsLogo: '\uF091', + powerBiLogo: '\uEA1E', + powerPointDocument: '\uEF72', + powerPointLogo: '\uEC2A', + precipitation: '\uE9CF', + presenceChickletVideo: '\uE979', + preview: '\uE8FF', + previewLink: '\uE8A1', + print: '\uE749', + printfaxPrinterFile: '\uE956', + proFootball: '\uEB27', + proHockey: '\uEB28', + product: '\uECDC', + projectLogo: '\uEDD4', + protectedDocument: '\uE8A6', + publicCalendar: '\uEF6D', + publicContactCard: '\uEF6E', + publicEmail: '\uEF6F', + publicFolder: '\uEF70', + puzzle: '\uEA86', + questionnaire: '\uEE19', + questionnaireMirrored: '\uEE4B', + quickNote: '\uE70B', + radioBtnOn: '\uECCB', + radioBullet: '\uE915', + rain: '\uE9C4', + rainShowersDay: '\uE9C3', + rainShowersNight: '\uEA0F', + rainSnow: '\uE9C7', + read: '\uE8C3', + readingMode: '\uE736', + receiptCheck: '\uEF5B', + receiptForward: '\uEF59', + receiptReply: '\uEF5A', + recent: '\uE823', + recurringEvent: '\uEF5D', + recurringTask: '\uEDB2', + recycleBin: '\uEF87', + redEye: '\uE7B3', + redo: '\uE7A6', + refresh: '\uE72C', + reminderGroup: '\uEBF8', + remove: '\uE738', + removeEvent: '\uED8A', + removeFilter: '\uEB08', + removeLink: '\uED90', + removeOccurrence: '\uED9B', + rename: '\uE8AC', + reopenPages: '\uED50', + repair: '\uE90F', + reply: '\uE97A', + replyAll: '\uEE0A', + replyAllAlt: '\uEF5F', + replyAllMirrored: '\uEE36', + replyAlt: '\uEF5E', + replyMirrored: '\uEE35', + reportLibrary: '\uEEBB', + reportLibraryMirrored: '\uEEBC', + returnToSession: '\uED24', + revToggleKey: '\uE845', + ribbon: '\uE9D1', + rightDoubleQuote: '\uE9B1', + ringer: '\uEA8F', + room: '\uED9F', + rotate: '\uE7AD', + rugby: '\uEB2D', + running: '\uEADA', + sad: '\uE757', + save: '\uE74E', + saveAs: '\uE792', + search: '\uE721', + section: '\uEC0C', + sections: '\uEF76', + securityGroup: '\uED85', + send: '\uE724', + sendMirrored: '\uEA63', + setAction: '\uF071', + settings: '\uE713', + share: '\uE72D', + shareiOs: '\uEF79', + sharepointLogo: '\uED18', + shield: '\uEA18', + shop: '\uE719', + shoppingCart: '\uE7BF', + showResults: '\uE8BC', + showResultsMirrored: '\uEA65', + sidePanel: '\uEF52', + singleBookmark: '\uEDFF', + sipMove: '\uE759', + skypeCheck: '\uEF80', + skypeCircleCheck: '\uEF7D', + skypeCircleClock: '\uEF7E', + skypeCircleMinus: '\uEF7F', + skypeClock: '\uEF81', + skypeLogo: '\uEB6F', + skypeMessage: '\uEF83', + skypeMinus: '\uEF82', + sliderThumb: '\uEC13', + snow: '\uEB46', + snowShowerDay: '\uE9FD', + snowShowerNight: '\uEA11', + soccer: '\uEB21', + socialListeningLogo: '\uED7C', + sort: '\uE8CB', + sortDown: '\uEE69', + sortLines: '\uE9D0', + sortUp: '\uEE68', + speakers: '\uE7F5', + speedHigh: '\uEC4A', + split: '\uEDBC', + squalls: '\uE9CC', + stackIndicator: '\uE7FF', + starburst: '\uEF78', + statusErrorFull: '\uEB90', + statusTriangle: '\uEA82', + stockDown: '\uEB0F', + stockUp: '\uEB11', + stopwatch: '\uE916', + storeLogo: '\uEA96', + storeLogoMed: '\uEA04', + strikethrough: '\uEDE0', + subscribe: '\uEDA1', + subscript: '\uEDDF', + suitcase: '\uEDD3', + sunAdd: '\uEF69', + sunQuestionMark: '\uEF6A', + sunny: '\uE9BD', + superscript: '\uEDDE', + swayLogo: '\uED29', + switch: '\uE8AB', + switcherStartEnd: '\uE810', + sync: '\uE895', + syncFolder: '\uE8F7', + syncToPc: '\uEE6E', + system: '\uE770', + tab: '\uE7E9', + table: '\uED86', + tablet: '\uE70A', + tabletSelected: '\uEC74', + tag: '\uE8EC', + taskManager: '\uEDB7', + taskManagerMirrored: '\uEDB8', + teamwork: '\uEA12', + temporaryUser: '\uEE58', + tennis: '\uEB33', + textBox: '\uEDC2', + textField: '\uEDC3', + thumbnailView: '\uE7B6', + thumbnailViewMirrored: '\uEA67', + thunderstorms: '\uE9C6', + ticket: '\uEB54', + tiles2: '\uEF7C', + tiles: '\uECA5', + timeline: '\uED9C', + timer: '\uE91E', + toggleBorder: '\uEC12', + toggleFilled: '\uEC11', + toggleThumb: '\uEC14', + touch: '\uE815', + touchPointer: '\uE7C9', + train: '\uE7C0', + trainSolid: '\uEB4D', + transferCall: '\uED95', + triangleDown12: '\uEED1', + triangleLeft12: '\uEED2', + triangleRight12: '\uEED3', + triangleSolidDown12: '\uEECD', + triangleSolidLeft12: '\uEECE', + triangleSolidRight12: '\uEECF', + triangleSolidUp12: '\uEECC', + triangleUp12: '\uEED0', + trophy: '\uED3F', + turnRight: '\uE7DB', + tvMonitor: '\uE7F4', + tvMonitorSelected: '\uEC77', + underline: '\uE8DC', + undo: '\uE7A7', + unfavorite: '\uE8D9', + unknownCall: '\uED97', + unlock: '\uE785', + unpin: '\uE77A', + unsubscribe: '\uEDA0', + unsyncFolder: '\uE8F6', + up: '\uE74A', + upload: '\uE898', + video: '\uE714', + videoSolid: '\uEA0C', + view: '\uE890', + viewAll2: '\uEF56', + viewAll: '\uE8A9', + visioLogo: '\uED7D', + voicemailForward: '\uED87', + voicemailReply: '\uED88', + volume0: '\uE992', + volume1: '\uE993', + volume2: '\uE994', + volume3: '\uE995', + volumeDisabled: '\uEA85', + waffle: '\uED89', + warning: '\uE7BA', + website: '\uEB41', + weights: '\uEADB', + windDirection: '\uEBE6', + windowsLogo: '\uE782', + wipePhone: '\uED8D', + wordDocument: '\uEF71', + wordLogo: '\uEC29', + work: '\uE821', + workFlow: '\uEA01', + worldClock: '\uE918', + yammerLogo: '\uED19', + zoom: '\uE71E', + zoomIn: '\uE8A3', + zoomOut: '\uE71F', }; -console.timeEnd('createIcon'); - function _createIcon(content: string): any { let val = diff --git a/packages/styling/src/utilities/theme.ts b/packages/styling/src/utilities/theme.ts index e69de29bb2d1d6..e28ff9b1f0f4a1 100644 --- a/packages/styling/src/utilities/theme.ts +++ b/packages/styling/src/utilities/theme.ts @@ -0,0 +1,50 @@ +export interface IColorPalette { + backgroundColor: string; + themePrimaryColor: string; + themeAccentColor: string; +} + +export interface IFont { + fontFamily: string; + fontSize: string; + fontWeight: string; + fontStyle?: string; +} + +export interface IFontPallete { + tiny: IFont; + xsmall: IFont; + small: IFont; + smallPlus: IFont; + medium: IFont; + mediumPlus: IFont; + large: IFont; + xLarge: IFont; + xxLarge: IFont; + superLarge: IFont; +} + +export interface ITheme { + +} + +export function setTheme(theme: ITheme): void { + +} + +export function generateColorSteps(fromColor: string, toColor: string, stepsInBetween: number) { + + +} + +export function createTheme(colors: IColorPalette, fonts: IFontPallete): ITheme { + return { + themePrimary: colors.themePrimaryColor, + themeSecondary: colors.themeSecondary || lighter(colors.themePrimaryColor, 10), + themeTertiary + }; +} + +export function lighter(color: string) { + +} \ No newline at end of file From 0f0bcb0eb92b4d44dcc48819397ee05a2dc6872e Mon Sep 17 00:00:00 2001 From: David Zearing Date: Tue, 11 Apr 2017 11:24:13 -0700 Subject: [PATCH 13/25] Fixing --- packages/styling/src/styles/colors.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/styling/src/styles/colors.ts b/packages/styling/src/styles/colors.ts index e27f37d57df595..af15f7e58eb21d 100644 --- a/packages/styling/src/styles/colors.ts +++ b/packages/styling/src/styles/colors.ts @@ -75,13 +75,13 @@ export const defaultPalette = { }; export interface ISwatch { - color: string; + palleteKey: string; /* If defined, can validate that the resulting color is contrasting enough. */ backgroundSwatch: string; } -export interface IColorScheme { +export interface ISwatchSet { // Background color in various states. From dac0dd191868030a3facfb743fca9fcaf8b3cd7b Mon Sep 17 00:00:00 2001 From: David Zearing Date: Tue, 11 Apr 2017 18:16:31 -0700 Subject: [PATCH 14/25] Fixing. --- packages/styling/src/examples/IconPage.tsx | 1 + packages/styling/src/utilities/theme.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/styling/src/examples/IconPage.tsx b/packages/styling/src/examples/IconPage.tsx index fc5fd2233ffd26..015f5d4fcf3d02 100644 --- a/packages/styling/src/examples/IconPage.tsx +++ b/packages/styling/src/examples/IconPage.tsx @@ -58,6 +58,7 @@ const styles = { }, ':focus': { + color: defaultPalette.themePrimary, opacity: 1, background: defaultPalette.themeLighterAlt }, diff --git a/packages/styling/src/utilities/theme.ts b/packages/styling/src/utilities/theme.ts index e28ff9b1f0f4a1..695c52528e2c5f 100644 --- a/packages/styling/src/utilities/theme.ts +++ b/packages/styling/src/utilities/theme.ts @@ -23,6 +23,7 @@ export interface IFontPallete { xxLarge: IFont; superLarge: IFont; } +/* export interface ITheme { @@ -47,4 +48,4 @@ export function createTheme(colors: IColorPalette, fonts: IFontPallete): ITheme export function lighter(color: string) { -} \ No newline at end of file +}*/ From 330e64265e2253937171c821123be6ec2195c223 Mon Sep 17 00:00:00 2001 From: David Zearing Date: Mon, 17 Apr 2017 17:05:58 -0700 Subject: [PATCH 15/25] Updates, adding classes and animation pages. --- packages/styling/index.html | 7 + packages/styling/package.json | 6 +- packages/styling/src/classNames/animations.ts | 5 + packages/styling/src/classNames/fonts.ts | 5 + packages/styling/src/classNames/icons.ts | 21 + packages/styling/src/classNames/index.ts | 17 + packages/styling/src/demoIndex.tsx | 3 +- .../styling/src/examples/AnimationPage.tsx | 162 +++- packages/styling/src/examples/ColorPage.tsx | 37 +- packages/styling/src/examples/FontPage.tsx | 24 +- .../styling/src/examples/IconPage.styles.ts | 25 + packages/styling/src/examples/IconPage.tsx | 109 +-- .../styling/src/examples/IconTile.styles.ts | 54 ++ packages/styling/src/examples/IconTile.tsx | 21 + .../src/examples/components/Header.tsx | 11 - .../styling/src/examples/components/Page.tsx | 23 + .../src/examples/components/PageHeader.tsx | 26 + .../src/examples/components/Paragraph.tsx | 0 .../styling/src/examples/components/index.ts | 2 + packages/styling/src/styles/animations.ts | 144 ++-- packages/styling/src/styles/fonts.ts | 2 +- packages/styling/src/styles/icons.ts | 727 +++++++++++++++++- .../styling/src/utilities/getClassNames.ts | 14 + .../styling/src/utilities/glamorPlugins.ts | 11 + packages/styling/yarn.lock | 25 +- 25 files changed, 1240 insertions(+), 241 deletions(-) create mode 100644 packages/styling/src/classNames/animations.ts create mode 100644 packages/styling/src/classNames/fonts.ts create mode 100644 packages/styling/src/classNames/icons.ts create mode 100644 packages/styling/src/classNames/index.ts create mode 100644 packages/styling/src/examples/IconPage.styles.ts create mode 100644 packages/styling/src/examples/IconTile.styles.ts create mode 100644 packages/styling/src/examples/IconTile.tsx delete mode 100644 packages/styling/src/examples/components/Header.tsx create mode 100644 packages/styling/src/examples/components/Page.tsx create mode 100644 packages/styling/src/examples/components/PageHeader.tsx create mode 100644 packages/styling/src/examples/components/Paragraph.tsx create mode 100644 packages/styling/src/examples/components/index.ts create mode 100644 packages/styling/src/utilities/getClassNames.ts create mode 100644 packages/styling/src/utilities/glamorPlugins.ts diff --git a/packages/styling/index.html b/packages/styling/index.html index 3e3a7bb4c56a70..e30509a83e4844 100644 --- a/packages/styling/index.html +++ b/packages/styling/index.html @@ -6,12 +6,19 @@ Styling Examples +