[
  {
    "path": ".gitignore",
    "content": "### Project ###\n# Docs\n/docs/build/\n# Don't use yarn for library project\nyarn.lock\n# Transpiled source directory\nlib/\n\n### VS Code ###\n.vscode/\n\n### WebStorm ###\n.idea/\n\n### Node ###\n# Logs\nlogs\n*.log\nnpm-debug.log*\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n### For Vim Users ###\n# swap\n[._]*.s[a-v][a-z]\n[._]*.sw[a-p]\n[._]s[a-v][a-z]\n[._]sw[a-p]\n# session\nSession.vim\n# temporary\n.netrwhist\n*~\n# auto-generated tag files\ntags\n\n### Python ###\n*.pyc\n\n### Jest Generated Files ###\n/packages/**/jest_0\n"
  },
  {
    "path": ".npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\n\nnode_js:\n  - \"7\"\n\nsudo: false\n\ncache:\n  directories:\n    - \"node_modules\"\n\nbefore_script:\n  - lerna bootstrap\n  - npm run clean\n\nscript:\n  - npm run build\n  - npm run test\n"
  },
  {
    "path": "README.md",
    "content": "React Material Components Web\n=============================\n\n[![License: MIT](https://img.shields.io/github/license/mashape/apistatus.svg)](https://opensource.org/licenses/MIT)\n[![npm version](https://badge.fury.io/js/react-material-components-web.svg)](https://www.npmjs.com/package/react-material-components-web)\n[![Build Status](https://img.shields.io/travis/react-mdc/react-material-components-web.svg)](https://travis-ci.org/react-mdc/react-material-components-web)\n\n\nReact wrapper of [Material Components Web](\nhttps://github.com/material-components/material-components-web)\n\nUnder Active Development\n------------------------\n\nThe project is under active development.\n\nEvery updates can contain breaking changes before 0.2.0.\n\nWe **do not** recommend you to use this library for produciton applications at this time.\n\nDocumentation\n-------------\n\nYou can find documentation with live demo at https://react-mdc.github.io/\n\nFeatures\n--------\n\n*  Typed strictly with [TypeScript](http://typescriptlang.org)\n\n   You can access typing support by also using TypeScript\n\n*  Stylesheet independent\n\n   Since *Material Components Web* can be customized with scss,\n   it does not depend on specific stylesheet.\n   You can load your own stylesheet or a default one.\n\n*  Each component packaged individually\n\n   Like *Material Components Web*, You can access all components individually,\n   under [@react-mdc npm scope](https://www.npmjs.com/%7Ereact-mdc).\n\nGetting Start\n-------------\n\nInstall the library\n\n``` bash\n$ npm install --save @react-mdc/typography\n```\n\nImport the stylesheet\n\n``` html\n<link type=\"text/css\" href=\"/static/material-components-web.min.css\" rel=\"stylesheet\" />\n\n```\n\nOr load using webpack and scss-loader\n\n`my-mdc.scss`\n``` scss\n\n// My main Sass file.\n$mdc-theme-primary: #9c27b0;\n$mdc-theme-accent: #76ff03;\n$mdc-theme-background: #fff;\n\n@import \"material-components-web/material-components-web\";\n\n```\n\n`app.js`\n``` javascript\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport \"./stylesheets/my-mdc.scss\";\nimport Main from './main.js';\n\nReactDOM.render(<Main />, document.getElementById('root'));\n\n```\n\nAnd import *@react-mdc* then give it a shot.\n\n`main.js`\n``` typescript\n\nimport * as React from \"react\";\nimport Typography from \"@react-mdc/typography\";\n\nexport default class Main extends React.Component<{}, {}> {\n    render () {\n        return (\n            <Typography>\n                <Typography.Title>\n                    This is an example\n                </Typography.Title>\n                <Typography.Body2>\n                    Hello world!\n                </Typography.Body2>\n            </Typography>\n        );\n    }\n}\n\n```\n\nSetup for Development\n---------------------\n\nBootstrap\n\n``` shell\n\n$ lerna bootstrap\n\n```\n\nBuild\n\n``` shell\n\n$ npm run build\n\n```\n\n\nRun Docs\n--------\n\n``` shell\n\n$ cd docs\n$ npm start\n\n```\n\nWatch for Changes and Build\n---------------------------\n\n``` shell\n\n$ npm run watch\n\n```\n\n\nRun Test\n--------\n\n``` shell\n\n$ npm test\n\n```\n\nto watch\n\n``` shell\n\n$ npm test:watch\n\n```\n\n"
  },
  {
    "path": "docs/.gitignore",
    "content": "### Typescript ###\n.awcache/\n\n### Node ###\n# Logs\nlogs\n*.log\nnpm-debug.log*\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n### For Vim Users ###\n# swap\n[._]*.s[a-v][a-z]\n[._]*.sw[a-p]\n[._]s[a-v][a-z]\n[._]sw[a-p]\n# session\nSession.vim\n# temporary\n.netrwhist\n*~\n# auto-generated tag files\ntags\n"
  },
  {
    "path": "docs/config/webpack/app.js",
    "content": "const fs = require(\"fs\");\nconst path = require(\"path\");\nconst webpack = require(\"webpack\");\n\nconst ExtractTextPlugin = require(\"extract-text-webpack-plugin\");\nconst {\n    TsConfigPathsPlugin,\n    CheckerPlugin\n} = require(\"awesome-typescript-loader\");\n\nconst {\n    DOCS_ROOT,\n    BUILD_PATH,\n    SRC_ROOT,\n    PRODUCTION\n} = require(\"./constants\");\n\nfunction loadManifest(name) {\n    const manifestName = name + \"-manifest.json\";\n    return JSON.parse(fs.readFileSync(path.resolve(BUILD_PATH, manifestName), \"utf-8\"));\n}\n\n/* Configure plugins */\nconst extractVendorStyle = new ExtractTextPlugin({\n    filename: \"vendor.css\"\n});\nconst extractLocalStyle = new ExtractTextPlugin({\n    filename: \"local.css\"\n});\n\nconst ENV_PLUGINS = PRODUCTION ? [\n    new webpack.DefinePlugin({\n        \"process.env\": {\n            NODE_ENV: JSON.stringify(process.env.NODE_ENV)\n        }\n    }),\n    new webpack.optimize.UglifyJsPlugin({\n        compress: {\n            warnings: false\n        }\n    })\n] : [];\n\nmodule.exports = {\n    context: DOCS_ROOT,\n    entry: {\n        app: [path.resolve(SRC_ROOT, \"js\", \"index.tsx\")]\n    },\n    plugins: [\n        extractVendorStyle,\n        extractLocalStyle,\n        new webpack.DllReferencePlugin({\n            context: DOCS_ROOT,\n            manifest: loadManifest(\"vendor\")\n        }),\n        new TsConfigPathsPlugin(),\n        new CheckerPlugin()\n    ].concat(ENV_PLUGINS),\n    output: {\n        path: BUILD_PATH,\n        publicPath: \"/build/\",\n        filename: \"bundle.js\"\n    },\n    resolve: {\n        alias: {\n            app: SRC_ROOT\n        },\n        extensions: [\"*\", \".js\", \".ts\", \".tsx\"]\n    },\n    module: {\n        loaders: [\n            /* Typescript */\n            {\n                test: /\\.tsx?$/,\n                loader: \"awesome-typescript-loader\",\n                options: {\n                    useCache: true,\n                }\n            },\n            {\n                test: /\\.tsx?$/,\n                enforce: 'pre',\n                loader: 'tslint-loader',\n                options: {\n                    emitErrors: true,\n                }\n            },\n            /* Styles */\n            {\n                // Don't compile external stylesheets\n                test: /\\.css$/,\n                include: /node_modules/,\n                loader: extractVendorStyle.extract({\n                    use: \"css-loader\",\n                    // use style-loader in development\n                    fallback: \"style-loader\"\n                })\n            },\n            /* SCSS */\n            {\n                test: /\\.scss$/,\n                loader: extractLocalStyle.extract({\n                    use: [{\n                            loader: 'css-loader',\n                            options: {\n                                localIdentName: '[local]--[hash:base64:5]',\n                                importLoaders: 1\n                            }\n                        },\n                        'postcss-loader',\n                        {\n                            loader: 'sass-loader',\n                            options: {\n                                includePaths: [\n                                    path.resolve(DOCS_ROOT, 'node_modules'),\n                                    path.resolve(DOCS_ROOT, 'src')\n                                ]\n                            }\n                        }\n                    ],\n                    // use style-loader in development\n                    fallback: 'style-loader'\n                })\n            },\n            /* Assets */\n            {\n                exclude: [\n                    /\\.html$/,\n                    /\\.(ts|tsx)$/,\n                    /\\.css$/,\n                    /\\.scss$/,\n                    /\\.json$/,\n                    /\\.svg$/,\n                    /\\.js$/\n                ],\n                loader: \"url-loader\",\n                options: {\n                    limit: 10000,\n                    name: \"static/media/[name].[hash:8].[ext]\"\n                }\n            },\n            {\n                test: /\\.json$/,\n                loader: \"json-loader\"\n            },\n            {\n                test: /\\.svg$/,\n                loader: \"file-loader\",\n                query: {\n                    name: \"static/media/[name].[hash:8].[ext]\"\n                }\n            }\n        ]\n    },\n    devtool: \"source-map\"\n};\n"
  },
  {
    "path": "docs/config/webpack/constants.js",
    "content": "const path = require(\"path\");\n\nconst PROJECT_ROOT = module.exports.PROJECT_ROOT = path.resolve(__dirname, \"..\", \"..\", \"..\");\nconst DOCS_ROOT = module.exports.DOCS_ROOT = path.resolve(PROJECT_ROOT, \"docs\");\nconst BUILD_PATH = module.exports.BUILD_PATH = path.resolve(DOCS_ROOT, \"build\");\nconst SRC_ROOT = module.exports.SRC_ROOT = path.resolve(DOCS_ROOT, \"src\");\n\nconst PRODUCTION = module.exports.PRODUCTION = process.env.NODE_ENV === \"production\";\n"
  },
  {
    "path": "docs/config/webpack/vendor.js",
    "content": "const path = require(\"path\");\nconst webpack = require(\"webpack\");\n\nconst {\n  DOCS_ROOT,\n  BUILD_PATH,\n  PRODUCTION\n} = require(\"./constants\");\n\nconst ENV_PLUGINS = PRODUCTION ? [\n  new webpack.optimize.UglifyJsPlugin({\n    compress: {\n      warnings: false\n    }\n  }),\n  new webpack.DefinePlugin({\n    \"process.env\": {\n      NODE_ENV: JSON.stringify(process.env.NODE_ENV)\n    }\n  })\n] : [];\n\nmodule.exports = {\n  context: DOCS_ROOT,\n  entry: {\n    vendor: [path.resolve(DOCS_ROOT, \"vendor.js\")]\n  },\n  plugins: [\n    new webpack.DllPlugin({\n      context: DOCS_ROOT,\n      path: path.resolve(BUILD_PATH, \"[name]-manifest.json\"),\n      name: \"[name]_dll\"\n    })\n  ].concat(ENV_PLUGINS),\n  output: {\n    path: BUILD_PATH,\n    publicPath: \"/build/\",\n    filename: \"[name].dll.js\",\n    library: \"[name]_dll\"\n  },\n  devtool: \"source-map\"\n};\n"
  },
  {
    "path": "docs/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>React Material Components Web: React Components for Material Components Web</title>\n    <link type=\"text/css\" href=\"build/vendor.css\" rel=\"stylesheet\" />\n    <link type=\"text/css\" href=\"build/local.css\" rel=\"stylesheet\" />\n  </head>\n  <body>\n    <div id=\"root\">\n      <div id=\"preload-react\">\n        Loading...\n      </div>\n    </div>\n    <script type=\"text/javascript\" src=\"build/vendor.dll.js\"></script>\n    <script type=\"text/javascript\" src=\"build/bundle.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/package.json",
    "content": "{\n  \"name\": \"Document\",\n  \"author\": \"Choi Geonu\",\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@react-mdc/button\": \"^0.1.8\",\n    \"@react-mdc/card\": \"^0.1.9\",\n    \"@react-mdc/checkbox\": \"^0.1.12\",\n    \"@react-mdc/dialog\": \"^0.1.7\",\n    \"@react-mdc/drawer\": \"^0.1.13\",\n    \"@react-mdc/elevation\": \"^0.1.9\",\n    \"@react-mdc/fab\": \"^0.1.9\",\n    \"@react-mdc/form-field\": \"^0.1.8\",\n    \"@react-mdc/layout-grid\": \"^0.1.9\",\n    \"@react-mdc/list\": \"^0.1.9\",\n    \"@react-mdc/radio\": \"^0.1.12\",\n    \"@react-mdc/ripple\": \"^0.1.11\",\n    \"@react-mdc/switch\": \"^0.1.9\",\n    \"@react-mdc/textfield\": \"^0.1.11\",\n    \"@react-mdc/theme\": \"^0.1.8\",\n    \"@react-mdc/toolbar\": \"^0.1.11\",\n    \"@react-mdc/typography\": \"^0.1.8\",\n    \"@types/codemirror\": \"0.0.40\",\n    \"@types/react\": \"^15.0.18\",\n    \"@types/react-dom\": \"^0.14.23\",\n    \"classnames\": \"^2.2.5\",\n    \"codemirror\": \"^5.25.2\",\n    \"core-js\": \"^2.4.1\",\n    \"material-components-web\": \"^0.10.0\",\n    \"react\": \"^15.0.0\",\n    \"react-dom\": \"^15.4.2\",\n    \"react-router\": \"^3.0.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"autoprefixer\": \"^7.0.1\",\n    \"awesome-typescript-loader\": \"^3.1.3\",\n    \"cross-env\": \"^4.0.0\",\n    \"css-loader\": \"^0.28.1\",\n    \"enzyme\": \"^2.8.2\",\n    \"extract-text-webpack-plugin\": \"2.1.0\",\n    \"file-loader\": \"^0.11.1\",\n    \"gh-pages\": \"^1.0.0\",\n    \"json-loader\": \"^0.5.4\",\n    \"node-sass\": \"^4.5.0\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"postcss-loader\": \"^2.0.5\",\n    \"raw-loader\": \"^0.5.1\",\n    \"sass-loader\": \"^6.0.5\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"style-loader\": \"^0.17.0\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-loader\": \"^3.5.3\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\",\n    \"url-loader\": \"^0.5.7\",\n    \"webpack\": \"^2.2.1\",\n    \"webpack-dev-server\": \"^2.3.0\"\n  },\n  \"scripts\": {\n    \"clean\": \"shx rm -rf build/\",\n    \"precompile\": \"npm run clean\",\n    \"postinstall\": \"npm run compile:vendor\",\n    \"compile:vendor\": \"webpack --progress --config config/webpack/vendor.js\",\n    \"compile:app\": \"webpack --progress --config config/webpack/app.js\",\n    \"compile\": \"npm-run-all compile:vendor compile:app\",\n    \"start:webpack-dev-server\": \"webpack-dev-server --progress --config config/webpack/app.js\",\n    \"start\": \"npm-run-all compile:vendor start:webpack-dev-server\",\n    \"release:compile\": \"cross-env NODE_ENV=production npm run compile\",\n    \"release:gh-pages\": \"gh-pages -d . -m 'Update Docs' --remove node_modules --repo https://github.com/react-mdc/react-mdc.github.io.git --branch master --dotfiles true\",\n    \"release\": \"npm-run-all clean release:compile release:gh-pages\"\n  },\n  \"version\": \"0.1.7\"\n}\n"
  },
  {
    "path": "docs/postcss.config.js",
    "content": "module.exports = {\n  plugins: [\n    require('autoprefixer')({ /* ...options */ })\n  ]\n};\n"
  },
  {
    "path": "docs/src/js/Container/MainToolbar.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Toolbar from \"@react-mdc/toolbar\";\n\nimport DarkTheme from \"app/js/components/DarkTheme\";\nimport { MaterialIcon } from \"app/js/components/Icon\";\n\nimport * as styles from \"./styles.scss\";\n\nexport type Props = {\n    className?: string,\n};\n\nexport default class MainToolbar extends React.Component<Props, {}> {\n    public props: Props;\n\n    public render() {\n        return (\n            <DarkTheme.Meta>\n                <Toolbar className={classNames(this.props.className, styles.toolbar)} fixed>\n                    <Toolbar.Row>\n                        <Toolbar.Section.Meta align=\"start\">\n                            <Link to=\"/\" className={styles[\"toolbar-title\"]}>\n                                <MaterialIcon className={styles[\"toolbar-icon\"]}>\n                                    layers\n                                </MaterialIcon>\n                                <Toolbar.Title className={styles[\"toolbar-title-text\"]}>\n                                    React Material Components Web\n                                </Toolbar.Title>\n                            </Link>\n                        </Toolbar.Section.Meta>\n                    </Toolbar.Row>\n                </Toolbar>\n            </DarkTheme.Meta>\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/Container/index.tsx",
    "content": "import * as React from \"react\";\n\nimport Toolbar from \"@react-mdc/toolbar\";\nimport Typography from \"@react-mdc/typography\";\n\nimport MainToolbar from \"./MainToolbar\";\n\nimport * as styles from \"./styles.scss\";\n\nexport default class Container extends React.Component<{ children?: React.ReactChild }, {}> {\n    public render() {\n        return (\n            <Typography className={styles[\"container\"]}>\n                <MainToolbar />\n                <Toolbar.FixedToolbarAdjusted>\n                    {this.props.children}\n                </Toolbar.FixedToolbarAdjusted>\n            </Typography>\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/Container/styles.scss",
    "content": "@import \"style/vars/theme\";\n\n:local {\n    .container {\n        flex: 1;\n    }\n    .toolbar {\n        /* Codemirror has z-index > 3 */\n        z-index: 4;\n    }\n    .toolbar-title {\n        text-decoration: none;\n        @include mdc-theme-dark {\n            @include mdc-theme-prop(color, text-primary-on-dark);\n        }\n    }\n    .toolbar-icon {\n        padding-right: 16px;\n    }\n    .toolbar-title-text {\n        font-family: Roboto Mono;\n    }\n}\n"
  },
  {
    "path": "docs/src/js/common/types.ts",
    "content": ""
  },
  {
    "path": "docs/src/js/compat.ts",
    "content": "/**\n * Compatibility\n */\n\n// ES2017 Polyfills\nimport \"core-js/es7/index.js\";\n"
  },
  {
    "path": "docs/src/js/components/Code.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\nimport { default as CodeMirror, Props as CodeMirrorProps } from \"./CodeMirror\";\n\nimport * as styles from \"./styles.scss\";\n\ntype Props = CodeMirrorProps & {\n    className?: string,\n    options?: any,\n    mode?: string,\n    lineNumbers?: boolean,\n    readOnly?: boolean,\n};\n\nfunction ifNull<T>(nullable: T | null | undefined, then: T): T {\n    if (nullable == null) {\n        return then;\n    } else {\n        return nullable;\n    }\n}\n\nexport default function Code(p: Props) {\n    let {\n        className,\n        options,\n        mode,\n        lineNumbers,\n        readOnly,\n        ...props,\n    } = p;\n\n    className = classNames(styles.code, className);\n    const mergedOptions: {\n        [key: string]: any,\n    } = {};\n    mergedOptions.mode = ifNull<string>(mode, \"jsx\");\n    mergedOptions.lineNumbers = ifNull<boolean>(lineNumbers, false);\n    mergedOptions.readOnly = ifNull<boolean>(readOnly, true);\n    options = {\n        ...mergedOptions,\n        ...options,\n    };\n    return (\n        <div className={className}>\n            <CodeMirror options={options} {...props} />\n        </div>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/components/CodeMirror.tsx",
    "content": "import * as  React from \"react\";\nimport * as  ReactDOM from \"react-dom\";\n\nimport * as classNames from \"classnames\";\nimport * as CodeMirror from \"codemirror\";\nimport * as _ from \"lodash\";\n\nfunction normalizeLineEndings(str: string | null | undefined) {\n    if (str == null) {\n        return str;\n    }\n    return str.replace(/\\r\\n|\\r/g, \"\\n\");\n}\n\ntype CodemirrorType = typeof CodeMirror;\n\nexport type Props = {\n    value: string,\n\n    className?: string,\n    codeMirrorInstance?: CodemirrorType,\n    defaultValue?: string,\n    onFocusChange?: (focused: boolean) => void,\n    onChange?: (value: string, change: CodeMirror.EditorChangeLinkedList) => void,\n    onScroll?: (instance: CodeMirror.Editor) => void,\n    options?: object,\n    path?: string,\n    preserveScrollPosition?: boolean,\n};\n\ntype State = {\n    focused: false,\n};\n\nexport default class ReactCodemirror extends React.Component<Props, State> {\n    public static defaultProps = {\n        preserveScrollPosition: false,\n    };\n\n    public state: State = {\n        focused: false,\n    };\n\n    private codeMirror: CodeMirror.EditorFromTextArea | null = null;\n\n    public componentWillMount() {\n        this.componentWillReceiveProps = _.debounce(this.componentWillReceiveProps, 0);\n    }\n\n    public componentWillUnmount() {\n        // is there a lighter-weight way to remove the cm instance?\n        if (this.codeMirror) {\n            this.codeMirror.toTextArea();\n        }\n    }\n\n    public componentWillReceiveProps(nextProps: Props) {\n        if (this.codeMirror &&\n            nextProps.value !== undefined &&\n            normalizeLineEndings(this.codeMirror.getValue()) !== normalizeLineEndings(nextProps.value)) {\n            if (this.props.preserveScrollPosition) {\n                const prevScrollPosition = this.codeMirror.getScrollInfo();\n                this.codeMirror.setValue(nextProps.value);\n                this.codeMirror.scrollTo(prevScrollPosition.left, prevScrollPosition.top);\n            } else {\n                this.codeMirror.setValue(nextProps.value);\n            }\n        }\n        if (this.codeMirror != null && typeof nextProps.options === \"object\") {\n            for (const optionName in nextProps.options) {\n                if (nextProps.options.hasOwnProperty(optionName)) {\n                    this.codeMirror.setOption(optionName, nextProps.options[optionName]);\n                }\n            }\n        }\n    }\n    public render() {\n        const editorClassName = classNames(\n            \"ReactCodeMirror\",\n            this.state.focused ? \"ReactCodeMirror--focused\" : null,\n            this.props.className,\n        );\n        return (\n            <div className={editorClassName}>\n                <textarea ref={this.handleTextAreaRef}\n                    name={this.props.path}\n                    defaultValue={this.props.value}\n                    autoComplete=\"off\" />\n            </div>\n        );\n    }\n\n    public focus() {\n        if (this.codeMirror) {\n            this.codeMirror.focus();\n        }\n    }\n\n    public getCodeMirror() {\n        return this.codeMirror;\n    }\n\n    private getCodeMirrorInstance(): CodemirrorType {\n        return this.props.codeMirrorInstance || CodeMirror;\n    }\n\n    private handleTextAreaRef = (textArea: React.ReactInstance | null) => {\n        if (textArea == null) {\n            return textArea;\n        }\n        const textareaNode = ReactDOM.findDOMNode(textArea) as HTMLTextAreaElement;\n\n        if (textareaNode.tagName.toLowerCase() !== \"textarea\") {\n            throw new Error(\"Editor should be a textarea\");\n        }\n\n        const codeMirrorInstance = this.getCodeMirrorInstance();\n\n        this.codeMirror = codeMirrorInstance.fromTextArea(textareaNode, this.props.options);\n        this.codeMirror.on(\"change\", this.codemirrorValueChanged);\n        this.codeMirror.on(\"focus\", this.focusChanged.bind(this, true));\n        this.codeMirror.on(\"blur\", this.focusChanged.bind(this, false));\n        this.codeMirror.on(\"scroll\", this.scrollChanged);\n        this.codeMirror.setValue(this.props.defaultValue || this.props.value || \"\");\n    }\n\n    private focusChanged = (focused) => {\n        this.setState({\n            focused,\n        });\n        if (this.props.onFocusChange) {\n            this.props.onFocusChange(focused);\n        }\n    }\n\n    private scrollChanged = (cm) => {\n        if (this.props.onScroll) {\n            this.props.onScroll(cm.getScrollInfo());\n        }\n    }\n\n    private codemirrorValueChanged = (doc: CodeMirror.Editor, change: CodeMirror.EditorChangeLinkedList) => {\n        if (this.props.onChange && change.origin !== \"setValue\") {\n            this.props.onChange(doc.getValue(), change);\n        }\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/ComponentPage/Content.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport * as styles from \"./styles.scss\";\n\nexport default class Content extends React.Component<React.HTMLProps<HTMLDivElement>, {}> {\n    public render() {\n        let {\n            className,\n            ...props,\n        } = this.props;\n        className = classNames(styles[\"component-content\"], className);\n\n        return (\n            <div className={className} {...props} />\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/ComponentPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Drawer from \"@react-mdc/drawer\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Page from \"app/js/components/Page\";\n\nimport Content from \"./Content\";\n\nimport * as styles from \"./styles.scss\";\n\nfunction NavItem(props) {\n    return (\n        <li className={styles[\"component-list-item\"]}>\n            <Typography.Text.Meta textStyle=\"subheading2\" adjustMargin>\n                <Link\n                    activeClassName={styles[\"component-list-item--active\"]}\n                    {...props} />\n            </Typography.Text.Meta>\n        </li>\n    );\n}\n\nexport default class ComponentPage extends React.Component<React.HTMLProps<HTMLDivElement>, {}> {\n    public static Content = Content;\n\n    public render() {\n        const {\n            ref: _ref,\n            children,\n            ...props,\n        } = this.props;\n\n        return (\n            <Page {...props}>\n                <Page.Responsive>\n                    <Page.Content className={styles[\"component-page\"]}>\n                        <Drawer.Permanent className={styles[\"component-drawer\"]}>\n                            <Drawer.Permanent.Content>\n                                <ul className={styles[\"component-list\"]}>\n                                    <NavItem to=\"/button\">\n                                        Button\n                                    </NavItem>\n                                    <NavItem to=\"/card\">\n                                        Card\n                                    </NavItem>\n                                    <NavItem to=\"/checkbox\">\n                                        Checkbox\n                                    </NavItem>\n                                    <NavItem to=\"/dialog\">\n                                        Dialog\n                                    </NavItem>\n                                    <NavItem to=\"/elevation\">\n                                        Elevation\n                                    </NavItem>\n                                    <NavItem to=\"/fab\">\n                                        FAB\n                                    </NavItem>\n                                    <NavItem to=\"/form-field\">\n                                        Form Field\n                                    </NavItem>\n                                    <NavItem to=\"/layout-grid\">\n                                        Layout Grid\n                                    </NavItem>\n                                    <NavItem to=\"/radio\">\n                                        Radio\n                                    </NavItem>\n                                    <NavItem to=\"/ripple\">\n                                        Ripple\n                                    </NavItem>\n                                    <NavItem to=\"/switch\">\n                                        Switch\n                                    </NavItem>\n                                    <NavItem to=\"/textfield\">\n                                        Textfield\n                                    </NavItem>\n                                    <NavItem to=\"/typography\">\n                                        Typography\n                                    </NavItem>\n                                </ul>\n                            </Drawer.Permanent.Content>\n                        </Drawer.Permanent>\n                        {children}\n                    </Page.Content>\n                </Page.Responsive>\n                <Page.Footer />\n            </Page>\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/ComponentPage/styles.scss",
    "content": "@import \"style/vars/theme\";\n\n:local {\n    .component-page {\n        width: 100%;\n        display: flex;\n        flex-direction: row;\n    }\n    .component-content {\n        flex: 1;\n        display: flex;\n        flex-direction: column;\n    }\n    .component-drawer {\n        border-right: none;\n    }\n    .component-showcase {\n        width: 100%;\n        padding: $app-showcase-padding;\n        background: $app-showcase-background;\n        display: flex;\n        justify-content: center;\n        align-content: center;\n        flex-direction: column;\n    }\n    .component-list {\n        list-style: none;\n        padding: 0;\n    }\n    .component-list-item {\n        width: 100%;\n        display: block;\n        margin-top: 8px;\n        margin-bottom: 8px;\n        color: lighten(black, 50);\n        a {\n            cursor: pointer;\n            text-decoration: none;\n            color: inherit;\n            padding-top: 4px;\n            padding-bottom: 4px;\n        }\n\n        &:hover {\n            a {\n                border-bottom: solid 1px;\n                border-bottom-color: $mdc-theme-primary;\n            }\n        }\n    }\n    a.component-list-item--active {\n        color: black;\n        border-bottom: solid 1px;\n        border-bottom-color: $mdc-theme-primary;\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/DarkTheme.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport Theme from \"@react-mdc/theme\";\nimport {\n    ChildProps as ThemeChildProps,\n    MetaProps,\n} from \"@react-mdc/theme/lib/Theme\";\n\nimport * as styles from \"./styles.scss\";\n\nclass Meta extends Theme.Meta {\n    public static defaultProps = {\n        textColor: \"primary\",\n        onColor: \"dark\",\n        color: \"dark\",\n    };\n\n    protected renderClassName(childProps: ThemeChildProps) {\n        return classNames(styles[\"app--theme-dark\"], super.renderClassName(childProps));\n    }\n}\n\nexport default class DarkTheme extends Theme {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/FullSize.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport * as styles from \"./styles.scss\";\n\nfunction Center(props: React.HTMLProps<HTMLDivElement>) {\n    return (\n        <div {...props} className={classNames(props.className, styles.fullsize, styles.center)} />\n    );\n}\n\nexport default class FullSize extends React.Component<React.HTMLProps<HTMLDivElement>, {}> {\n    public static Center = Center;\n\n    public render() {\n        return (\n            <div {...this.props} className={classNames(this.props.className, styles.fullsize)} />\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/Icon.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport * as styles from \"./styles.scss\";\n\nexport function Pen(props) {\n    return (\n        <MaterialIcon {...props}>edit</MaterialIcon>\n    );\n}\n\nexport function MaterialIcon(props) {\n    let {\n        wrap,\n        className,\n        ...other,\n    } = props;\n    wrap = wrap || \"i\";\n    className = classNames(\n        className,\n        styles.icon,\n    );\n    return React.createElement(wrap, {\n        className,\n        ...other,\n    });\n}\n"
  },
  {
    "path": "docs/src/js/components/Name.tsx",
    "content": "import * as React from \"react\";\n\nimport Code from \"./Code\";\n\nexport default function Name(props: React.HTMLProps<HTMLElement>) {\n    const {\n        children,\n        ...p,\n    } = props;\n    const value = React.Children.toArray(children).map((x) => x.toString()).join(\"\");\n    return (\n        <Code value={`<${value} />`} />\n    );\n}\n"
  },
  {
    "path": "docs/src/js/components/Page/Content.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport * as styles from \"./styles.scss\";\n\nexport default class Content extends React.Component<React.HTMLProps<HTMLDivElement>, {}> {\n    public render() {\n        let {\n            className,\n            ...props,\n        } = this.props;\n        className = classNames(styles[\"content\"], className);\n\n        return (\n            <div className={className} {...props} />\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/Page/Footer.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\nimport { Link } from \"react-router\";\n\nimport Theme from \"@react-mdc/theme\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Responsive from \"./Responsive\";\n\nimport * as styles from \"./styles.scss\";\n\nexport default class Footer extends React.Component<React.HTMLProps<HTMLDivElement>, {}> {\n    public render() {\n        let {\n            className,\n            children,\n            ...props,\n        } = this.props;\n        className = classNames(styles[\"footer\"], className);\n\n        return (\n            <div className={className} {...props}>\n                <Responsive className={styles[\"footer-content\"]}>\n                    React Material Components Web\n                    <div>\n                        <span className={styles[\"badge\"]}>\n                            <a href=\"https://github.com/react-mdc/react-material-components-web\"\n                                target=\"_blank\">\n                                <img src={\n                                    \"https://img.shields.io/github/stars/\" +\n                                    \"react-mdc/react-material-components-web.svg?style=social&label=Star\"\n                                }\n                                    alt=\"Github Stars\" />\n                            </a>\n                        </span>\n                        <span className={styles[\"badge\"]}>\n                            <a href=\"https://opensource.org/licenses/MIT\"\n                                target=\"_blank\">\n                                <img src=\"https://img.shields.io/github/license/mashape/apistatus.svg\"\n                                    alt=\"MIT License\" />\n                            </a>\n                        </span>\n                        <span className={styles[\"badge\"]}>\n                            <a href=\"https://www.npmjs.com/package/react-material-components-web\"\n                                target=\"_blank\">\n                                <img src=\"https://badge.fury.io/js/react-material-components-web.svg\"\n                                    alt=\"NPM Repository\" />\n                            </a>\n                        </span>\n                    </div>\n                    {children}\n                    <div className={styles[\"footer-made-with\"]}>\n                        <Theme.Meta textColor=\"primary\" onColor=\"light\">\n                            <Typography.Text.Meta textStyle=\"caption\">\n                                <Link to=\"/\">\n                                    Made with React Material Components Web\n                                </Link>\n                            </Typography.Text.Meta>\n                        </Theme.Meta>\n                    </div>\n                </Responsive>\n            </div>\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/Page/Responsive.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport * as classNames from \"classnames\";\n\nimport * as styles from \"./styles.scss\";\n\ntype ChildProps = {\n    className?: string,\n};\n\ntype MetaProps = {\n};\n\nclass Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderClassName(childProps: ChildProps) {\n        return classNames(styles[\"responsive\"], super.renderClassName(childProps));\n    }\n}\n\nexport default class Responsive extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaPropNames() {\n        return [];\n    }\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/Page/index.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport * as styles from \"./styles.scss\";\n\nimport Content from \"./Content\";\nimport Footer from \"./Footer\";\nimport Responsive from \"./Responsive\";\n\nexport default class Page extends React.Component<React.HTMLProps<HTMLDivElement>, {}> {\n    public static Content = Content;\n    public static Footer = Footer;\n    public static Responsive = Responsive;\n\n    public render() {\n        let {\n            className,\n            ...props,\n        } = this.props;\n        className = classNames(styles[\"page\"], className);\n\n        return (\n            <div className={className} {...props} />\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/Page/styles.scss",
    "content": ":local {\n    .page {\n        flex: 1;\n        display: flex;\n        flex-direction: column;\n    }\n    .responsive {\n        max-width: 1312px;\n        padding-left: 16px;\n        padding-right: 16px;\n        @media (max-width: 1312px) and (min-width: 721px) {\n            max-width: 1400px;\n            padding-left: 60px;\n            padding-right: 60px;\n        }\n        @media (min-width: 1312px) {\n            margin-left: auto;\n            margin-right: auto;\n            width: 100%;\n        }\n    }\n    .content {\n        margin-top: 80px;\n    }\n    .footer {\n        margin-top: 144px;\n        background: #fafafa;\n    }\n    .footer-content {\n        overflow: hidden;\n        height: 192px;\n        padding-top: 32px;\n        padding-bottom: 32px;\n        flex: 1;\n        display: flex;\n        flex-direction: column;\n        justify-content: space-between;\n    }\n    .footer-made-with {\n        text-align: right;\n        a {\n            text-decoration: none;\n        }\n    }\n    .badge {\n        margin-right: 4px;\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/ShowCase/Item.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport * as styles from \"./styles.scss\";\n\nexport default class Item extends React.Component<React.HTMLProps<HTMLSpanElement>, {}> {\n    public render() {\n        let {\n            className,\n            ...props,\n        } = this.props;\n        className = classNames(styles[\"showcase-item\"], className);\n\n        return (\n            <span className={className} {...props} />\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/ShowCase/index.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport Item from \"./Item\";\n\nimport * as styles from \"./styles.scss\";\n\nexport default class ShowCase extends React.Component<React.HTMLProps<HTMLDivElement> & { large?: boolean }, {}> {\n    public static Item = Item;\n\n    public render() {\n        let {\n            className,\n            large,\n            children,\n            ...props,\n        } = this.props;\n        className = classNames(styles[\"showcase\"], className, {\n            [styles[\"showcase--large\"]]: large,\n        });\n\n        return (\n            <div className={className} {...props}>\n                {children}\n            </div>\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/ShowCase/styles.scss",
    "content": "@import \"style/vars/theme\";\n\n:local {\n    .showcase {\n        padding: $app-showcase-padding;\n        background: $app-showcase-background;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        flex-direction: row;\n    }\n    .showcase--large {\n        height: 360px;\n    }\n    .showcase-item {\n        margin: 24px;\n    }\n}\n"
  },
  {
    "path": "docs/src/js/components/Table.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport * as styles from \"./styles.scss\";\n\nexport default function Table(props: React.HTMLAttributes<HTMLTableElement>) {\n    const {\n        className,\n        ...p,\n    } = props;\n    return (\n        <table className={classNames(styles.table, className)} {...p} />\n    );\n}\n"
  },
  {
    "path": "docs/src/js/components/styles.scss",
    "content": "/* Material Icons */\n\n@import \"style/vars/theme\";\n@import \"@material/theme/mdc-theme\";\n\n$app-table-border-color: #CCC;\n\n:local {\n    .app--theme-dark {\n        background: $app-theme-dark-background;\n        @include mdc-theme-dark {\n            @include mdc-theme-prop(color, text-primary-on-dark);\n        }\n    }\n    .icon {\n        font-family: 'Material Icons';\n        font-weight: normal;\n        font-style: normal;\n        font-size: 24px; // Preferred icon size\n        display: inline-block;\n        line-height: 1;\n        text-transform: none;\n        letter-spacing: normal;\n        word-wrap: normal;\n        white-space: nowrap;\n        direction: ltr; // Support for all WebKit browsers.\n        -webkit-font-smoothing: antialiased; // Support for Safari and Chrome.\n        text-rendering: optimizeLegibility; // Support for Firefox.\n        -moz-osx-font-smoothing: grayscale; // Support for IE.\n        font-feature-settings: 'liga';\n    }\n    .fullsize {\n        position: fixed;\n        left: 0;\n        right: 0;\n        top: 0;\n        bottom: 0;\n    }\n    .center {\n        display: flex;\n        text-align: center;\n        justify-content: center;\n        align-items: center;\n        flex-direction: column;\n    }\n    .code {\n        flex: 1;\n        background: $app-showcase-background;\n        margin-top: 14px;\n        margin-bottom: 14px;\n         :global {\n            .CodeMirror-gutter-wrapper {\n                font-family: Roboto Mono, monospace;\n            }\n            .CodeMirror-code {\n                line-height: 1.6em;\n            }\n            .CodeMirror {\n                background: transparent;\n                margin: $app-showcase-padding;\n                pre {\n                    font-family: Roboto Mono, monospace;\n                }\n                font-size: 0.8em;\n                height: auto;\n            }\n        }\n    }\n    .page-container {\n        max-width: 1024px;\n        margin-left: auto;\n        margin-right: auto;\n        padding-bottom: 24px;\n    }\n    .demo {\n        margin-top: 24px;\n        margin-bottom: 24px;\n        hr {\n            display: block;\n            height: 1px;\n            border: 0;\n            border-top: 1px solid #eeeeee;\n            padding: 0;\n        }\n    }\n    .demo-content {\n        padding: 16px;\n    }\n    .demo-title {\n        padding: 8px;\n        padding-bottom: 0;\n    }\n    .table {\n        width: 100%;\n        border-collapse: collapse;\n        font-size: 0.8em;\n        text-align: left;\n        margin-top: 24px;\n        margin-bottom: 24px;\n        thead tr {\n            &:last-child {\n                border: 0;\n                border-bottom: 1px;\n                border-style: solid;\n                border-color: $app-table-border-color;\n            }\n        }\n        tbody tr {\n            border: 0;\n            border-bottom: 1px;\n            border-style: solid;\n            border-color: $app-table-border-color;\n            &:last-child {\n                border-bottom: 0;\n            }\n            &:hover {\n                background: #EEEEEE;\n            }\n        }\n        td,\n        th {\n            padding: 8px;\n        }\n    }\n}\n"
  },
  {
    "path": "docs/src/js/index.tsx",
    "content": "import \"./compat\";\n\nimport \"app/style/index.scss\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport MainRouter from \"./routes\";\n\nimport \"codemirror/lib/codemirror.css\";\n\nimport \"codemirror/mode/jsx/jsx\";\nimport \"codemirror/mode/shell/shell\";\n\nconst element = document.getElementById(\"root\");\nReactDOM.render(<MainRouter />, element, () => { });\n"
  },
  {
    "path": "docs/src/js/pages/ButtonPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Button from \"@react-mdc/button\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport DarkTheme from \"app/js/components/DarkTheme\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function ButtonPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Button\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <Button>Flat</Button>\n                    </ShowCase.Item>\n                    <ShowCase.Item>\n                        <DarkTheme.Meta>\n                            <Button raised>Raised</Button>\n                        </DarkTheme.Meta>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Button component is a React wrapper of mdc-button component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/button`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Flat\n                </Typography.Title>\n                <Code value={`<Button>Flat button</Button>`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Button>Flat button</Button>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Colored\n                </Typography.Title>\n                <Code value={`<Button accent>Colored button</Button>`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Button accent>Colored button</Button>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Raised\n                </Typography.Title>\n                <Code value={`<Button raised>Raised button</Button>`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Button raised>Raised button</Button>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Disabled\n                </Typography.Title>\n                <Code value={`<Button raised disabled>Disabled button</Button>`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Button raised disabled>Disabled button</Button>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Button</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Button</Name>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>dense</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render dense button.</td>\n                        </tr>\n                        <tr>\n                            <td><code>raise</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render raised button.</td>\n                        </tr>\n                        <tr>\n                            <td><code>compact</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render compact button.</td>\n                        </tr>\n                        <tr>\n                            <td><code>primary</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render button with primary color.</td>\n                        </tr>\n                        <tr>\n                            <td><code>accent</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render button with accent color.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/CardPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Card from \"@react-mdc/card\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nimport * as Image1x1 from \"app/images/1-1.jpg\";\nimport * as Image16x9 from \"app/images/16-9.jpg\";\n\nexport default function CardPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Card\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <Card>\n                            <Card.HorizontalBlock>\n                                <Card.Primary>\n                                    <Card.Title>\n                                        Title goes here\n                                    </Card.Title>\n                                    <Card.Subtitle>\n                                        Subtitle here\n                                    </Card.Subtitle>\n                                </Card.Primary>\n                                <Card.MediaItem src={Image1x1} />\n                            </Card.HorizontalBlock>\n                            <Card.Actions>\n                                <Card.Action>\n                                    ACTION 1\n                                </Card.Action>\n                                <Card.Action>\n                                    ACTION 2\n                                </Card.Action>\n                            </Card.Actions>\n                        </Card>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Button component is a React wrapper of mdc-card component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/card`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple Card\n                </Typography.Title>\n                <Code value={`\n<Card>\n    <Card.Media\n        style={{\n            backgroundImage: \\`url($\\{Image16x9\\})\\`,\n            backgroundSize: \"cover\",\n            backgroundRepeat: \"no-repeat\",\n            height: 167,\n        }} />\n    <Card.SupportingText>\n        Lorem ipsum dolor sit amet,\n        consectetur adipisicing elit,\n        sed do eiusmod tempor.\n    </Card.SupportingText>\n</Card>\n`} />\n                <ShowCase>\n                    <ShowCase.Item style={{ maxWidth: 350 }}>\n                        <Card>\n                            <Card.Media\n                                style={{\n                                    backgroundImage: `url(${Image16x9})`,\n                                    backgroundSize: \"cover\",\n                                    backgroundRepeat: \"no-repeat\",\n                                    height: 167,\n                                }} />\n                            <Card.SupportingText>\n                                Lorem ipsum dolor sit amet,\n                                consectetur adipisicing elit,\n                                sed do eiusmod tempor.\n                            </Card.SupportingText>\n                        </Card>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Media Card\n                </Typography.Title>\n                <Code value={`\n<Card>\n    <Card.HorizontalBlock>\n        <Card.Primary>\n            <Card.Title>\n                Title goes here\n            </Card.Title>\n            <Card.Subtitle>\n                Subtitle here\n            </Card.Subtitle>\n        </Card.Primary>\n        <Card.MediaItem src={Image1x1} />\n    </Card.HorizontalBlock>\n    <Card.Actions>\n        <Card.Action>\n            ACTION 1\n        </Card.Action>\n        <Card.Action>\n            ACTION 2\n        </Card.Action>\n    </Card.Actions>\n</Card>\n`} />\n                <ShowCase>\n                    <ShowCase.Item style={{ maxWidth: 350 }}>\n                        <Card>\n                            <Card.HorizontalBlock>\n                                <Card.Primary>\n                                    <Card.Title>\n                                        Title goes here\n                                    </Card.Title>\n                                    <Card.Subtitle>\n                                        Subtitle here\n                                    </Card.Subtitle>\n                                </Card.Primary>\n                                <Card.MediaItem src={Image1x1} />\n                            </Card.HorizontalBlock>\n                            <Card.Actions>\n                                <Card.Action>\n                                    ACTION 1\n                                </Card.Action>\n                                <Card.Action>\n                                    ACTION 2\n                                </Card.Action>\n                            </Card.Actions>\n                        </Card>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Card</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of card components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>dark</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render dark card.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Actions</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.Actions</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    A container of action components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>vertical</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render vertical actions section.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Action</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.Action</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Card action button\n                </Typography.Body2>\n\n                <Typography.Title>Horizontal Block</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.HorizontalBlock</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Horizontal block component.\n                </Typography.Body2>\n\n                <Typography.Title>Media</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.Media</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Media section component.\n                </Typography.Body2>\n\n                <Typography.Title>Media Item</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.MediaItem</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Media item component.\n                </Typography.Body2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>size</code></td>\n                            <td><code>1.5 | 2 | 3</code></td>\n                            <td />\n                            <td>Size of media item.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Primary</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.Primary</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Primary section component.\n                </Typography.Body2>\n\n                <Typography.Title>Subtitle</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.Subtitle</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Subtitle of card.\n                </Typography.Body2>\n\n                <Typography.Title>Supporting Text</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.SupportingText</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Supporting text section.\n                </Typography.Body2>\n\n                <Typography.Title>Title</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Card.Title</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Title of card.\n                </Typography.Body2>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/CheckboxPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Checkbox from \"@react-mdc/checkbox\";\nimport FormField from \"@react-mdc/form-field\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function CheckboxPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Checkbox\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <FormField>\n                            <Checkbox.Default inputId=\"showcase-checkbox\" />\n                            <label htmlFor=\"showcase-checkbox\">\n                                Check Me\n                            </label>\n                        </FormField>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Checkbox component is a React wrapper of mdc-checkbox component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/checkbox`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple Checkbox\n                </Typography.Title>\n                <Code value={`<Checkbox.Default />`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Checkbox.Default />\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Cutomizable Checkbox\n                </Typography.Title>\n                <Code value={`\n<Checkbox>\n    <Checkbox.NativeControl onChange={ (x) => alert(\"Changed: \" + x) } />\n    <Checkbox.Background>\n        <Checkbox.Checkmark />\n        <Checkbox.Mixedmark />\n    </Checkbox.Background>\n</Checkbox>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        {/* tslint:disable:jsx-no-lambda */}\n                        <Checkbox>\n                            <Checkbox.NativeControl onChange={(x) => alert(\"Changed: \" + x.target.value)} />\n                            <Checkbox.Background>\n                                <Checkbox.Checkmark />\n                                <Checkbox.Mixedmark />\n                            </Checkbox.Background>\n                        </Checkbox>\n                        {/* tslint:enable:jsx-no-lambda */}\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Checkbox</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Checkbox</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of checkbox components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>checked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render checked checkbox.</td>\n                        </tr>\n                        <tr>\n                            <td><code>disabled</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render disabled checkbox.</td>\n                        </tr>\n                        <tr>\n                            <td><code>indeterminate</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render indeterminate state checkbox.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Background</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Checkbox.Background</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Background component of checkbox.\n                </Typography.Body2>\n\n                <Typography.Title>Checkmark</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Checkbox.Checkmark</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Checkmark component of checkbox. It's a just SVG component.\n                    So it doesn't have a meta component.\n                </Typography.Body2>\n\n                <Typography.Title>Mixedmark</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Checkbox.Mixedmark</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Mixedmark component of checkbox.\n                </Typography.Body2>\n\n                <Typography.Title>NativeControl</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Checkbox.NativeControl</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Native control (actual input component) component of checkbox.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>onChange</code></td>\n                            <td><code>(event) => void</code></td>\n                            <td />\n                            <td>Handler for change event.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Default</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Checkbox.Default</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Default composition of checkbox component\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>inputId</code></td>\n                            <td><code>string</code></td>\n                            <td />\n                            <td>ID property for native control</td>\n                        </tr>\n                        <tr>\n                            <td><code>name</code></td>\n                            <td><code>string</code></td>\n                            <td />\n                            <td>Name property for native control.</td>\n                        </tr>\n                        <tr>\n                            <td><code>value</code></td>\n                            <td><code>any</code></td>\n                            <td />\n                            <td>Value property for native control.</td>\n                        </tr>\n                        <tr>\n                            <td><code>onChange</code></td>\n                            <td><code>(event) => void</code></td>\n                            <td />\n                            <td>Handler for change event.</td>\n                        </tr>\n                        <tr>\n                            <td><code>checked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render checked checkbox.</td>\n                        </tr>\n                        <tr>\n                            <td><code>disabled</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render disabled checkbox.</td>\n                        </tr>\n                        <tr>\n                            <td><code>indeterminate</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render indeterminate state checkbox.</td>\n                        </tr>\n                        <tr>\n                            <td><code>defaultChecked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Default checked state of checkbox.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/DialogPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Button from \"@react-mdc/button\";\nimport Dialog from \"@react-mdc/dialog\";\nimport FormField from \"@react-mdc/form-field\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nclass SimpleDialog extends React.Component<{}, {}> {\n    public state = {\n        open: false,\n    };\n\n    public render() {\n        return (\n            <div>\n                <Button raised onClick={this.handleOpen}>\n                    Open Dialog\n                </Button>\n                <Dialog open={this.state.open}\n                    onOpen={this.handleOpen}\n                    onClose={this.handleClose}>\n                    <Dialog.Surface>\n                        <Dialog.Header>\n                            <Dialog.Header.Title>\n                                Dialog Title\n                            </Dialog.Header.Title>\n                        </Dialog.Header>\n                        <Dialog.Body>\n                            Lorem ipsum dolor sit amet, consectetur adipiscing elit,\n                            sed do eiusmod tempor incididunt ut labore et dolore\n                            magna aliqua. Ut enim ad minim veniam, quis nostrud\n                            exercitation ullamco laboris nisi ut aliquip ex ea\n                            commodo consequat. Duis aute irure dolor in reprehenderit\n                            in voluptate velit esse cillum dolore eu fugiat nulla\n                            pariatur. Excepteur sint occaecat cupidatat non proident,\n                            sunt in culpa qui officia deserunt mollit anim id est\n                            laborum.\n                        </Dialog.Body>\n                        <Dialog.Footer>\n                            <Dialog.Footer.Button type=\"cancel\">\n                                Decline\n                            </Dialog.Footer.Button>\n                            <Dialog.Footer.Button type=\"accept\">\n                                Accept\n                            </Dialog.Footer.Button>\n                        </Dialog.Footer>\n                    </Dialog.Surface>\n                    <Dialog.Backdrop />\n                </Dialog>\n            </div>\n        );\n    }\n\n    private handleOpen = () => this.setState({ open: true });\n    private handleClose = () => this.setState({ open: false });\n}\n\nexport default function DialogPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Dialog\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <SimpleDialog />\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Dialog component is a React wrapper of mdc-dialog component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/dialog`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple Dialog\n                </Typography.Title>\n                <Code value={`\nclass SimpleDialog extends React.Component<{}, {}> {\n    public state = {\n        open: false,\n    };\n\n    public render() {\n        return (\n            <div>\n                <Button raised onClick={this.handleOpen}>\n                    Open Dialog\n                </Button>\n                <Dialog open={this.state.open}\n                    onOpen={this.handleOpen}\n                    onClose={this.handleClose}>\n                    <Dialog.Surface>\n                        <Dialog.Header>\n                            <Dialog.Header.Title>\n                                Dialog Title\n                            </Dialog.Header.Title>\n                        </Dialog.Header>\n                        <Dialog.Body>\n                            Lorem ipsum dolor sit amet, consectetur adipiscing elit,\n                            sed do eiusmod tempor incididunt ut labore et dolore\n                            magna aliqua. Ut enim ad minim veniam, quis nostrud\n                            exercitation ullamco laboris nisi ut aliquip ex ea\n                            commodo consequat. Duis aute irure dolor in reprehenderit\n                            in voluptate velit esse cillum dolore eu fugiat nulla\n                            pariatur. Excepteur sint occaecat cupidatat non proident,\n                            sunt in culpa qui officia deserunt mollit anim id est\n                            laborum.\n                        </Dialog.Body>\n                        <Dialog.Footer>\n                            <Dialog.Footer.Button type=\"cancel\">\n                                Decline\n                            </Dialog.Footer.Button>\n                            <Dialog.Footer.Button type=\"accept\">\n                                Accept\n                            </Dialog.Footer.Button>\n                        </Dialog.Footer>\n                    </Dialog.Surface>\n                    <Dialog.Backdrop />\n                </Dialog>\n            </div>\n        );\n    }\n\n    private handleOpen = () => this.setState({ open: true });\n    private handleClose = () => this.setState({ open: false });\n}\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <SimpleDialog />\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Dialog</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Dialog</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of dialog components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>dark</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render dark dialog.</td>\n                        </tr>\n                        <tr>\n                            <td><code>open</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render open dialog.</td>\n                        </tr>\n                        <tr>\n                            <td><code>onAccept</code></td>\n                            <td><code>(meta) => void</code></td>\n                            <td />\n                            <td>Handler for accept event.</td>\n                        </tr>\n                        <tr>\n                            <td><code>onOpen</code></td>\n                            <td><code>(meta) => void</code></td>\n                            <td />\n                            <td>Handler for open event.</td>\n                        </tr>\n                        <tr>\n                            <td><code>onCancel</code></td>\n                            <td><code>(meta) => void</code></td>\n                            <td />\n                            <td>Handler for cancel event.</td>\n                        </tr>\n                        <tr>\n                            <td><code>onClose</code></td>\n                            <td><code>(meta) => void</code></td>\n                            <td />\n                            <td>Handler for close event.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Backdrop</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Dialog.Backdrop</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Dialog backdrop component.\n                </Typography.Body2>\n\n                <Typography.Title>Body</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Dialog.Body</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Dialog body section.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>scrollable</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render scrollable long dialog body.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Surface</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Dialog.Surface</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Dialog surface component.\n                </Typography.Body2>\n\n                <Typography.Title>Footer</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Dialog.Footer</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Dialog footer section.\n                </Typography.Body2>\n\n                <Typography.Title>Footer Button</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Dialog.Footer.Button</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Dialog footer button component.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>type</code></td>\n                            <td><code>\"accept\" | \"cancel\"</code></td>\n                            <td>&#10004;</td>\n                            <td>Type of footer button.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Header</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Dialog.Header</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Dialog header section.\n                </Typography.Body2>\n\n                <Typography.Title>Header Title</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Dialog.Header.Title</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Dialog header title component.\n                </Typography.Body2>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/ElevationPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Elevation from \"@react-mdc/elevation\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function ElevationPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Elevation\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <Elevation zSpace={4} style={{ padding: 32 }}>\n                            Elevation\n                        </Elevation>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Elevation component is a React wrapper of mdc-elevation component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/elevation`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Elevation\n                </Typography.Title>\n                <Code value={`<Elevation zSpace={10} style={{ padding: 32 }}>Z-Space: 10</Elevation>`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Elevation zSpace={10} style={{ padding: 32 }}>Z-Space: 10</Elevation>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>Elevation</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Elevation</Name>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>zSpace</code></td>\n                            <td><code>number (0 ~ 24)</code></td>\n                            <td>&#10004;</td>\n                            <td>z-space of elevation component</td>\n                        </tr>\n                        <tr>\n                            <td><code>transition</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render elevation with transition animation.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/FABPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport FAB from \"@react-mdc/fab\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport { MaterialIcon } from \"app/js/components/Icon\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function CheckboxPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    FAB\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <FAB>\n                            <FAB.Icon>\n                                <MaterialIcon>edit</MaterialIcon>\n                            </FAB.Icon>\n                        </FAB>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    FAB component is a React wrapper of mdc-fab (Float Action Button) component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/fab`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple FAB\n                </Typography.Title>\n                <Code value={`\n<FAB>\n    <FAB.Icon>\n        <MaterialIcon>add</MaterialIcon>\n    </FAB.Icon>\n</FAB>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <FAB>\n                            <FAB.Icon>\n                                <MaterialIcon>add</MaterialIcon>\n                            </FAB.Icon>\n                        </FAB>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>FAB</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>FAB</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of FAB components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>mini</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render mini FAB.</td>\n                        </tr>\n                        <tr>\n                            <td><code>plain</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render plain FAB.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Icon</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>FAB.Icon</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    FAB icon component.\n                </Typography.Body2>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/FormFieldPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Checkbox from \"@react-mdc/checkbox\";\nimport FormField from \"@react-mdc/form-field\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function FormFieldPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Form Field\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <FormField>\n                            <Checkbox.Default inputId=\"showcase-checkbox\" />\n                            <label htmlFor=\"showcase-checkbox\">\n                                FormField Demo\n                            </label>\n                        </FormField>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    FormField component is a React wrapper of mdc-form-field component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/form-field`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    FormField\n                </Typography.Title>\n                <Code value={`\n<FormField>\n    <input type=\"checkbox\" id=\"form-field-usage-checkbox\" />\n    <label htmlFor=\"form-field-usage-checkbox\">\n        FormField Demo\n    </label>\n</FormField>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <FormField>\n                            <input type=\"checkbox\" id=\"form-field-usage-checkbox\" />\n                            <label htmlFor=\"form-field-usage-checkbox\">\n                                FormField Demo\n                            </label>\n                        </FormField>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>FormField</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>FormField</Name>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>alignEnd</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Align contents to end.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/LayoutGridPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport LayoutGrid from \"@react-mdc/layout-grid\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport { MaterialIcon } from \"app/js/components/Icon\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function LayoutGridPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Layout Grid\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item style={{ width: \"100%\", maxWidth: 500 }}>\n                        <LayoutGrid style={{ background: \"#9c9c9c\" }}>\n                            <LayoutGrid.Cell span={6}\n                                style={{\n                                    background: \"#3d3d3d\",\n                                    color: \"white\",\n                                    display: \"flex\",\n                                    justifyContent: \"center\",\n                                    alignItems: \"center\",\n                                    padding: 32,\n                                }} />\n                            <LayoutGrid.Cell span={6}\n                                style={{\n                                    background: \"#3d3d3d\",\n                                    color: \"white\",\n                                    display: \"flex\",\n                                    justifyContent: \"center\",\n                                    alignItems: \"center\",\n                                    padding: 32,\n                                }} />\n                        </LayoutGrid>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    LayoutGrid component is a React wrapper of mdc-layout-grid component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/layout-grid`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple Grid\n                </Typography.Title>\n                <Code value={`\n<LayoutGrid style={{ background: \"#9c9c9c\" }}>\n    <LayoutGrid.Cell span={4}\n        style={{\n            background: \"#3d3d3d\",\n            color: \"white\",\n            display: \"flex\",\n            justifyContent: \"center\",\n            alignItems: \"center\",\n            padding: 32,\n        }} />\n    <LayoutGrid.Cell span={8}\n        style={{\n            background: \"#3d3d3d\",\n            color: \"white\",\n            display: \"flex\",\n            justifyContent: \"center\",\n            alignItems: \"center\",\n            padding: 32,\n        }} />\n</LayoutGrid>\n`} />\n                <ShowCase>\n                    <ShowCase.Item style={{ width: \"100%\", maxWidth: 500 }}>\n                        <LayoutGrid style={{ background: \"#9c9c9c\" }}>\n                            <LayoutGrid.Cell span={4}\n                                style={{\n                                    background: \"#3d3d3d\",\n                                    color: \"white\",\n                                    display: \"flex\",\n                                    justifyContent: \"center\",\n                                    alignItems: \"center\",\n                                    padding: 32,\n                                }} />\n                            <LayoutGrid.Cell span={8}\n                                style={{\n                                    background: \"#3d3d3d\",\n                                    color: \"white\",\n                                    display: \"flex\",\n                                    justifyContent: \"center\",\n                                    alignItems: \"center\",\n                                    padding: 32,\n                                }} />\n                        </LayoutGrid>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Layout Grid</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>LayoutGrid</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of layout grid components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>margin</code></td>\n                            <td><code>number | string</code></td>\n                            <td />\n                            <td>Margin of grid.</td>\n                        </tr>\n                        <tr>\n                            <td><code>gutter</code></td>\n                            <td><code>number | string</code></td>\n                            <td />\n                            <td>Gutter of grid.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Cell</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>LayoutGrid.Cell</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Cell component\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>span</code></td>\n                            <td><code>number (1 ~ 12)</code></td>\n                            <td />\n                            <td>Spanning size of cell.</td>\n                        </tr>\n                        <tr>\n                            <td><code>span</code></td>\n                            <td><code>number (1 ~ 12)</code></td>\n                            <td />\n                            <td>Spanning size of cell.</td>\n                        </tr>\n                        <tr>\n                            <td><code>spanDesktop</code></td>\n                            <td><code>number (1 ~ 12)</code></td>\n                            <td />\n                            <td>Spanning size of cell on desktop.</td>\n                        </tr>\n                        <tr>\n                            <td><code>spanTablet</code></td>\n                            <td><code>number (1 ~ 12)</code></td>\n                            <td />\n                            <td>Spanning size of cell on tablet.</td>\n                        </tr>\n                        <tr>\n                            <td><code>spanPhone</code></td>\n                            <td><code>number (1 ~ 12)</code></td>\n                            <td />\n                            <td>Spanning size of cell on phone.</td>\n                        </tr>\n                        <tr>\n                            <td><code>order</code></td>\n                            <td><code>number (1 ~ 12)</code></td>\n                            <td />\n                            <td>Order of cell.</td>\n                        </tr>\n                        <tr>\n                            <td><code>align</code></td>\n                            <td><code>\"top\" | \"middle\" | \"bottom\"</code></td>\n                            <td />\n                            <td>Alignment of cell.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/NotFoundPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport Button from \"@react-mdc/button\";\nimport Card from \"@react-mdc/card\";\n\nimport FullSize from \"app/js/components/FullSize\";\n\nexport default class NotFound extends React.Component<{}, {}> {\n    public render() {\n        return (\n            <FullSize.Center>\n                <Card>\n                    <Card.Primary\n                        style={{\n                            borderBottom: 1,\n                        }}>\n                        <Card.Title large>\n                            Sorry, but nothing in here\n                        </Card.Title>\n                        <Card.Subtitle>\n                            Please check your URL and try again.\n                        </Card.Subtitle>\n                    </Card.Primary>\n                    <Card.Actions>\n                        <Card.Action.Meta>\n                            <Button.Meta compact>\n                                <Link to=\"/\">\n                                    Go to main\n                                </Link>\n                            </Button.Meta>\n                        </Card.Action.Meta>\n                    </Card.Actions>\n                </Card>\n            </FullSize.Center>\n        );\n    }\n}\n"
  },
  {
    "path": "docs/src/js/pages/RadioPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport FormField from \"@react-mdc/form-field\";\nimport Radio from \"@react-mdc/radio\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function RadioPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Radio\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <FormField>\n                            <Radio.Default name=\"be\" inputId=\"showcase-radio-to-be\" defaultChecked />\n                            <label htmlFor=\"showcase-radio-to-be\">\n                                To Be\n                            </label>\n                            <Radio.Default name=\"be\" inputId=\"showcase-radio-not-to-be\" />\n                            <label htmlFor=\"showcase-radio-not-to-be\">\n                                Not To Be\n                            </label>\n                        </FormField>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Radio component is a React wrapper of mdc-radio component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/radio`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple Radio\n                </Typography.Title>\n                <Code value={`\n<Radio.Default name=\"usage-1\" defaultChecked />\n<Radio.Default name=\"usage-1\" />\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Radio.Default name=\"usage-1\" defaultChecked />\n                        <Radio.Default name=\"usage-1\" />\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Cutomizable Radio\n                </Typography.Title>\n                <Code value={`\n<Radio>\n    <Radio.NativeControl\n        name=\"usage-2\"\n        onChange={(e) => alert(e.target.value)}\n        defaultChecked\n        value=\"left\" />\n    <Radio.Background>\n        <Radio.OuterCircle />\n        <Radio.InnerCircle />\n    </Radio.Background>\n</Radio>\n<Radio>\n    <Radio.NativeControl\n        name=\"usage-2\"\n        value=\"right\" />\n    <Radio.Background>\n        <Radio.OuterCircle />\n        <Radio.InnerCircle />\n    </Radio.Background>\n</Radio>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        {/* tslint:disable:jsx-no-lambda */}\n                        <Radio>\n                            <Radio.NativeControl\n                                name=\"usage-2\"\n                                onChange={(e) => alert(e.target.value)}\n                                defaultChecked\n                                value=\"left\" />\n                            <Radio.Background>\n                                <Radio.OuterCircle />\n                                <Radio.InnerCircle />\n                            </Radio.Background>\n                        </Radio>\n                        <Radio>\n                            <Radio.NativeControl\n                                name=\"usage-2\"\n                                value=\"right\" />\n                            <Radio.Background>\n                                <Radio.OuterCircle />\n                                <Radio.InnerCircle />\n                            </Radio.Background>\n                        </Radio>\n                        {/* tslint:enable:jsx-no-lambda */}\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Radio</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Radio</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of radio components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>checked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render checked radio.</td>\n                        </tr>\n                        <tr>\n                            <td><code>disabled</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render disabled radio.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Background</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Radio.Background</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Background component of radio.\n                </Typography.Body2>\n\n                <Typography.Title>InnerCircle</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Radio.InnerCircle</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    InnerCircle component of radio.\n                </Typography.Body2>\n\n                <Typography.Title>NativeControl</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Radio.NativeControl</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Native control (actual input component) component of radio.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>onChange</code></td>\n                            <td><code>(event) => void</code></td>\n                            <td />\n                            <td>Handler for change event.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>OuterCircle</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Radio.OuterCircle</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    OuterCircle component of radio.\n                </Typography.Body2>\n\n                <Typography.Title>Default</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Radio.Default</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Simpe, common composition of radio component\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>inputId</code></td>\n                            <td><code>string</code></td>\n                            <td />\n                            <td>ID property for native control</td>\n                        </tr>\n                        <tr>\n                            <td><code>name</code></td>\n                            <td><code>string</code></td>\n                            <td />\n                            <td>Name property for native control.</td>\n                        </tr>\n                        <tr>\n                            <td><code>value</code></td>\n                            <td><code>any</code></td>\n                            <td />\n                            <td>Value property for native control.</td>\n                        </tr>\n                        <tr>\n                            <td><code>onChange</code></td>\n                            <td><code>(event) => void</code></td>\n                            <td />\n                            <td>Handler for change event.</td>\n                        </tr>\n                        <tr>\n                            <td><code>checked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render checked radio.</td>\n                        </tr>\n                        <tr>\n                            <td><code>disabled</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render disabled radio.</td>\n                        </tr>\n                        <tr>\n                            <td><code>defaultChecked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Default checked state of radio.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/RipplePage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Button from \"@react-mdc/button\";\nimport Elevation from \"@react-mdc/elevation\";\nimport Ripple from \"@react-mdc/ripple\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function RipplePage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Ripple\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item style={{\n                        width: \"100%\",\n                        display: \"flex\",\n                        justifyContent: \"center\",\n                        alignItems: \"center\",\n                    }}>\n                        <Ripple.Meta>\n                            <Elevation zSpace={4}\n                                style={{\n                                    maxWidth: 500,\n                                    height: 300,\n                                    cursor: \"pointer\",\n                                    flex: 1,\n                                    display: \"flex\",\n                                    justifyContent: \"center\",\n                                    alignItems: \"center\",\n                                }}>\n                                RIPPLE\n                            </Elevation>\n                        </Ripple.Meta>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Ripple component is a React wrapper of mdc-ripple component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/ripple`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple Ripple\n                </Typography.Title>\n                <Code value={`\n<Ripple\n    color=\"primary\"\n    style={{\n        background: \"white\",\n        maxWidth: 500,\n        height: 300,\n        textAlign: \"center\",\n        cursor: \"pointer\",\n        flex: 1,\n        display: \"flex\",\n        justifyContent: \"center\",\n        alignItems: \"center\",\n    }}>\n    Click Me!\n</Ripple>\n`} />\n                <ShowCase>\n                    <ShowCase.Item style={{\n                        width: \"100%\",\n                        display: \"flex\",\n                        justifyContent: \"center\",\n                        alignItems: \"center\",\n                    }}>\n                        <Ripple\n                            color=\"primary\"\n                            style={{\n                                background: \"white\",\n                                maxWidth: 500,\n                                height: 300,\n                                textAlign: \"center\",\n                                cursor: \"pointer\",\n                                flex: 1,\n                                display: \"flex\",\n                                justifyContent: \"center\",\n                                alignItems: \"center\",\n                            }}>\n                            Click Me!\n                        </Ripple>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Ripple Button\n                </Typography.Title>\n                <Code value={`\n<Ripple.Meta color=\"accent\">\n    <Button>Press Me</Button>\n</Ripple.Meta>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Ripple.Meta color=\"accent\">\n                            <Button>Press Me</Button>\n                        </Ripple.Meta>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>Ripple</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Ripple</Name>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>unbounded</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Unbounded ripple?</td>\n                        </tr>\n                        <tr>\n                            <td><code>color</code></td>\n                            <td><code>\"primary\" | \"accent</code></td>\n                            <td />\n                            <td>Color of interaction.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/SwitchPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport FormField from \"@react-mdc/form-field\";\nimport Switch from \"@react-mdc/switch\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function SwitchPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Switch\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <FormField>\n                            <Switch.Default inputId=\"showcase-switch\" defaultChecked />\n                            <Switch.Label htmlFor=\"showcase-switch\">\n                                Switch\n                            </Switch.Label>\n                        </FormField>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Switch component is a React wrapper of mdc-switch component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/switch`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple Switch\n                </Typography.Title>\n                <Code value={`<Switch.Default />`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Switch.Default />\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Cutomizable Switch\n                </Typography.Title>\n                <Code value={`\n<Switch>\n    <Switch.NativeControl onChange={(e) => alert(\"On: \" + e.target.value)} />\n    <Switch.Background>\n        <Switch.Knob />\n    </Switch.Background>\n</Switch>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        {/* tslint:disable:jsx-no-lambda */}\n                        <Switch>\n                            <Switch.NativeControl onChange={(e) => alert(\"On: \" + e.currentTarget.value)} />\n                            <Switch.Background>\n                                <Switch.Knob />\n                            </Switch.Background>\n                        </Switch>\n                        {/* tslint:enable:jsx-no-lambda */}\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Switch</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Switch</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of switch components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>checked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render checked switch.</td>\n                        </tr>\n                        <tr>\n                            <td><code>disabled</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render disabled switch.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Background</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Switch.Background</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Background component of switch.\n                </Typography.Body2>\n\n                <Typography.Title>Knob</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Switch.Knob</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Knob component of switch.\n                </Typography.Body2>\n\n                <Typography.Title>Label</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Switch.Label</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Switch label component\n                </Typography.Body2>\n\n                <Typography.Title>NativeControl</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Switch.NativeControl</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Native control (actual input component) component of switch.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>onChange</code></td>\n                            <td><code>(event) => void</code></td>\n                            <td />\n                            <td>Handler for change event.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Default</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Switch.Default</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Simpe, common composition of switch component\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>inputId</code></td>\n                            <td><code>string</code></td>\n                            <td />\n                            <td>ID property for native control</td>\n                        </tr>\n                        <tr>\n                            <td><code>name</code></td>\n                            <td><code>string</code></td>\n                            <td />\n                            <td>Name property for native control.</td>\n                        </tr>\n                        <tr>\n                            <td><code>value</code></td>\n                            <td><code>any</code></td>\n                            <td />\n                            <td>Value property for native control.</td>\n                        </tr>\n                        <tr>\n                            <td><code>onChange</code></td>\n                            <td><code>(event) => void</code></td>\n                            <td />\n                            <td>Handler for change event.</td>\n                        </tr>\n                        <tr>\n                            <td><code>checked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render checked switch.</td>\n                        </tr>\n                        <tr>\n                            <td><code>disabled</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render disabled switch.</td>\n                        </tr>\n                        <tr>\n                            <td><code>defaultChecked</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Default checked state of switch.</td>\n                        </tr>\n                    </tbody>\n                </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/TextfieldPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Textfield from \"@react-mdc/textfield\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function TextfieldPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Textfield\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <Textfield.Default placeholder=\"Type Here...\" />\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Textfield component is a React wrapper of mdc-textfield component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/textfield`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Simple Textfield\n                </Typography.Title>\n                <Code value={`<Textfield.Default />`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Textfield.Default />\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Labeled\n                </Typography.Title>\n                <Code value={`\n<Textfield>\n    <Textfield.Input id=\"usage-1\" autoComplete=\"email\" />\n    <Textfield.Label htmlFor=\"usage-1\">\n        Email Address\n    </Textfield.Label>\n</Textfield>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Textfield>\n                            <Textfield.Input id=\"usage-1\" autoComplete=\"email\" />\n                            <Textfield.Label htmlFor=\"usage-1\">\n                                Email Address\n                            </Textfield.Label>\n                        </Textfield>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Multiline\n                </Typography.Title>\n                <Code value={`\n<Textfield multiline>\n    <Textfield.Input.Meta>\n        <textarea\n            id=\"usage-2\"\n            style={{ width: \"100%\" }}\n            rows={8}\n            cols={40} />\n    </Textfield.Input.Meta>\n    <Textfield.Label htmlFor=\"usage-2\">\n        Comment\n    </Textfield.Label>\n</Textfield>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Textfield multiline>\n                            <Textfield.Input.Meta>\n                                <textarea\n                                    id=\"usage-2\"\n                                    style={{ width: \"100%\" }}\n                                    rows={8}\n                                    cols={40} />\n                            </Textfield.Input.Meta>\n                            <Textfield.Label htmlFor=\"usage-2\">\n                                Comment\n                            </Textfield.Label>\n                        </Textfield>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Full Width\n                </Typography.Title>\n                <Code value={`\n<ShowCase.Item style={{ width: \"100%\" }}>\n    <Textfield.Default fullwidth placeholder=\"Full Width\" />\n</ShowCase.Item>\n`} />\n                <ShowCase>\n                    <ShowCase.Item style={{ width: \"100%\" }}>\n                        <Textfield.Default fullwidth placeholder=\"Full Width\" />\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Textfield</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Textfield</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of textfield components.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>disabled</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Disabled state.</td>\n                        </tr>\n                        <tr>\n                            <td><code>multiline</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Enable multiline</td>\n                        </tr>\n                        <tr>\n                            <td><code>fullwidth</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>Render full width textfield</td>\n                        </tr>\n                    </tbody>\n                </Table>\n\n                <Typography.Title>Input</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Textfield.Input</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Input component of textfield.\n                </Typography.Body2>\n\n                <Typography.Title>Label</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Text.field.Label</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Textfield label\n                </Typography.Body2>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/TypographyPage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport ComponentPage from \"app/js/components/ComponentPage\";\nimport { MaterialIcon } from \"app/js/components/Icon\";\nimport Name from \"app/js/components/Name\";\nimport ShowCase from \"app/js/components/ShowCase\";\nimport Table from \"app/js/components/Table\";\n\nexport default function CheckboxPage() {\n    return (\n        <ComponentPage>\n            <ComponentPage.Content>\n                <Typography.Display1 adjustMargin>\n                    Typography\n                </Typography.Display1>\n                <ShowCase large>\n                    <ShowCase.Item>\n                        <Typography>\n                            <Typography.Display4>\n                                Aa 가\n                            </Typography.Display4>\n                        </Typography>\n                    </ShowCase.Item>\n                </ShowCase>\n                <Typography.Body2>\n                    Typography component is a React wrapper of mdc-typography component.\n                </Typography.Body2>\n\n                <Typography.Headline>\n                    Installation\n                </Typography.Headline>\n                <Code value={`$ npm install --save @react-mdc/typography`} mode=\"shell\" />\n\n                <Typography.Headline>\n                    Usage\n                </Typography.Headline>\n\n                <Typography.Title>\n                    Title\n                </Typography.Title>\n                <Code value={`\n<Typography>\n    <Typography.Title>\n        This is a Title\n    </Typography.Title>\n</Typography>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Typography>\n                            <Typography.Title>\n                                This is a Title\n                            </Typography.Title>\n                        </Typography>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Title>\n                    Meta\n                </Typography.Title>\n                <Code value={`\n<Typography>\n    <Typography.Text.Meta textStyle=\"caption\">\n        <p>\n            This is a caption paragraph.\n        </p>\n    </Typography.Text.Meta>\n</Typography>\n`} />\n                <ShowCase>\n                    <ShowCase.Item>\n                        <Typography>\n                            <Typography.Text.Meta textStyle=\"caption\">\n                                <p>\n                                  This is a caption paragraph.\n                                </p>\n                            </Typography.Text.Meta>\n                        </Typography>\n                    </ShowCase.Item>\n                </ShowCase>\n\n                <Typography.Headline>Components</Typography.Headline>\n\n                <Typography.Title>Typography</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Typography</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Top-level container of typography components.\n                    Every typography texts should be included in this component.\n                </Typography.Body2>\n\n                <Typography.Title>Text</Typography.Title>\n                <Typography.Subheading2>Name</Typography.Subheading2>\n                <Name>Typography.Text</Name>\n                <Typography.Subheading2>Description</Typography.Subheading2>\n                <Typography.Body2>\n                    Text component of typography.\n                </Typography.Body2>\n                <Typography.Subheading2>Properties</Typography.Subheading2>\n                <Table>\n                    <thead>\n                        <tr>\n                            <th>Property</th>\n                            <th>Type</th>\n                            <th>Required</th>\n                            <th>Description</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td><code>textStyle</code></td>\n                            <td>String value of list at below</td>\n                            <td>&#10004;</td>\n                            <td>Style of text component.</td>\n                        </tr>\n                        <tr>\n                            <td><code>adjustMargin</code></td>\n                            <td><code>boolean</code></td>\n                            <td />\n                            <td>\n                                Enable adjustment of component's margin.\n                            </td>\n                        </tr>\n                    </tbody>\n                </Table>\n                <Typography.Subheading2>Text Styles</Typography.Subheading2>\n                <Typography.Text.Meta textStyle=\"body2\">\n                    <ul>\n                        <li><code>display4</code></li>\n                        <li><code>display3</code></li>\n                        <li><code>display2</code></li>\n                        <li><code>display1</code></li>\n                        <li><code>headline</code></li>\n                        <li><code>title</code></li>\n                        <li><code>subheading2</code></li>\n                        <li><code>subheading1</code></li>\n                        <li><code>body2</code></li>\n                        <li><code>body1</code></li>\n                        <li><code>caption</code></li>\n                    </ul>\n                </Typography.Text.Meta>\n\n            <Typography.Title>Shortcuts</Typography.Title>\n            <Typography.Subheading2>Name</Typography.Subheading2>\n            <Name>Typography.Display4</Name>\n            <Name>Typography.Display3</Name>\n            <Name>Typography.Display2</Name>\n            <Name>Typography.Display1</Name>\n            <Name>Typography.Headline</Name>\n            <Name>Typography.Title</Name>\n            <Name>Typography.Subheading2</Name>\n            <Name>Typography.Subheading1</Name>\n            <Name>Typography.Body2</Name>\n            <Name>Typography.Body1</Name>\n            <Name>Typography.Caption</Name>\n            <Typography.Subheading2>Description</Typography.Subheading2>\n            <Typography.Body2>\n                There are coresponding shortcut components for each text styles.\n                Shorcuts don't have meta components. Use <code>Text.Meta</code>\n                instead if you want a meta component.\n            </Typography.Body2>\n\n            <Typography.Subheading2>Properties</Typography.Subheading2>\n            <Table>\n                <thead>\n                    <tr>\n                        <th>Property</th>\n                        <th>Type</th>\n                        <th>Required</th>\n                        <th>Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td><code>adjustMargin</code></td>\n                        <td><code>boolean</code></td>\n                        <td />\n                        <td>\n                            Enable adjustment of component's margin.\n                        </td>\n                    </tr>\n                </tbody>\n            </Table>\n            </ComponentPage.Content>\n        </ComponentPage>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/WelcomePage/index.tsx",
    "content": "import * as React from \"react\";\nimport { Link } from \"react-router\";\n\nimport * as classNames from \"classnames\";\n\nimport Button from \"@react-mdc/button\";\nimport LayoutGrid from \"@react-mdc/layout-grid\";\nimport Ripple from \"@react-mdc/ripple\";\nimport Theme from \"@react-mdc/theme\";\nimport Typography from \"@react-mdc/typography\";\n\nimport Code from \"app/js/components/Code\";\nimport DarkTheme from \"app/js/components/DarkTheme\";\nimport Page from \"app/js/components/Page\";\nimport * as styles from \"./styles.scss\";\n\nfunction Welcome() {\n    return (\n        <DarkTheme className={styles[\"welcome\"]}>\n            <Page.Responsive.Meta>\n                <LayoutGrid>\n                    <LayoutGrid.Cell span={6}>\n                        <Typography.Display1>\n                            React Material Components for the Web\n                        </Typography.Display1>\n                        <Typography.Headline>\n                            React wrapper of Google's Material Components for the Web\n                        </Typography.Headline>\n                        <Theme.Meta textColor=\"primary\" onColor=\"dark\">\n                            <Link to=\"/button\" className={styles[\"welcome-link\"]}>\n                                Components\n                            </Link>\n                        </Theme.Meta>\n                        <Theme.Meta textColor=\"primary\" onColor=\"dark\">\n                            <a href=\"https://github.com/react-mdc/react-material-components-web\"\n                                target=\"_blank\"\n                                className={styles[\"welcome-link\"]}>\n                                Source Code\n                            </a>\n                        </Theme.Meta>\n                    </LayoutGrid.Cell>\n                    <LayoutGrid.Cell span={6} />{/* Placeholder */}\n                </LayoutGrid>\n            </Page.Responsive.Meta>\n        </DarkTheme>\n    );\n}\n\nfunction GettingStarted() {\n    return (\n        <Page.Responsive.Meta>\n            <Page.Content>\n                <Typography.Headline>\n                    Getting Started\n                </Typography.Headline>\n                <Typography.Body2>\n                    Get up and running with React Material Components web\n                </Typography.Body2>\n\n                <Typography.Title adjustMargin>\n                    Installation\n                </Typography.Title>\n                <Typography.Body2>\n                    You can install the whole react-material-components-web components by following\n                </Typography.Body2>\n                <Code value=\"$ npm install --save react-material-components-web\" mode=\"shell\" />\n                <Typography.Body2>\n                    To install each components individually\n                </Typography.Body2>\n                <Code value=\"$ npm install --save @react-mdc/button\" mode=\"shell\" />\n\n                <Typography.Title adjustMargin>\n                    Load Stylesheet\n                </Typography.Title>\n                <Typography.Body2>\n                    Since Material Components for Web provides customization by stylesheet,\n                    You have to load the stylesheet manually.\n                </Typography.Body2>\n                <Code value={`import \"material-components-web/material-components-web.scss\";`} />\n\n                <Typography.Title adjustMargin>\n                    Using Components\n                </Typography.Title>\n                <Typography.Body2>\n                    Now you can use components.\n                </Typography.Body2>\n                <Code value={`\nimport Button from \"@react-mdc/button\";\n\nfunction Example() {\n    return (\n        <Button raised primary>\n            Hello\n        </Button>\n    )\n}\n`} />\n\n            </Page.Content>\n        </Page.Responsive.Meta>\n    );\n}\n\nexport default function WelcomePage() {\n    return (\n        <Page className={styles[\"flex\"]}>\n            <Welcome />\n            <GettingStarted />\n            <Page.Footer />\n        </Page>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/pages/WelcomePage/styles.scss",
    "content": "@import \"style/vars/theme\";\n\n:local {\n    .flex {\n        flex: 1;\n    }\n\n    .welcome {\n        padding-bottom: 60px;\n    }\n    .welcome-link {\n        text-decoration: none;\n        border-bottom: solid 1px $mdc-theme-primary;\n        padding: 0.2em;\n        margin: 0.2em;\n    }\n}\n"
  },
  {
    "path": "docs/src/js/routes.tsx",
    "content": "import * as React from \"react\";\n\nimport { hashHistory, Route, Router } from \"react-router\";\n\nimport ComponentPage from \"app/js/components/ComponentPage\";\n\nimport Container from \"./Container\";\nimport ButtonPage from \"./pages/ButtonPage\";\nimport CardPage from \"./pages/CardPage\";\nimport CheckboxPage from \"./pages/CheckboxPage\";\nimport DialogPage from \"./pages/DialogPage\";\nimport ElevationPage from \"./pages/ElevationPage\";\nimport FABPage from \"./pages/FABPage\";\nimport FormFieldPage from \"./pages/FormFieldPage\";\nimport LayoutGridPage from \"./pages/LayoutGridPage\";\nimport RadioPage from \"./pages/RadioPage\";\nimport RipplePage from \"./pages/RipplePage\";\nimport SwitchPage from \"./pages/SwitchPage\";\nimport TextfieldPage from \"./pages/TextfieldPage\";\nimport TypographyPage from \"./pages/TypographyPage\";\n\nimport NotFoundPage from \"./pages/NotFoundPage\";\nimport WelcomePage from \"./pages/WelcomePage\";\n\nfunction MainContainer(props) {\n    let {\n        children,\n        ...p,\n    } = props;\n    children = children || <WelcomePage />;\n    return <Container children={children} {...p} />;\n}\n\nfunction scrollToTop() {\n    window.scrollTo(0, 0);\n}\n\nexport default function MainRouter() {\n    return (\n        <Router onUpdate={scrollToTop} history={hashHistory}>\n            <Route path=\"/\" component={MainContainer}>\n                <Route path=\"button\" component={ButtonPage} />\n                <Route path=\"card\" component={CardPage} />\n                <Route path=\"checkbox\" component={CheckboxPage} />\n                <Route path=\"dialog\" component={DialogPage} />\n                <Route path=\"elevation\" component={ElevationPage} />\n                <Route path=\"fab\" component={FABPage} />\n                <Route path=\"form-field\" component={FormFieldPage} />\n                <Route path=\"layout-grid\" component={LayoutGridPage} />\n                <Route path=\"radio\" component={RadioPage} />\n                <Route path=\"ripple\" component={RipplePage} />\n                <Route path=\"switch\" component={SwitchPage} />\n                <Route path=\"textfield\" component={TextfieldPage} />\n                <Route path=\"typography\" component={TypographyPage} />\n            </Route>\n            <Route path=\"*\" component={NotFoundPage} />\n        </Router>\n    );\n}\n"
  },
  {
    "path": "docs/src/js/utils/code.ts",
    "content": "export const CODE_STRIP_START = \"/* strip-start */\";\nexport const CODE_STRIP_END = \"/* strip-end */\";\n\n/**\n * Strip ignored text from example code.\n */\nexport function stripIgnored(code: string): string {\n    if (!code.includes(CODE_STRIP_START)) {\n        return code;\n    }\n    const components = code.split(CODE_STRIP_START);\n    const left = components[0];\n    const right = components.slice(1).join(CODE_STRIP_START);\n    return stripIgnored(\n        left +\n        right\n            .split(CODE_STRIP_END)\n            .slice(1)\n            .join(CODE_STRIP_END));\n}\n"
  },
  {
    "path": "docs/src/style/index.scss",
    "content": "/* Project Style Entry Point */\n\n/* Global Setup */\n@import \"./preload\";\n@import \"./layout\";\n@import \"./vars/theme\";\n@import \"material-components-web/material-components-web\";\n"
  },
  {
    "path": "docs/src/style/layout.scss",
    "content": "/* Google web fonts */\n:global {\n    @import url(https://fonts.googleapis.com/css?family=Roboto);\n    @import url(https://fonts.googleapis.com/css?family=Roboto+Mono);\n    @import url(https://fonts.googleapis.com/icon?family=Material+Icons);\n    html,\n    body {\n        height: 100%;\n    }\n    body {\n        margin: 0;\n        font-family: Roboto, sans-serif;\n    }\n    #root {\n        display: flex;\n        flex-direction: row;\n        padding: 0;\n        margin: 0;\n        box-sizing: border-box;\n    }\n    code,\n    pre {\n        font-family: Roboto Mono, monospace;\n    }\n    code {\n        color: #444444;\n    }\n}\n"
  },
  {
    "path": "docs/src/style/preload.scss",
    "content": "/* Styles for before react */\n:global {\n    #preload-react {\n        position: fixed;\n        left: 0;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        font-family: \"Roboto\", \"Helvetica\", Sans-serif;\n        font-size: 1.5em;\n        color: #333333;\n        display: flex;\n        /* flex-direction: column;*/\n        align-items: center;\n        justify-content: center;\n    }\n}\n"
  },
  {
    "path": "docs/src/style/vars/_theme.scss",
    "content": "$mdc-theme-primary: #64DD17;\n$mdc-theme-accent: #64DD17;\n$mdc-theme-background: #fff;\n\n$app-theme-dark-background: #212121;\n\n$app-showcase-background: rgba(0, 0, 0, 0.05);\n$app-showcase-padding: 24px;\n\n@import \"@material/theme/mdc-theme\";\n"
  },
  {
    "path": "docs/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"baseUrl\": \".\",\n        \"outDir\": \"./build/\",\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"allowJs\": true,\n        \"allowSyntheticDefaultImports\": true,\n        \"skipLibCheck\": true,\n        \"paths\": {\n            \"app/*\": [\n                \"src/*\"\n            ]\n        },\n        \"lib\": [\n            \"dom\",\n            \"es2017\"\n        ]\n    },\n    \"include\": [\n        \"./src/**/*\",\n        \"./typings/**/*.ts\"\n    ]\n}\n"
  },
  {
    "path": "docs/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\n            \"destructuring\": \"all\"\n        }],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        \"no-string-literal\": false,\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "docs/typings/cssmodule.d.ts",
    "content": "interface CssModule {\n    [className: string]: string\n}\n\ndeclare module \"*.scss\" {\n    const styles: CssModule\n    export = styles;\n}\n\ndeclare module \"*.css\" {\n    const styles: CssModule\n    export = styles;\n}\n"
  },
  {
    "path": "docs/typings/images.d.ts",
    "content": "declare module \"*.jpg\" {\n    const url: string\n    export = url;\n}\n\ndeclare module \"*.png\" {\n    const url: string\n    export = url;\n}\n\ndeclare module \"*.jpeg\" {\n    const url: string\n    export = url;\n}\n"
  },
  {
    "path": "docs/typings/raw-loader.d.ts",
    "content": "declare module \"raw-loader!*\" {\n    const content: string\n    export = content;\n}\n"
  },
  {
    "path": "docs/vendor.js",
    "content": "require(\"react\");\nrequire(\"react-dom\");\nrequire(\"codemirror\");\nrequire(\"fbjs\");\n"
  },
  {
    "path": "lerna.json",
    "content": "{\n  \"lerna\": \"2.0.0-beta.38\",\n  \"packages\": [\n    \"packages/*\",\n    \"docs\"\n  ],\n  \"commands\": {\n    \"publish\": {\n      \"ignore\": [\n        \"docs/*\",\n        \"*.md\",\n        \"src/\"\n      ]\n    }\n  },\n  \"version\": \"independent\"\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"react-material-components-web-root\",\n  \"author\": \"Choi Geonu\",\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"devDependencies\": {\n    \"commander\": \"^2.9.0\",\n    \"cross-env\": \"^4.0.0\",\n    \"del\": \"^2.2.2\",\n    \"fs-extra\": \"^3.0.1\",\n    \"jest\": \"^20.0.4\",\n    \"jest-cli\": \"^20.0.4\",\n    \"lerna\": \"2.0.0-rc.4\",\n    \"lodash\": \"^4.17.4\",\n    \"npm-run-all\": \"^4.0.1\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"clean\": \"lerna run clean --no-sort --concurrency=10\",\n    \"build\": \"lerna run build --stream --concurrency=5\",\n    \"lint\": \"lerna run lint --no-sort --concurrency=5\",\n    \"watch\": \"lerna run watch --stream --no-sort --concurrency=50\",\n    \"test\": \"lerna run test\",\n    \"test:watch\": \"jest --watchAll\"\n  },\n  \"jest\": {\n    \"testRegex\": \"packages/[^/]+/lib/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(js)$\",\n    \"moduleFileExtensions\": [\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/base/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/base/package.json",
    "content": "{\n  \"name\": \"@react-mdc/base\",\n  \"description\": \"Core library of @react-mdc components\",\n  \"version\": \"0.1.12\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"@types/react-dom\": \"^15.5.0\",\n    \"classnames\": \"^2.2.5\",\n    \"immutable\": \"^3.8.1\",\n    \"lodash.foreach\": \"^4.5.0\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.5.4\",\n    \"remove\": \"^0.1.5\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"@types/jsdom\": \"^2.0.30\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"jsdom\": \"^10.1.0\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/base/src/ClassNameMetaBase.tsx",
    "content": "/**\n * Meta factory component.\n */\nimport * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport {\n    default as MetaBase,\n    NativeDOMProps,\n} from \"./MetaBase\";\n\nexport type ClassNameChildProps = {\n    className?: string,\n};\n\nexport type ClassNameProps = {\n    className?: string,\n};\n\nexport default abstract class ClassNameMetaBase\n    <ChildProps extends ClassNameChildProps, Props extends ClassNameProps, State>\n    extends MetaBase<ChildProps, Props, State> {\n    protected renderProps(childProps: ChildProps): ChildProps {\n        return {\n            ...childProps as any,\n            className: this.renderClassName(childProps),\n        };\n    }\n\n    protected renderNativeDOMProps(childProps: ChildProps) {\n        return {};\n    }\n\n    protected renderClassName(childProps: ChildProps): string {\n        return classNames(\n            this.renderBaseClassName(childProps),\n            ...this.renderClassValues(childProps),\n            this.props.className,\n            childProps.className,\n        );\n    }\n\n    protected renderBaseClassName(childProps: ChildProps): string | null {\n        return null;\n    }\n\n    protected renderClassValues(childProps: ChildProps): ClassValue[] {\n        return [];\n    }\n}\n"
  },
  {
    "path": "packages/base/src/DefaultComponentBase.ts",
    "content": "/**\n * Default component for meta component.\n */\nimport * as React from \"react\";\n\nexport default abstract class DefaultComponentBase<ChildProps, MetaProps, State>\n    extends React.Component<ChildProps & MetaProps, State> {\n\n    public render() {\n        const metaProps: Partial<MetaProps> = {};\n        const childProps: Partial<ChildProps> = {};\n\n        const metaKeys = this.getMetaPropNames();\n        const meta = this.getMetaComponent();\n        const defaultComponent = this.getChildComponent();\n\n        for (const key in this.props) {\n            if (!this.props.hasOwnProperty(key)) {\n                continue;\n            }\n            if (metaKeys.indexOf(key as any) !== -1) {\n                metaProps[key] = this.props[key];\n            } else {\n                childProps[key] = this.props[key];\n            }\n        }\n\n        return React.createElement(\n            meta,\n            metaProps as MetaProps,\n            React.createElement(defaultComponent as any, childProps as ChildProps));\n    }\n\n    protected abstract getMetaPropNames(): string[];\n    protected abstract getMetaComponent(): React.ComponentClass<MetaProps>;\n    protected abstract getChildComponent(): string | React.ComponentClass<ChildProps> | React.SFC<ChildProps>;\n}\n"
  },
  {
    "path": "packages/base/src/MetaBase.tsx",
    "content": "/**\n * Base class of meta component.\n */\nimport * as React from \"react\";\n\nimport {\n    Attributes,\n    CSSVariables,\n    default as NativeDOMAdapter,\n    EventListeners,\n} from \"./NativeDOMAdapter\";\n\nexport type Props<ChildProps> = {\n    children: React.ReactElement<ChildProps>,\n};\n\nexport type NativeDOMProps = {\n    cssVariables?: CSSVariables,\n    eventListeners?: EventListeners,\n    attributes?: Attributes,\n};\n\nexport default abstract class BaseMeta<ChildProps, MetaProps, State>\n    extends React.Component<MetaProps & Props<ChildProps>, State> {\n    public render() {\n        const {\n            children,\n        } = this.props;\n\n        const props = this.renderProps(children.props);\n        const nativeDOMProps = this.renderNativeDOMProps(children.props);\n\n        return (\n            <NativeDOMAdapter {...nativeDOMProps}>\n                {React.cloneElement(children, props)}\n            </NativeDOMAdapter>\n        );\n    }\n\n    protected abstract renderProps(childProps: ChildProps): ChildProps;\n\n    protected abstract renderNativeDOMProps(childProps: ChildProps): NativeDOMProps;\n}\n"
  },
  {
    "path": "packages/base/src/NativeDOMAdapter.tsx",
    "content": "import {\n    OrderedSet,\n} from \"immutable\";\nimport * as forEach from \"lodash.foreach\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport { EVENT_MAP } from \"./event\";\n\nexport type EventListeners = {\n    [eventType: string]: EventListener[],\n};\n\nexport type CSSVariables = {\n    [name: string]: string,\n};\n\nexport type Attributes = {\n    [name: string]: string,\n};\n\nexport type Props = {\n    cssVariables?: CSSVariables,\n    eventListeners?: EventListeners,\n    attributes?: Attributes,\n    children: React.ReactElement<any>,\n};\n\ntype InternalProps = {\n    cssVariables: CSSVariables,\n    eventListeners: EventListeners,\n    attributes: Attributes,\n    children: React.ReactElement<any>,\n};\n\n/**\n * High order components that adds native DOM properties\n * that can't be controlled by React.\n */\nexport default class NativeDOMAdapter extends React.Component<Props, {}> {\n    public static defaultProps = {\n        cssVariables: {},\n        eventListeners: {},\n        attributes: {},\n    };\n\n    public props: Props;\n\n    // Last known DOM node\n    private lastDOMNode: HTMLElement | null;\n\n    public render() {\n        const child = this.props.children;\n        const reactConvertibles = this.filterReactEventConvertibles(this.props.eventListeners || {});\n        const merged = this.mergeEvents(reactConvertibles, child.props);\n        return React.cloneElement(child, {\n            ref: this.handleRef,\n            ...merged,\n        });\n    }\n\n    public componentDidUpdate(origPrevProps: Props) {\n        const props = this.internalProps(this.props);\n        const prevProps = this.internalProps(origPrevProps);\n        this.updateNode(this.lastDOMNode, this.lastDOMNode, prevProps, props);\n    }\n\n    private internalProps(props: Props): InternalProps {\n        return {\n            cssVariables: (props.cssVariables as CSSVariables),\n            eventListeners: (props.eventListeners as EventListeners),\n            attributes: (props.attributes as Attributes),\n            children: props.children,\n        };\n    }\n\n    private mergeEvents(eventListeners: EventListeners, props: any) {\n        const merged = { ...props };\n        forEach(eventListeners, (listeners: EventListener[], eventType: string) => {\n            const eventProp = EVENT_MAP[eventType];\n            if (eventProp == null) {\n                return;\n            }\n            let givenEvent;\n            if (eventProp in merged) {\n                givenEvent = merged[eventProp];\n            } else {\n                givenEvent = () => { };\n            }\n            const listener = (event: React.SyntheticEvent<any>) => {\n                const nativeEvent = event.nativeEvent;\n                const proxiedEvent: any = {};\n                for (const key in nativeEvent) {\n                    if (key.slice(0, 1) !== \"_\") {\n                        proxiedEvent[key] = nativeEvent[key];\n                    }\n                }\n                proxiedEvent.stopPropagation = () => {\n                    event.stopPropagation();\n                    nativeEvent.stopPropagation();\n                };\n                givenEvent(event);\n                if (event.defaultPrevented) {\n                    return;\n                }\n                listeners.every((nativeListener) => {\n                    nativeListener(proxiedEvent);\n                    return !nativeEvent.defaultPrevented;\n                });\n            };\n            merged[eventProp] = listener;\n        });\n        return merged;\n    }\n\n    // Manage CSS variables\n    private removeCssVariables(dom: HTMLElement, toRemove: CSSVariables) {\n        forEach(toRemove, (value: any, key: string) => {\n            if (dom.style.getPropertyValue(key) === value) {\n                dom.style.removeProperty(key);\n            }\n        });\n    }\n\n    private addCssVariables(dom: HTMLElement, toAdd: CSSVariables) {\n        forEach(toAdd, (value: any, key: string) => {\n            if (dom.style.getPropertyValue(key) !== value) {\n                dom.style.setProperty(key, value);\n            }\n        });\n    }\n\n    private updateCssVariables(dom: HTMLElement, prev: CSSVariables, next: CSSVariables) {\n        const toRemove: CSSVariables = {};\n        const toAdd: CSSVariables = {};\n        forEach(prev, (value: any, key: string) => {\n            if (next[key] !== value) {\n                toRemove[key] = value;\n            }\n        });\n        forEach(next, (value: any, key: string) => {\n            if (prev[key] !== value) {\n                toAdd[key] = value;\n            }\n        });\n        this.removeCssVariables(dom, toRemove);\n        this.addCssVariables(dom, toAdd);\n    }\n\n    // Manage event listeners\n    private filterReactEventConvertibles(eventListeners: EventListeners): EventListeners {\n        const nativeListeners: EventListeners = {};\n        forEach(eventListeners, (listeners, eventType) => {\n            if (eventType in EVENT_MAP) {\n                nativeListeners[eventType] = listeners;\n            }\n        });\n        return nativeListeners;\n    }\n\n    private filterNativeEvents(eventListeners: EventListeners): EventListeners {\n        const nativeListeners: EventListeners = {};\n        forEach(eventListeners, (listeners, eventType) => {\n            if (!(eventType in EVENT_MAP)) {\n                nativeListeners[eventType] = listeners;\n            }\n        });\n        return nativeListeners;\n    }\n\n    private removeEventListeners(dom: HTMLElement, toRemove: EventListeners) {\n        forEach(this.filterNativeEvents(toRemove), (listeners: EventListener[], event: string) => {\n            listeners.forEach((listener) => {\n                dom.removeEventListener(event, listener);\n            });\n        });\n    }\n\n    private addEventListeners(dom: HTMLElement, toAdd: EventListeners) {\n        forEach(this.filterNativeEvents(toAdd), (listeners: EventListener[], event: string) => {\n            listeners.forEach((listener) => {\n                dom.addEventListener(event, listener);\n            });\n        });\n    }\n\n    private updateEventListeners(dom: HTMLElement, prev: EventListeners, next: EventListeners) {\n        const prevKeys = Object.keys(prev);\n        const nextKeys = Object.keys(next);\n        const allKeys: string[] = OrderedSet\n            .of(...nextKeys.concat(prevKeys))\n            .toJS();\n\n        // Find listeners to add / remove with order preservation\n        type Diff = {\n            event: string,\n            toAdd: EventListener[],\n            toRemove: EventListener[],\n        };\n        const diff: Diff[] = allKeys.map((event: string) => {\n            const prevListeners: EventListener[] = prev[event] || [];\n            const nextListeners: EventListener[] = next[event] || [];\n            let diffStart;\n            for (diffStart = 0; diffStart < Math.min(prevListeners.length, nextListeners.length); diffStart++) {\n                if (prevListeners[diffStart] !== nextListeners[diffStart]) {\n                    break;\n                }\n            }\n            return {\n                event,\n                toRemove: prevListeners.slice(diffStart),\n                toAdd: nextListeners.slice(diffStart),\n            };\n        });\n        const toAdd: EventListeners = diff.reduce((listeners, item) => ({\n            ...listeners,\n            [item.event]: item.toAdd,\n        }), {} as EventListeners);\n        const toRemove: EventListeners = diff.reduce((listeners, item) => ({\n            ...listeners,\n            [item.event]: item.toRemove,\n        }), {} as EventListeners);\n\n        this.removeEventListeners(dom, toRemove);\n        this.addEventListeners(dom, toAdd);\n    }\n\n    // Manage attributes\n    private removeAttributes(dom: HTMLElement, toRemove: Attributes) {\n        forEach(toRemove, (value: any, key: string) => {\n            if (dom.getAttribute(key) === value) {\n                dom.removeAttribute(key);\n            }\n        });\n    }\n\n    private addAttributes(dom: HTMLElement, toAdd: Attributes) {\n        forEach(toAdd, (value: any, key: string) => {\n            if (dom.getAttribute(key) !== value) {\n                dom.setAttribute(key, value);\n            }\n        });\n    }\n\n    private updateAttributes(dom: HTMLElement, prev: Attributes, next: Attributes) {\n        const toRemove: Attributes = {};\n        const toAdd: Attributes = {};\n        forEach(prev, (value: string, key: string) => {\n            if (next[key] !== value) {\n                toRemove[key] = value;\n            }\n        });\n        forEach(next, (value: string, key: string) => {\n            if (prev[key] !== value) {\n                toAdd[key] = value;\n            }\n        });\n        this.removeAttributes(dom, toRemove);\n        this.addAttributes(dom, toAdd);\n    }\n\n    private updateNode(\n        prevNode: HTMLElement | null, nextNode: HTMLElement | null,\n        prevProps: InternalProps, props: InternalProps) {\n        if (prevNode === nextNode) {\n            if (nextNode != null) {\n                // Update\n                this.updateCssVariables(nextNode, prevProps.cssVariables, props.cssVariables);\n                this.updateEventListeners(nextNode, prevProps.eventListeners, props.eventListeners);\n                this.updateAttributes(nextNode, prevProps.attributes, props.attributes);\n            }\n        } else {\n            if (prevNode != null) {\n                // Remove from previous DOM node\n                this.removeCssVariables(prevNode, props.cssVariables);\n                this.removeEventListeners(prevNode, props.eventListeners);\n                this.removeAttributes(prevNode, props.attributes);\n            }\n            if (nextNode != null) {\n                // Add to new DOM node\n                this.addCssVariables(nextNode, props.cssVariables);\n                this.addEventListeners(nextNode, props.eventListeners);\n                this.addAttributes(nextNode, props.attributes);\n            }\n        }\n    }\n\n    private handleRef = (ref: React.ReactInstance | null) => {\n        const props = this.internalProps(this.props);\n        const prevNode = this.lastDOMNode;\n        let nextNode: HTMLElement | null = null;\n        if (ref != null) {\n            nextNode = ReactDOM.findDOMNode<HTMLElement>(ref);\n        }\n\n        this.updateNode(prevNode, nextNode, props, props);\n        this.lastDOMNode = nextNode;\n    }\n}\n"
  },
  {
    "path": "packages/base/src/__tests__/ClassNameMetaBase.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport ClassNameMetaBase from \"../ClassNameMetaBase\";\nimport NativeDOMAdapter from \"../NativeDOMAdapter\";\n\ndescribe(\"ClassNameMetaBase\", () => {\n    it(\"Should render base classname\", () => {\n        class MetaImpl extends ClassNameMetaBase<{}, {}, {}> {\n            protected renderBaseClassName() {\n                return \"foo\";\n            }\n        }\n\n        const wrapper = enzyme.shallow(\n            <MetaImpl>\n                <a />\n            </MetaImpl>,\n        );\n\n        expect(wrapper.find(\"a\").hasClass(\"foo\")).toBeTruthy();\n    });\n\n    it(\"Should render class values\", () => {\n        class MetaImpl extends ClassNameMetaBase<{}, {}, {}> {\n            protected renderClassValues() {\n                return [{\n                    foo: true,\n                    bar: false,\n                    baz: undefined,\n                }, \"qux\"];\n            }\n        }\n\n        const wrapper = enzyme.shallow(\n            <MetaImpl>\n                <a />\n            </MetaImpl>,\n        );\n\n        expect(wrapper.find(\"a\").hasClass(\"foo\")).toBeTruthy();\n        expect(wrapper.find(\"a\").hasClass(\"bar\")).toBeFalsy();\n        expect(wrapper.find(\"a\").hasClass(\"baz\")).toBeFalsy();\n        expect(wrapper.find(\"a\").hasClass(\"qux\")).toBeTruthy();\n    });\n\n    it(\"Should preserve meta's className\", () => {\n        class MetaImpl extends ClassNameMetaBase<{}, { className: string }, {}> {\n            protected renderBaseClassName() {\n                return \"foo\";\n            }\n        }\n\n        const wrapper = enzyme.shallow(\n            <MetaImpl className=\"meta\">\n                <a />\n            </MetaImpl>,\n        );\n\n        expect(wrapper.find(\"a\").hasClass(\"meta\")).toBeTruthy();\n        expect(wrapper.find(\"a\").hasClass(\"foo\")).toBeTruthy();\n    });\n\n    it(\"Should preserve child's className\", () => {\n        class MetaImpl extends ClassNameMetaBase<{ className: string }, { className: string }, {}> {\n            protected renderBaseClassName() {\n                return \"foo\";\n            }\n        }\n\n        const wrapper = enzyme.shallow(\n            <MetaImpl className=\"meta\">\n                <a className=\"child\" />\n            </MetaImpl>,\n        );\n\n        expect(wrapper.find(\"a\").hasClass(\"meta\")).toBeTruthy();\n        expect(wrapper.find(\"a\").hasClass(\"foo\")).toBeTruthy();\n        expect(wrapper.find(\"a\").hasClass(\"child\")).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/base/src/__tests__/DefaultComponentBase.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport ClassNameMetaBase from \"../ClassNameMetaBase\";\nimport DefaultComponentBase from \"../DefaultComponentBase\";\n\ndescribe(\"DefaultComponentBase\", () => {\n    it(\"Should render default component with meta\", () => {\n        class MetaImpl extends ClassNameMetaBase<{}, { bar?: boolean, className?: string }, {}> {\n            protected renderBaseClassName() {\n                return \"foo\";\n            }\n\n            protected renderClassValues() {\n                return [{\n                    bar: this.props.bar,\n                }];\n            }\n        }\n        class Default extends DefaultComponentBase<{}, { bar?: boolean }, {}> {\n            protected getMetaPropNames() {\n                return [\"bar\"];\n            }\n            protected getMetaComponent() {\n                return MetaImpl;\n            }\n            protected getChildComponent() {\n                return \"div\";\n            }\n        }\n\n        const wrapper = enzyme.mount(<Default bar={true} />);\n\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n        expect(wrapper.find(\"div\").hasClass(\"foo\")).toBeTruthy();\n        expect(wrapper.find(\"div\").hasClass(\"bar\")).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/base/src/__tests__/MetaBase.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport MetaBase from \"../MetaBase\";\nimport NativeDOMAdapter from \"../NativeDOMAdapter\";\n\ndescribe(\"MetaBase\", () => {\n    it(\"Should update child's props\", () => {\n        class MetaImpl extends MetaBase<{ href?: string }, { link: string }, {}> {\n            protected renderProps(childProps: { href: string }) {\n                return {\n                    href: this.props.link,\n                };\n            }\n\n            protected renderNativeDOMProps(childProps: { href: string }) {\n                return {};\n            }\n        }\n\n        const wrapper = enzyme.shallow(\n            <MetaImpl link=\"https://www.google.com\">\n                <a />\n            </MetaImpl>,\n        );\n\n        expect(wrapper.equals(\n            <NativeDOMAdapter>\n                <a href=\"https://www.google.com\" />\n            </NativeDOMAdapter>,\n        )).toBeTruthy();\n    });\n\n    it(\"Should update NativeDOMAdapter's props\", () => {\n        class MetaImpl extends MetaBase<{ href?: string }, { link: string, name: string }, {}> {\n            protected renderProps(childProps: { href: string }) {\n                return {\n                    href: this.props.link,\n                };\n            }\n\n            protected renderNativeDOMProps(childProps: { href: string }) {\n                return {\n                    attributes: {\n                        \"data-sitename\": this.props.name,\n                    },\n                };\n            }\n        }\n\n        const wrapper = enzyme.shallow(\n            <MetaImpl link=\"https://www.google.com\" name=\"Google\">\n                <a />\n            </MetaImpl>,\n        );\n\n        expect(wrapper.equals(\n            <NativeDOMAdapter attributes={{ \"data-sitename\": \"Google\" }}>\n                <a href=\"https://www.google.com\" />\n            </NativeDOMAdapter>,\n        )).toBeTruthy();\n    });\n\n    it(\"should overwrite child's props if conflicted\", () => {\n        class MetaImpl extends MetaBase<{ href?: string }, { link: string }, {}> {\n            protected renderProps(childProps: { href: string }) {\n                return {\n                    href: this.props.link,\n                };\n            }\n\n            protected renderNativeDOMProps(childProps: { href: string }) {\n                return {};\n            }\n        }\n\n        const wrapper = enzyme.shallow(\n            <MetaImpl link=\"https://www.google.com\">\n                <a href=\"http://www.naver.com\" />\n            </MetaImpl>,\n        );\n\n        expect(wrapper.equals(\n            <NativeDOMAdapter>\n                <a href=\"https://www.google.com\" />\n            </NativeDOMAdapter>,\n        )).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/base/src/__tests__/NativeDOMAdapter.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport NativeDOMAdapter from \"../NativeDOMAdapter\";\n\ndescribe(\"NativeDOMAdapter\", () => {\n    it(\"Should render native DOM given as child\", () => {\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter>\n                <a />\n            </NativeDOMAdapter>,\n        );\n\n        const node = wrapper.getDOMNode();\n        expect(node.tagName.toLowerCase()).toBe(\"a\");\n    });\n\n    it(\"Should set attributes to DOM\", () => {\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter attributes={{ \"data-link\": \"http://www.daum.net\" }}>\n                <a />\n            </NativeDOMAdapter>,\n        );\n\n        const node = wrapper.getDOMNode();\n        expect(node.getAttribute(\"data-link\")).toBe(\"http://www.daum.net\");\n    });\n\n    it(\"Should unset removed attributes to DOM\", () => {\n        const rootNode = document.createElement(\"div\");\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter attributes={{\n                \"data-link\": \"http://www.daum.net\",\n                \"data-sitename\": \"Daum\",\n            }}>\n                <a />\n            </NativeDOMAdapter>,\n            { attachTo: rootNode },\n        );\n\n        const node = wrapper.getDOMNode();\n        expect(node.getAttribute(\"data-link\")).toBe(\"http://www.daum.net\");\n        expect(node.getAttribute(\"data-sitename\")).toBe(\"Daum\");\n\n        // Update\n        wrapper.setProps({\n            attributes: {\n                \"data-sitename\": \"Daum\",\n            },\n        });\n        expect(node.hasAttribute(\"data-link\")).toBeFalsy();\n        expect(node.getAttribute(\"data-sitename\")).toBe(\"Daum\");\n    });\n\n    /*\n        Many DOM emulators does not support arbitrary CSS property.\n        So we use known css properties for testing instead of\n        CSS variables like `--react-mdc-foo`\n    */\n    it(\"should render css variable into styles\", () => {\n        // Many DOM emulators does not support arbitrary CSS property.\n        // So we use known css properties for testing instead of\n        // CSS variables like `--react-mdc-foo`\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter cssVariables={{\n                display: \"123\",\n            }}>\n                <div />\n            </NativeDOMAdapter>,\n        );\n\n        const node = wrapper.getDOMNode() as HTMLDivElement;\n        expect(node.style.getPropertyValue(\"display\")).toBe(\"123\");\n    });\n\n    it(\"should unset removed css variable from styles\", () => {\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter cssVariables={{\n                display: \"123\",\n                padding: \"0px\",\n            }}>\n                <div />\n            </NativeDOMAdapter>,\n        );\n\n        const node = wrapper.getDOMNode() as HTMLDivElement;\n        expect(node.style.getPropertyValue(\"display\")).toBe(\"123\");\n        expect(node.style.getPropertyValue(\"padding\")).toBe(\"0px\");\n\n        // Update\n        wrapper.setProps({\n            cssVariables: {\n                padding: \"0px\",\n            },\n        });\n        expect(node.style.getPropertyValue(\"padding\")).toBe(\"0px\");\n        expect(node.style.getPropertyValue(\"display\")).toBe(\"\");\n    });\n\n    it(\"should add native event listeners by order\", (done) => {\n        let firstCalled = false;\n        const first = () => {\n            firstCalled = true;\n        };\n        const second = () => {\n            if (!firstCalled) {\n                fail(\"First listener not called!\");\n            } else {\n                done();\n            }\n        };\n\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter eventListeners={{\n                foo: [first, second],\n            }}>\n                <div />\n            </NativeDOMAdapter>,\n        );\n\n        const node = wrapper.getDOMNode() as HTMLDivElement;\n\n        const event = new MouseEvent(\"foo\");\n        node.dispatchEvent(event);\n    });\n\n    it(\"should remove removed native event listeners from node\", (done) => {\n        let firstCalled = false;\n        let secondCalled = false;\n        const first = () => {\n            if (firstCalled) {\n                fail(\"First should not be called twice!\");\n            }\n            firstCalled = true;\n        };\n        const second = () => {\n            if (!firstCalled) {\n                fail(\"First listener not called!\");\n            }\n            if (secondCalled) {\n                done();\n            }\n            secondCalled = true;\n        };\n\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter eventListeners={{\n                foo: [first, second],\n            }}>\n                <div />\n            </NativeDOMAdapter>,\n        );\n\n        const node = wrapper.getDOMNode() as HTMLDivElement;\n\n        node.dispatchEvent(new MouseEvent(\"foo\"));\n\n        wrapper.setProps({\n            eventListeners: {\n                foo: [second],\n            },\n        });\n\n        node.dispatchEvent(new MouseEvent(\"foo\"));\n    });\n\n    it(\"should add known react event listeners by order using props\", (done) => {\n        let firstCalled = false;\n        const first = () => {\n            firstCalled = true;\n        };\n        const second = () => {\n            if (!firstCalled) {\n                fail(\"First listener not called!\");\n            } else {\n                done();\n            }\n        };\n\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter eventListeners={{\n                click: [first, second],\n            }}>\n                <div />\n            </NativeDOMAdapter>,\n        );\n\n        wrapper.simulate(\"click\");\n    });\n\n    it(\"should remove removed known react event listeners from props\", (done) => {\n        let firstCalled = false;\n        let secondCalled = false;\n        const first = () => {\n            if (firstCalled) {\n                fail(\"First should not be called twice!\");\n            }\n            firstCalled = true;\n        };\n        const second = () => {\n            if (!firstCalled) {\n                fail(\"First listener not called!\");\n            }\n            if (secondCalled) {\n                done();\n            }\n            secondCalled = true;\n        };\n\n        const wrapper = enzyme.mount(\n            <NativeDOMAdapter eventListeners={{\n                click: [first, second],\n            }}>\n                <div />\n            </NativeDOMAdapter>,\n        );\n\n        wrapper.simulate(\"click\");\n\n        wrapper.setProps({\n            eventListeners: {\n                click: [second],\n            },\n        });\n\n        wrapper.simulate(\"click\");\n    });\n});\n"
  },
  {
    "path": "packages/base/src/__tests__/util.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport * as util from \"../util\";\n\ndescribe(\"includes()\", () => {\n    it(\"should check existence of item in array\", () => {\n        const array = [2, 4, 6, 8];\n        expect(util.includes(array, 2)).toBe(true);\n        expect(util.includes(array, 3)).toBe(false);\n\n        expect(util.includes(array, 2, (left, right) => {\n            return left % 2 === right % 2;\n        })).toBe(true);\n        expect(util.includes(array, 3, (left, right) => {\n            return left % 2 === right % 2;\n        })).toBe(false);\n    });\n});\n\ndescribe(\"eventHandlerDecorator()\", () => {\n    it(\"should call wrapper after original handler\", (done) => {\n        let called = false;\n\n        function wrapper() {\n            if (called) {\n                done();\n            } else {\n                fail(\"Original handler was not called!\");\n            }\n        }\n\n        function handler() {\n            called = true;\n        }\n\n        const wrapped = util.eventHandlerDecorator(wrapper)(handler);\n\n        const button = enzyme.mount(\n            <button onClick={wrapped} />,\n        );\n\n        if (button == null) {\n            fail(\"Button was not rendered!\");\n            return;\n        }\n        button.simulate(\"click\");\n    });\n\n    it(\"should not call wrapper when default is prevented\", (done) => {\n        function wrapper() {\n            fail(\"It should not be called!\");\n        }\n\n        function handler(e: React.SyntheticEvent<any>) {\n            e.preventDefault();\n        }\n\n        const wrapped = util.eventHandlerDecorator(wrapper)(handler);\n\n        function proxy(e: React.SyntheticEvent<any>) {\n            // We should call `done()` after handler ends.\n            // So we proxy the event.\n            wrapped(e);\n            done();\n        }\n\n        const button = enzyme.mount(\n            <button onClick={proxy} />,\n        );\n\n        if (button == null) {\n            fail(\"Button was not rendered!\");\n            return;\n        }\n\n        button.simulate(\"click\");\n    });\n\n    it(\"should call wrapper even if original handler is a kind of null\", (done) => {\n        function wrapper() {\n            done();\n        }\n\n        const wrapped = util.eventHandlerDecorator(wrapper)(null);\n\n        const button = enzyme.mount(\n            <button onClick={wrapped} />,\n        );\n\n        if (button == null) {\n            fail(\"Button was not rendered!\");\n            return;\n        }\n\n        button.simulate(\"click\");\n    });\n});\n"
  },
  {
    "path": "packages/base/src/event.ts",
    "content": "export const EVENT_MAP = {\n    abort: \"onAbort\",\n    blur: \"onBlur\",\n    canplay: \"onCanPlay\",\n    canplaythrough: \"onCanPlayThrough\",\n    change: \"onChange\",\n    click: \"onClick\",\n    contextmenu: \"onContextMenu\",\n    copy: \"onCopy\",\n    cut: \"onCut\",\n    dblclick: \"onDoubleClick\",\n    drag: \"onDrag\",\n    dragend: \"onDragEnd\",\n    dragenter: \"onDragEnter\",\n    dragleave: \"onDragLeave\",\n    dragover: \"onDragOver\",\n    dragstart: \"onDragStart\",\n    drop: \"onDrop\",\n    durationchange: \"onDurationChange\",\n    emptied: \"onEmptied\",\n    ended: \"onEnded\",\n    error: \"onError\",\n    focus: \"onFocus\",\n    input: \"onInput\",\n    keydown: \"onKeyDown\",\n    keypress: \"onKeyPress\",\n    keyup: \"onKeyUp\",\n    load: \"onLoad\",\n    loadeddata: \"onLoadedData\",\n    loadedmetadata: \"onLoadedMetadata\",\n    loadstart: \"onLoadStart\",\n    mousedown: \"onMouseDown\",\n    mouseenter: \"onMouseEnter\",\n    mouseleave: \"onMouseLeave\",\n    mousemove: \"onMouseMove\",\n    mouseout: \"onMouseOut\",\n    mouseover: \"onMouseOver\",\n    mouseup: \"onMouseUp\",\n    mousewheel: \"onWheel\",\n    paste: \"onPaste\",\n    pause: \"onPause\",\n    play: \"onPlay\",\n    playing: \"onPlaying\",\n    progress: \"onProgress\",\n    ratechange: \"onRateChange\",\n    reset: \"onReset\",\n    scroll: \"onScroll\",\n    seekend: \"onSeeked\",\n    seeking: \"onSeeking\",\n    select: \"onSelect\",\n    stalled: \"onStalled\",\n    submit: \"onSubmit\",\n    suspend: \"onSuspend\",\n    timeupdate: \"onTimeUpdate\",\n    touchcancel: \"onTouchCancel\",\n    touchend: \"onTouchEnd\",\n    touchmove: \"onTouchMove\",\n    touchstart: \"onTouchStart\",\n    volumechange: \"onVolumeChange\",\n    waiting: \"onWaiting\",\n    wheel: \"onWheel\",\n};\n\n/* Not specified\n  \"activate\"\n  \"beforeactivate\"\n  \"beforecopy\"\n  \"beforecut\"\n  \"beforedeactivate\"\n  \"beforepaste\"\n  \"cuechange\"\n  \"deactivate\"\n  \"invalid\"\n  \"selectstart\"\n  \"ariarequest\"\n  \"command\"\n  \"gotpointeCapturer\"\n  \"lostpointeCapturer\"\n  \"webkitfullscreenchange\"\n  \"webkitfullscreenerror\"\n*/\n"
  },
  {
    "path": "packages/base/src/index.tsx",
    "content": "import ClassNameMetaBase from \"./ClassNameMetaBase\";\nimport DefaultComponentBase from \"./DefaultComponentBase\";\nimport MetaBase from \"./MetaBase\";\nimport NativeDOMAdapter from \"./NativeDOMAdapter\";\n\nexport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n    MetaBase,\n    NativeDOMAdapter,\n};\n\nexport default {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n    MetaBase,\n    NativeDOMAdapter,\n};\n"
  },
  {
    "path": "packages/base/src/types.tsx",
    "content": "import * as React from \"react\";\n\nexport type Config = {};\n\nexport type ReactComponent<P> = React.ComponentClass<P> | React.StatelessComponent<P>;\n\nexport type Wrappable<P> = ReactComponent<P> | React.ReactElement<P>;\n"
  },
  {
    "path": "packages/base/src/util.ts",
    "content": "/**\n * Common utilities\n */\nimport * as React from \"react\";\n\n/**\n * Decorate event handler function with default handler.\n * Default handler will not be called when decorated handler prevents default.\n *\n * Example:\n *\n *     let {onClick} = this.props;\n *     onClick = eventHandlerDecorator(this.handleClick)(onClick);\n *\n * @param handler a default event handler.\n *\n * @return event handler decorator with default functionally.\n *         decorated function can be null\n */\nexport function eventHandlerDecorator<T>(defaultHandler: React.ReactEventHandler<T>):\n    (target: React.ReactEventHandler<T> | null) => React.ReactEventHandler<T> {\n    return (handler: React.ReactEventHandler<T> | null)\n        : React.ReactEventHandler<T> => (evt: React.SyntheticEvent<T>) => {\n            if (handler != null) {\n                handler(evt);\n            }\n            if (!evt.isDefaultPrevented()) {\n                defaultHandler(evt);\n            }\n        };\n}\n\n/**\n * Array inclusion tester\n */\nexport function includes<T>(array: T[], item: T, predicate: (left, right) => boolean = (x, y) => x === y): boolean {\n    // tslint:disable:prefer-for-of\n    for (let i = 0; i < array.length; i++) {\n        const itemAtIndex = array[i];\n        if (predicate(item, itemAtIndex)) {\n            return true;\n        }\n    }\n    return false;\n}\n"
  },
  {
    "path": "packages/base/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/base/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/button/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/button/package.json",
    "content": "{\n  \"name\": \"@react-mdc/button\",\n  \"description\": \"React wrapper of @material/button\",\n  \"version\": \"0.1.8\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/button\": \"^0.3.4\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/button/src/Button.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n    PREFIX: CLASS_NAME,\n    DENSE: `${CLASS_NAME}--dense`,\n    RAISED: `${CLASS_NAME}--raised`,\n    COMPACT: `${CLASS_NAME}--compact`,\n    PRIMARY: `${CLASS_NAME}--primary`,\n    ACCENT: `${CLASS_NAME}--accent`,\n};\n\nexport type MetaProps = {\n    dense?: boolean,\n    raised?: boolean,\n    compact?: boolean,\n    primary?: boolean,\n    accent?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues(_childProps: ChildProps) {\n        return [{\n            [propertyClassNames.DENSE]: this.props.dense,\n            [propertyClassNames.RAISED]: this.props.raised,\n            [propertyClassNames.COMPACT]: this.props.compact,\n            [propertyClassNames.PRIMARY]: this.props.primary,\n            [propertyClassNames.ACCENT]: this.props.accent,\n        }];\n    }\n}\n\nexport default class Button extends DefaultComponentBase<React.HTMLProps<HTMLButtonElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"dense\",\n            \"raised\",\n            \"compact\",\n            \"primary\",\n            \"accent\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"button\";\n    }\n}\n"
  },
  {
    "path": "packages/button/src/__tests__/Button.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Button from \"../Button\";\n\ndescribe(\"Button\", () => {\n    it(\"Should have mdc-button classname\", () => {\n        const wrapper = enzyme.mount(<Button />);\n        expect(wrapper.hasClass(\"mdc-button\")).toBeTruthy();\n    });\n\n    it(\"Should have button element as default component\", () => {\n        const wrapper = enzyme.mount(<Button />);\n        expect(wrapper.find(\"button\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Button dense />);\n        expect(wrapper.hasClass(\"mdc-button\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--dense\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Button raised />);\n        expect(wrapper.hasClass(\"mdc-button\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--raised\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Button compact />);\n        expect(wrapper.hasClass(\"mdc-button\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--compact\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Button primary />);\n        expect(wrapper.hasClass(\"mdc-button\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--primary\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Button accent />);\n        expect(wrapper.hasClass(\"mdc-button\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--accent\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Button dense raised compact primary accent />);\n        expect(wrapper.hasClass(\"mdc-button\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--dense\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--raised\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--compact\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--primary\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-button--accent\")).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/button/src/constants.tsx",
    "content": "export const BASE_CLASS_NAME = \"mdc-button\";\n"
  },
  {
    "path": "packages/button/src/index.tsx",
    "content": "export { default } from \"./Button\";\n"
  },
  {
    "path": "packages/button/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/button/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/card/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/card/package.json",
    "content": "{\n  \"name\": \"@react-mdc/card\",\n  \"description\": \"React wrapper of @material/card\",\n  \"version\": \"0.1.9\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/card\": \"^0.1.2\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@react-mdc/button\": \"^0.1.8\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/card/src/Action.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\nimport Button from \"@react-mdc/button\";\nimport {\n    MetaProps as ButtonMetaProps,\n} from \"@react-mdc/button/lib/Button\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__action`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\n// Button with compact as default\nfunction CompactButton(props: React.HTMLProps<HTMLButtonElement> & ButtonMetaProps) {\n    return React.createElement(Button, {\n        compact: true,\n        ...props,\n    });\n}\n\nexport default class Action\n    extends DefaultComponentBase<React.HTMLProps<HTMLButtonElement> & ButtonMetaProps, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent(): React.SFC<React.HTMLProps<HTMLButtonElement> & ButtonMetaProps> {\n        return CompactButton;\n    }\n}\n"
  },
  {
    "path": "packages/card/src/Actions.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__actions`;\n\nexport const propertyClassNames = {\n    VERTICAL: `${CLASS_NAME}--vertical`,\n};\n\nexport type MetaProps = {\n    vertical?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.VERTICAL]: this.props.vertical,\n        }];\n    }\n}\n\nexport default class Actions extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"vertical\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"section\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n  BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n  DARK: `${CLASS_NAME}--theme-dark`,\n};\n\nexport type MetaProps = {\n    dark?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Card component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.DARK]: this.props.dark,\n        }];\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"dark\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/HorizontalBlock.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__horizontal-block`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Horizontal block section component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport type Props = React.HTMLProps<HTMLDivElement> & MetaProps;\n\nexport default class HorizontalBlock extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/Media.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__media`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Media section component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Media extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"section\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/MediaItem.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__media-item`;\n\nexport type Size = 1.5 | 2 | 3;\n\nexport function classNameForSize(size: Size): string {\n    switch (size) {\n        case 1.5:\n            return `${CLASS_NAME}--1dot5x`;\n        case 2:\n            return `${CLASS_NAME}--2x`;\n        case 3:\n            return `${CLASS_NAME}--3x`;\n        default:\n            throw new TypeError(`Invalid size: ${size}`);\n    }\n}\n\nexport type MetaProps = {\n    size?: Size,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Media item component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [\n            this.props.size == null ? null : classNameForSize(this.props.size),\n        ];\n    }\n}\n\nexport default class MediaItem extends DefaultComponentBase<React.HTMLProps<HTMLImageElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"size\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"img\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/Primary.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__primary`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Primary section component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Primary extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"section\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/Subtitle.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__subtitle`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Primary section subtitle component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Subtitle extends DefaultComponentBase<React.HTMLProps<HTMLHeadingElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"h2\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/SupportingText.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__supporting-text`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Supporting text section component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class SupportingText extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"section\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/Title.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__title`;\n\nexport const propertyClassNames = {\n    LARGE: `${CLASS_NAME}--large`,\n};\n\nexport type MetaProps = {\n    large?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Primary section title component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    public static defaultProps = {\n        large: false,\n    };\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.LARGE]: this.props.large,\n        }];\n    }\n}\n\nexport default class Title extends DefaultComponentBase<React.HTMLProps<HTMLHeadingElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"large\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"h1\";\n    }\n}\n"
  },
  {
    "path": "packages/card/src/__tests__/Action.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Action from \"../Action\";\n\ndescribe(\"Action\", () => {\n    it(\"Should have mdc-card__action classname\", () => {\n        const wrapper = enzyme.mount(<Action />);\n        expect(wrapper.hasClass(\"mdc-card__action\")).toBeTruthy();\n    });\n\n    it(\"Should have button element as default component\", () => {\n        const wrapper = enzyme.mount(<Action />);\n        expect(wrapper.find(\"button\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/Actions.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Actions from \"../Actions\";\n\ndescribe(\"Actions\", () => {\n    it(\"Should have mdc-card__actions classname\", () => {\n        const wrapper = enzyme.mount(<Actions />);\n        expect(wrapper.hasClass(\"mdc-card__actions\")).toBeTruthy();\n    });\n\n    it(\"Should have section element as default component\", () => {\n        const wrapper = enzyme.mount(<Actions />);\n        expect(wrapper.find(\"section\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Actions vertical />);\n        expect(wrapper.hasClass(\"mdc-card__actions\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card__actions--vertical\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Actions />);\n        expect(wrapper.hasClass(\"mdc-card__actions\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card__actions--vertical\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-card classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-card\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Container dark />);\n        expect(wrapper.hasClass(\"mdc-card\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card--theme-dark\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-card\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card--theme-dark\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/HorizontalBlock.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport HorizontalBlock from \"../HorizontalBlock\";\n\ndescribe(\"HorizontalBlock\", () => {\n    it(\"Should have mdc-card__horizontal-block classname\", () => {\n        const wrapper = enzyme.mount(<HorizontalBlock />);\n        expect(wrapper.hasClass(\"mdc-card__horizontal-block\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<HorizontalBlock />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/Media.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Media from \"../Media\";\n\ndescribe(\"Media\", () => {\n    it(\"Should have mdc-card__media classname\", () => {\n        const wrapper = enzyme.mount(<Media />);\n        expect(wrapper.hasClass(\"mdc-card__media\")).toBeTruthy();\n    });\n\n    it(\"Should have section element as default component\", () => {\n        const wrapper = enzyme.mount(<Media />);\n        expect(wrapper.find(\"section\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/MediaItem.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport MediaItem from \"../MediaItem\";\n\ndescribe(\"MediaItem\", () => {\n    it(\"Should have mdc-card__media-item classname\", () => {\n        const wrapper = enzyme.mount(<MediaItem />);\n        expect(wrapper.hasClass(\"mdc-card__media-item\")).toBeTruthy();\n    });\n\n    it(\"Should have img element as default component\", () => {\n        const wrapper = enzyme.mount(<MediaItem />);\n        expect(wrapper.find(\"img\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<MediaItem size={1.5} />);\n        expect(wrapper.hasClass(\"mdc-card__media-item\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card__media-item--1dot5x\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<MediaItem size={2} />);\n        expect(wrapper.hasClass(\"mdc-card__media-item\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card__media-item--2x\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<MediaItem size={3} />);\n        expect(wrapper.hasClass(\"mdc-card__media-item\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card__media-item--3x\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<MediaItem />);\n        expect(wrapper.hasClass(\"mdc-card__media-item\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card__media-item--1dot5x\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-card__media-item--2x\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-card__media-item--3x\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/Primary.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Primary from \"../Primary\";\n\ndescribe(\"Primary\", () => {\n    it(\"Should have mdc-card__primary classname\", () => {\n        const wrapper = enzyme.mount(<Primary />);\n        expect(wrapper.hasClass(\"mdc-card__primary\")).toBeTruthy();\n    });\n\n    it(\"Should have section element as default component\", () => {\n        const wrapper = enzyme.mount(<Primary />);\n        expect(wrapper.find(\"section\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/Subtitle.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Subtitle from \"../Subtitle\";\n\ndescribe(\"Subtitle\", () => {\n    it(\"Should have mdc-card__subtitle classname\", () => {\n        const wrapper = enzyme.mount(<Subtitle />);\n        expect(wrapper.hasClass(\"mdc-card__subtitle\")).toBeTruthy();\n    });\n\n    it(\"Should have h2 element as default component\", () => {\n        const wrapper = enzyme.mount(<Subtitle />);\n        expect(wrapper.find(\"h2\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/SupportingText.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport SupportingText from \"../SupportingText\";\n\ndescribe(\"SupportingText\", () => {\n    it(\"Should have mdc-card__supporting-text classname\", () => {\n        const wrapper = enzyme.mount(<SupportingText />);\n        expect(wrapper.hasClass(\"mdc-card__supporting-text\")).toBeTruthy();\n    });\n\n    it(\"Should have section element as default component\", () => {\n        const wrapper = enzyme.mount(<SupportingText />);\n        expect(wrapper.find(\"section\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/__tests__/Title.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Title from \"../Title\";\n\ndescribe(\"Title\", () => {\n    it(\"Should have mdc-card__title classname\", () => {\n        const wrapper = enzyme.mount(<Title />);\n        expect(wrapper.hasClass(\"mdc-card__title\")).toBeTruthy();\n    });\n\n    it(\"Should have h1 element as default component\", () => {\n        const wrapper = enzyme.mount(<Title />);\n        expect(wrapper.find(\"h1\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Title large />);\n        expect(wrapper.hasClass(\"mdc-card__title\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card__title--large\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Title />);\n        expect(wrapper.hasClass(\"mdc-card__title\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-card__title--large\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/card/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-card\";\n"
  },
  {
    "path": "packages/card/src/index.ts",
    "content": "import Action from \"./Action\";\nimport Actions from \"./Actions\";\nimport Container from \"./Container\";\nimport HorizontalBlock from \"./HorizontalBlock\";\nimport Media from \"./Media\";\nimport MediaItem from \"./MediaItem\";\nimport Primary from \"./Primary\";\nimport Subtitle from \"./Subtitle\";\nimport SupportingText from \"./SupportingText\";\nimport Title from \"./Title\";\n\nexport default class Card extends Container {\n    public static Action = Action;\n    public static Actions = Actions;\n    public static HorizontalBlock = HorizontalBlock;\n    public static Media = Media;\n    public static MediaItem = MediaItem;\n    public static Primary = Primary;\n    public static Subtitle = Subtitle;\n    public static SupportingText = SupportingText;\n    public static Title = Title;\n}\n"
  },
  {
    "path": "packages/card/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/card/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/checkbox/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/checkbox/package.json",
    "content": "{\n  \"name\": \"@react-mdc/checkbox\",\n  \"description\": \"React wrapper of @material/checkbox\",\n  \"version\": \"0.1.12\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/checkbox\": \"^0.3.2\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/prop-types\": \"^15.5.1\",\n    \"@types/react\": \"^15.0.18\",\n    \"@types/react-dom\": \"^0.14.23\",\n    \"classnames\": \"^2.2.5\",\n    \"immutable\": \"^3.8.1\",\n    \"prop-types\": \"^15.5.8\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/checkbox/src/Background.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__background`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Background extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/checkbox/src/Checkmark.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__checkmark`;\nexport const PATH_CLASS_NAME = `${CLASS_NAME}__path`;\n\n/**\n * Checkbox checkmark svg component\n */\nexport default class Checkmark extends React.Component<{}, {}> {\n    public render() {\n        return (\n            <svg version=\"1.1\"\n                className={CLASS_NAME}\n                xmlns=\"http://www.w3.org/2000/svg\"\n                viewBox=\"0 0 24 24\"\n                xmlSpace=\"preserve\">\n                <path className={PATH_CLASS_NAME}\n                    fill=\"none\"\n                    stroke=\"white\"\n                    d=\"M1.73,12.91 8.1,19.28 22.79,4.59\" />\n            </svg>\n        );\n    }\n}\n"
  },
  {
    "path": "packages/checkbox/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport { getCorrectEventName } from \"@material/animation/dist/mdc.animation\";\nimport { MDCCheckboxFoundation } from \"@material/checkbox/dist/mdc.checkbox\";\n\nimport {\n    Map,\n    OrderedSet,\n    Set,\n} from \"immutable\";\nimport * as PropTypes from \"prop-types\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { ContainerAdapter, FoundationAdapter } from \"./adapter\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    checked?: boolean,\n    disabled?: boolean,\n    indeterminate?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type State = {\n    foundationClasses: Set<string>,\n    foundationEventListeners: Map<string, Set<EventListener>>,\n};\n\nexport type ChildContext = {\n    adapter: FoundationAdapter,\n};\n\n/**\n * Checkbox input container component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static childContextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter),\n    };\n\n    public state: State = {\n        foundationClasses: OrderedSet<string>(),\n        foundationEventListeners: Map<string, Set<EventListener>>(),\n    };\n\n    private adapter: FoundationAdapter;\n    private foundation: MDCCheckboxFoundation;\n\n    constructor(props) {\n        super(props);\n        this.adapter = new FoundationAdapter();\n        this.foundation = new MDCCheckboxFoundation(this.adapter.toObject());\n    }\n\n    public getChildContext(): ChildContext {\n        return {\n            adapter: this.adapter,\n        };\n    }\n\n    // Foundation lifecycle\n    public componentDidMount() {\n        this.adapter.setContainerAdapter(new ContainerAdapterImpl(this));\n        this.foundation.init();\n        this.adapter.setDefaultOnChangeHandler(this.handleChange);\n        if (this.props.checked != null) {\n            this.foundation.setChecked(this.props.checked);\n        }\n        if (this.props.disabled != null) {\n            this.foundation.setDisabled(this.props.disabled);\n        }\n    }\n\n    public componentWillUnmount() {\n        this.foundation.destroy();\n        this.adapter.setContainerAdapter(new ContainerAdapter());\n    }\n\n    // Sync props and internal state\n    public componentWillReceiveProps(props: MetaProps) {\n        this.syncFoundation(props);\n    }\n\n    protected renderNativeDOMProps() {\n        return {\n            eventListeners: this.state.foundationEventListeners.toJS(),\n        };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [\n            this.state.foundationClasses.toJS(),\n        ];\n    }\n\n    private syncFoundation(props: MetaProps) {\n        if (props.checked != null && this.foundation.isChecked() !== this.props.checked) {\n            this.foundation.setChecked(props.checked);\n        }\n        if (props.disabled != null && this.foundation.isDisabled() !== this.props.disabled) {\n            this.foundation.setDisabled(props.disabled);\n        }\n        if (props.indeterminate != null && this.foundation.isIndeterminate() !== this.props.indeterminate) {\n            this.foundation.setIndeterminate(props.indeterminate);\n        }\n    }\n\n    // Event handler\n    private handleChange: React.ChangeEventHandler<any> = (_evt: React.ChangeEvent<any>) => {\n        if (this.props.checked != null) {\n            if (this.foundation.isChecked() !== this.props.checked) {\n                // Checked state should not be changed by foundation\n                this.foundation.setChecked(this.props.checked);\n            }\n        }\n    }\n}\n\nclass ContainerAdapterImpl extends ContainerAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n    public addClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.add(className),\n        }));\n    }\n    public removeClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.remove(className),\n        }));\n    }\n    public registerAnimationEndHandler(handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                getCorrectEventName(window, \"animationend\"),\n                OrderedSet<EventListener>(),\n                (x) => x.add(handler),\n            ),\n        }));\n    }\n    public deregisterAnimationEndHandler(handler: EventListener) {\n        const evt = getCorrectEventName(window, \"animationend\");\n        if (this.element.state.foundationEventListeners.get(evt).includes(handler)) {\n            this.element.setState((state) => ({\n                foundationEventListeners: state.foundationEventListeners.delete(evt),\n            }));\n        }\n    }\n    public forceLayout() {\n        /* no-op */\n    }\n    public isAttachedToDOM(): boolean {\n        // Always true. Because we initialize foundation on componentDidMount\n        return true;\n    }\n    public isChecked(): boolean | null {\n        return this.element.props.checked || null;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"checked\",\n            \"disabled\",\n            \"indeterminate\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/checkbox/src/Default.tsx",
    "content": "import * as React from \"react\";\n\nimport Background from \"./Background\";\nimport Checkmark from \"./Checkmark\";\nimport Container from \"./Container\";\nimport Mixedmark from \"./Mixedmark\";\nimport NativeControl from \"./NativeControl\";\n\nexport type Props = {\n    inputId?: string,\n    name?: string,\n    value?: any,\n    onChange?: React.FormEventHandler<HTMLInputElement>,\n    checked?: boolean,\n    disabled?: boolean,\n    indeterminate?: boolean,\n    defaultChecked?: boolean,\n};\n\n/**\n * Checkbox default composed component\n */\nexport default class Default extends React.Component<Props, {}> {\n    public render() {\n        const {\n            inputId,\n            name,\n            value,\n            onChange,\n            checked,\n            disabled,\n            indeterminate,\n            defaultChecked,\n            children: _children, // Ignore children\n            ...props,\n        } = this.props;\n        return (\n            <Container\n                disabled={disabled}\n                checked={checked}\n                indeterminate={indeterminate}\n                {...props}>\n                <NativeControl\n                    id={inputId}\n                    name={name}\n                    onChange={onChange}\n                    checked={checked}\n                    defaultChecked={defaultChecked}\n                    value={value} />\n                <Background>\n                    <Checkmark />\n                    <Mixedmark />\n                </Background>\n            </Container>\n        );\n    }\n}\n"
  },
  {
    "path": "packages/checkbox/src/Mixedmark.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__mixedmark`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Mixedmark extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/checkbox/src/NativeControl.tsx",
    "content": "import * as PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport {\n    Map,\n    OrderedSet,\n    Set,\n} from \"immutable\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { eventHandlerDecorator } from \"@react-mdc/base/lib/util\";\n\nimport { FoundationAdapter, NativeControlAdapter } from \"./adapter\";\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__native-control`;\n\nexport type MetaProps = {\n    onChange?: React.FormEventHandler<ChildProps>,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n    checked?: boolean,\n};\n\nexport type State = {\n    foundationEventListeners: Map<string, Set<EventListener>>,\n};\n\nexport type Context = {\n    adapter: FoundationAdapter,\n};\n\n/**\n * Checkbox input component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static contextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter).isRequired,\n    };\n\n    public context: Context;\n\n    public state = {\n        foundationEventListeners: Map<string, Set<EventListener>>(),\n    };\n\n    public defaultOnChange: React.ChangeEventHandler<any> = () => { };\n\n    public componentDidMount() {\n        this.context.adapter.setNativeControlAdapter(new NativeControlAdapterImpl(this));\n    }\n\n    public componentWillUnmount() {\n        this.context.adapter.setNativeControlAdapter(new NativeControlAdapter());\n    }\n\n    protected renderNativeDOMProps() {\n        return {\n            eventListeners: this.state.foundationEventListeners.toJS(),\n        };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderProps(childProps: ChildProps) {\n        const {\n            onChange,\n        } = this.props;\n\n        return {\n            ...super.renderProps(childProps),\n            onChange: (eventHandlerDecorator(this.handleChange)(onChange || null) as React.ChangeEventHandler<any>),\n            checked: this.context.adapter.isChecked() || undefined,\n        };\n    }\n\n    private handleChange = (evt: React.ChangeEvent<any>) => {\n        this.defaultOnChange(evt);\n    }\n}\n\nclass NativeControlAdapterImpl extends NativeControlAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n\n    public registerChangeHandler(handler: EventListener) {\n        this.element.setState((state: State) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                \"change\",\n                OrderedSet<EventListener>(),\n                (x) => x.add(handler),\n            ),\n        }));\n    }\n    public deregisterChangeHandler(handler: EventListener) {\n        this.element.setState((state: State) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                \"change\",\n                OrderedSet<EventListener>(),\n                (x) => x.delete(handler),\n            ),\n        }));\n    }\n    public getNativeControl(): Element | null {\n        return ReactDOM.findDOMNode(this.element);\n    }\n    public setDefaultOnChangeHandler(handler: React.ChangeEventHandler<any>) {\n        this.element.defaultOnChange = handler;\n    }\n}\n\n// Input with type=\"checkbox\" as default\nfunction CheckboxInput(props: React.HTMLProps<HTMLInputElement>) {\n    return (\n        <input type=\"checkbox\" {...props} />\n    );\n}\n\nexport type Props = React.HTMLProps<HTMLButtonElement> & MetaProps;\n\nexport default class NativeControl extends DefaultComponentBase<React.HTMLProps<HTMLInputElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"onChange\",\n        ];\n    }\n\n    protected getChildComponent(): React.SFC<React.HTMLProps<HTMLInputElement>> {\n        return CheckboxInput;\n    }\n}\n"
  },
  {
    "path": "packages/checkbox/src/__tests__/Background.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Background from \"../Background\";\n\ndescribe(\"Background\", () => {\n    it(\"Should have mdc-checkbox__background classname\", () => {\n        const wrapper = enzyme.mount(<Background />);\n        expect(wrapper.hasClass(\"mdc-checkbox__background\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Background />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/checkbox/src/__tests__/Checkmark.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Checkmark from \"../Checkmark\";\n\ndescribe(\"Checkmark\", () => {\n    it(\"Should render checkmark SVG\", () => {\n        const wrapper = enzyme.shallow(<Checkmark />);\n        expect(wrapper.find(\"svg\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/checkbox/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-checkbox classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-checkbox\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/checkbox/src/__tests__/Default.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Background from \"../Background\";\nimport Checkmark from \"../Checkmark\";\nimport Container from \"../Container\";\nimport Default from \"../Default\";\nimport Mixedmark from \"../Mixedmark\";\nimport NativeControl from \"../NativeControl\";\n\ndescribe(\"Default\", () => {\n    it(\"Should render common component composition\", () => {\n        const wrapper = enzyme.shallow(<Default />);\n        expect(wrapper.find(Background).exists()).toBeTruthy();\n        expect(wrapper.find(Checkmark).exists()).toBeTruthy();\n        expect(wrapper.find(Container).exists()).toBeTruthy();\n        expect(wrapper.find(Mixedmark).exists()).toBeTruthy();\n        expect(wrapper.find(NativeControl).exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/checkbox/src/__tests__/Mixedmark.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Mixedmark from \"../Mixedmark\";\n\ndescribe(\"Mixedmark\", () => {\n    it(\"Should have mdc-checkbox__mixedmark classname\", () => {\n        const wrapper = enzyme.mount(<Mixedmark />);\n        expect(wrapper.hasClass(\"mdc-checkbox__mixedmark\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Mixedmark />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/checkbox/src/__tests__/NativeControl.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\nimport * as PropTypes from \"prop-types\";\n\nimport { FoundationAdapter } from \"../adapter\";\nimport NativeControl from \"../NativeControl\";\n\ndescribe(\"NativeControl\", () => {\n    it(\"Should have mdc-checkbox__native-control classname\", () => {\n        const wrapper = enzyme.mount(<NativeControl />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.hasClass(\"mdc-checkbox__native-control\")).toBeTruthy();\n    });\n\n    it(\"Should have input element as default component\", () => {\n        const wrapper = enzyme.mount(<NativeControl />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.find(\"input\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/checkbox/src/__tests__/adapter.spec.ts",
    "content": "import \"jest\";\n\nimport {\n    ContainerAdapter,\n    FoundationAdapter,\n    NativeControlAdapter,\n} from \"../adapter\";\n\ndescribe(\"ContainerAdapter\", () => {\n    // TODO: Add adapter tests\n    it(\"Should have at least one test\", () => {\n    });\n});\n\ndescribe(\"FoundationAdapter\", () => {\n    // TODO: Add adapter tests\n});\n\ndescribe(\"NativeControlAdapter\", () => {\n    // TODO: Add adapter tests\n});\n"
  },
  {
    "path": "packages/checkbox/src/adapter.ts",
    "content": "/**\n * Foundation adapters.\n */\n\n/**\n * Container adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class ContainerAdapter {\n  public addClass(_className: string) {\n  }\n  public removeClass(_className: string) {\n  }\n  public registerAnimationEndHandler(_handler: EventListener) {\n  }\n  public deregisterAnimationEndHandler(_handler: EventListener) {\n  }\n  public forceLayout() {\n  }\n  public isAttachedToDOM(): boolean {\n    return false;\n  }\n  public isChecked(): boolean | null {\n    return null;\n  }\n}\n\n/**\n * Native control adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class NativeControlAdapter {\n  public registerChangeHandler(_handler: EventListener) {\n  }\n  public deregisterChangeHandler(_handler: EventListener) {\n  }\n  public getNativeControl(): Element| null {\n    return null;\n  }\n  public setDefaultOnChangeHandler(_onChange: React.ChangeEventHandler<any>) {\n  }\n}\n\n/**\n * Composite adapter for MDCChcekboxFoundation\n */\nexport class FoundationAdapter {\n  private containerAdapter: ContainerAdapter;\n  private nativeControlAdapter: NativeControlAdapter;\n  private defaultOnchangeHandler: React.ChangeEventHandler<any>;\n\n  constructor() {\n    this.containerAdapter = new ContainerAdapter();\n    this.nativeControlAdapter = new NativeControlAdapter();\n    this.defaultOnchangeHandler = () => {};\n  }\n\n  public setContainerAdapter(containerAdapter: ContainerAdapter) {\n    this.containerAdapter = containerAdapter;\n  }\n  public setNativeControlAdapter(nativeControlAdapter: NativeControlAdapter) {\n    this.nativeControlAdapter = nativeControlAdapter;\n    this.nativeControlAdapter.setDefaultOnChangeHandler(this.defaultOnchangeHandler);\n  }\n  public addClass(className: string) {\n    this.containerAdapter.addClass(className);\n  }\n  public removeClass(className: string) {\n    this.containerAdapter.removeClass(className);\n  }\n  public registerAnimationEndHandler(handler: EventListener) {\n    this.containerAdapter.registerAnimationEndHandler(handler);\n  }\n  public deregisterAnimationEndHandler(handler: EventListener) {\n    this.containerAdapter.deregisterAnimationEndHandler(handler);\n  }\n  public registerChangeHandler(handler: EventListener) {\n    this.nativeControlAdapter.registerChangeHandler(handler);\n  }\n  public deregisterChangeHandler(handler: EventListener) {\n    this.nativeControlAdapter.deregisterChangeHandler(handler);\n  }\n  public getNativeControl(): Element | null {\n    return this.nativeControlAdapter.getNativeControl();\n  }\n  public forceLayout() {\n    this.containerAdapter.forceLayout();\n  }\n  public isAttachedToDOM(): boolean {\n    return this.containerAdapter.isAttachedToDOM();\n  }\n  public setDefaultOnChangeHandler(onChange: React.ChangeEventHandler<any>) {\n    this.nativeControlAdapter.setDefaultOnChangeHandler(onChange);\n  }\n  public isChecked(): boolean | null {\n    return this.containerAdapter.isChecked();\n  }\n  /**\n   * MDCFoundation accepts only object as adapter\n   * So we create object-proxy of instance.\n   */\n  public toObject(): {} {\n    const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(this));\n    const object = {};\n    keys.forEach((key: string) => {\n      object[key] = (...args) => this[key](...args);\n    });\n    return object;\n  }\n}\n"
  },
  {
    "path": "packages/checkbox/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-checkbox\";\n"
  },
  {
    "path": "packages/checkbox/src/index.ts",
    "content": "import Background from \"./Background\";\nimport Checkmark from \"./Checkmark\";\nimport Container from \"./Container\";\nimport Default from \"./Default\";\nimport Mixedmark from \"./Mixedmark\";\nimport NativeControl from \"./NativeControl\";\n\nexport default class Checkbox extends Container {\n    public static Background = Background;\n    public static Checkmark = Checkmark;\n    public static Container = Container;\n    public static Default = Default;\n    public static Mixedmark = Mixedmark;\n    public static NativeControl = NativeControl;\n}\n"
  },
  {
    "path": "packages/checkbox/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/checkbox/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/dialog/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/dialog/package.json",
    "content": "{\n  \"name\": \"@react-mdc/dialog\",\n  \"description\": \"React wrapper of @material/dialog\",\n  \"version\": \"0.1.7\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/dialog\": \"^0.2.1\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@react-mdc/button\": \"^0.1.8\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/prop-types\": \"^15.5.1\",\n    \"@types/react\": \"^15.0.18\",\n    \"@types/react-dom\": \"^0.14.23\",\n    \"classnames\": \"^2.2.5\",\n    \"immutable\": \"^3.8.1\",\n    \"prop-types\": \"^15.5.8\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/dialog/src/Backdrop.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n  BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__backdrop`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Backdrop component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Backdrop extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/Body.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__body`;\n\nexport type MetaProps = {\n    scrollable?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport const propertyClassNames = {\n    SCROLLABLE: `${CLASS_NAME}--scrollable`,\n};\n\n/**\n * Header title component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.SCROLLABLE]: this.props.scrollable,\n        }];\n    }\n}\n\nexport default class Body extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"scrollable\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"section\";\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\nimport * as PropTypes from \"prop-types\";\n\nimport { MDCDialogFoundation } from \"@material/dialog/dist/mdc.dialog\";\nimport {\n    Map,\n    OrderedSet,\n    Set,\n} from \"immutable\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\nimport { includes } from \"@react-mdc/base/lib/util\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nimport { ContainerAdapter, FoundationAdapter } from \"./adapter\";\n\nconst {\n    cssClasses: {\n        OPEN: OPEN_CLASS_NAME,\n    },\n} = MDCDialogFoundation;\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n    DARK: `${CLASS_NAME}--theme-dark`,\n};\n\nexport type MetaProps = {\n    dark?: boolean,\n    open?: boolean,\n    onAccept?: (element: Meta) => void,\n    onOpen?: (element: Meta) => void,\n    onCancel?: (element: Meta) => void,\n    onClose?: (element: Meta) => void,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type State = {\n    foundationClasses: Set<string>,\n    foundationEventListeners: Map<string, Set<EventListener>>,\n    foundationAttributes: Map<string, string>,\n    open: boolean,\n};\n\nexport type ChildContext = {\n    adapter: FoundationAdapter,\n};\n\n/**\n * Dialog component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static displayName = \"Container\";\n\n    public static childContextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter),\n    };\n\n    public state: State = {\n        foundationClasses: OrderedSet<string>(),\n        foundationAttributes: Map<string, string>(),\n        foundationEventListeners: Map<string, Set<EventListener>>(),\n        open: false,\n    };\n\n    private adapter: FoundationAdapter;\n    private foundation: MDCDialogFoundation;\n\n    constructor(props) {\n        super(props);\n        this.adapter = new FoundationAdapter();\n        this.foundation = new MDCDialogFoundation(this.adapter.toObject());\n    }\n\n    public getChildContext(): ChildContext {\n        return {\n            adapter: this.adapter,\n        };\n    }\n\n    // Sync props and internal state\n    public componentWillReceiveProps(props: MetaProps) {\n        if ((!!props.open) !== (!!this.state.open)) {\n            if (props.open) {\n                this.foundation.open();\n            } else {\n                this.foundation.close();\n            }\n        }\n    }\n\n    // Foundation lifecycle\n    public componentDidMount() {\n        this.adapter.setContainerAdapter(new ContainerAdapterImpl(this));\n        this.foundation.init();\n    }\n\n    public componentWillUnmount() {\n        this.foundation.destroy();\n        this.adapter.setContainerAdapter(new ContainerAdapter());\n    }\n\n    /* Public APIs */\n\n    public accept(notifyChange: boolean = false) {\n        this.foundation.accept(notifyChange);\n    }\n\n    public cancel(notifyChange: boolean = false) {\n        this.foundation.cancel(notifyChange);\n    }\n\n    public getClassName(props: MetaProps, state: State): string {\n        return classNames(\n            CLASS_NAME,\n            {\n                [propertyClassNames.DARK]: this.props.dark,\n            },\n            state.foundationClasses.toJS(),\n        );\n    }\n\n    protected renderNativeDOMProps() {\n        return {\n            attributes: this.state.foundationAttributes.toJS(),\n            eventListeners: this.state.foundationEventListeners.toJS(),\n        };\n    }\n\n    protected renderClassValues() {\n        return [this.getClassName(this.props, this.state)];\n    }\n}\n\nclass ContainerAdapterImpl extends ContainerAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n\n    public hasClass(className: string): boolean {\n        return includes(\n            this.element.getClassName(this.element.props, this.element.state).split(/\\s+/),\n            className,\n        );\n    }\n    public addClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.add(className),\n        }));\n\n        // MDCDialog does not provide opening/closing event.\n        // But we can assume open/close by adding/removing OPEN_CLASS_NAME\n        if (className === OPEN_CLASS_NAME) {\n            this.element.setState({\n                open: true,\n            });\n            if (this.element.props.onOpen) {\n                this.element.props.onOpen(this.element);\n            }\n        }\n    }\n    public removeClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.remove(className),\n        }));\n\n        // MDCDialog does not provide opening/closing event.\n        // But we can assume open/close by adding/removing OPEN_CLASS_NAME\n        if (className === OPEN_CLASS_NAME) {\n            this.element.setState({\n                open: false,\n            });\n            if (this.element.props.onClose) {\n                this.element.props.onClose(this.element);\n            }\n        }\n    }\n    public setAttr(attr: string, val: string) {\n        this.element.setState((state) => ({\n            foundationAttributes: state.foundationAttributes.set(attr, val),\n        }));\n    }\n    public registerInteractionHandler(evt: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                evt,\n                OrderedSet<EventListener>(),\n                (x) => x.add(handler),\n            ),\n        }));\n    }\n    public deregisterInteractionHandler(evt: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                evt,\n                OrderedSet<EventListener>(),\n                (x) => x.delete(handler),\n            ),\n        }));\n    }\n    public notifyAccept() {\n        if (this.element.props.onAccept != null) {\n            this.element.props.onAccept(this.element);\n        }\n    }\n    public notifyCancel() {\n        if (this.element.props.onCancel != null) {\n            this.element.props.onCancel(this.element);\n        }\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"dark\",\n            \"open\",\n            \"onAccept\",\n            \"onCancel\",\n            \"onOpen\",\n            \"onClose\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"aside\";\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/Footer/Button.tsx",
    "content": "import {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport MDCButton from \"@react-mdc/button\";\nimport { MetaProps as MDCButtonMetaProps } from \"@react-mdc/button/lib/Button\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__button`;\n\nexport type MetaProps = {\n    type: \"accept\" | \"cancel\",\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport const propertyClassNames = {\n    TYPE_ACCEPT: `${CLASS_NAME}--accept`,\n    TYPE_CANCEL: `${CLASS_NAME}--cancel`,\n};\n\n/**\n * Button component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.TYPE_ACCEPT]: this.props.type === \"accept\",\n            [propertyClassNames.TYPE_CANCEL]: this.props.type === \"cancel\",\n        }];\n    }\n}\n\nexport default class Button\n    extends DefaultComponentBase<React.HTMLProps<HTMLButtonElement> & MDCButtonMetaProps, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"type\",\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return MDCButton;\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/Footer/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n  BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Footer component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport type Props = React.HTMLProps<HTMLElement> & MetaProps;\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"footer\";\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/Footer/__tests__/Button.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Button from \"../Button\";\n\ndescribe(\"Button\", () => {\n    it(\"Should have mdc-dialog__footer__button classname\", () => {\n        const wrapper = enzyme.mount(<Button type=\"accept\" />);\n        expect(wrapper.hasClass(\"mdc-dialog__footer__button\")).toBeTruthy();\n    });\n\n    it(\"Should have button element as default component\", () => {\n        const wrapper = enzyme.mount(<Button type=\"cancel\" />);\n        expect(wrapper.find(\"button\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Button type=\"accept\" />);\n        expect(wrapper.hasClass(\"mdc-dialog__footer__button\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-dialog__footer__button--accept\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-dialog__footer__button--cancel\")).toBeFalsy();\n\n        wrapper = enzyme.mount(<Button type=\"cancel\" />);\n        expect(wrapper.hasClass(\"mdc-dialog__footer__button\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-dialog__footer__button--accept\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-dialog__footer__button--cancel\")).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/dialog/src/Footer/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-dialog__footer classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-dialog__footer\")).toBeTruthy();\n    });\n\n    it(\"Should have footer element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"footer\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/dialog/src/Footer/constants.ts",
    "content": "import { BASE_CLASS_NAME as PARENT_BASE_CLASS_NAME } from \"../constants\";\n\nexport const BASE_CLASS_NAME = `${PARENT_BASE_CLASS_NAME}__footer`;\n"
  },
  {
    "path": "packages/dialog/src/Footer/index.ts",
    "content": "import Button from \"./Button\";\nimport Container from \"./Container\";\n\nexport default class Footer extends Container {\n    public static Button = Button;\n}\n"
  },
  {
    "path": "packages/dialog/src/Header/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n  BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Header component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"header\";\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/Header/Title.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n  BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__title`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Header title component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Title extends DefaultComponentBase<React.HTMLProps<HTMLHeadingElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"h2\";\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/Header/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-dialog__header classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-dialog__header\")).toBeTruthy();\n    });\n\n    it(\"Should have header element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"header\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/dialog/src/Header/__tests__/Title.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Title from \"../Title\";\n\ndescribe(\"Title\", () => {\n    it(\"Should have mdc-dialog__header__title classname\", () => {\n        const wrapper = enzyme.mount(<Title type=\"accept\" />);\n        expect(wrapper.hasClass(\"mdc-dialog__header__title\")).toBeTruthy();\n    });\n\n    it(\"Should have h2 element as default component\", () => {\n        const wrapper = enzyme.mount(<Title type=\"cancel\" />);\n        expect(wrapper.find(\"h2\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/dialog/src/Header/constants.ts",
    "content": "import { BASE_CLASS_NAME as PARENT_BASE_CLASS_NAME } from \"../constants\";\n\nexport const BASE_CLASS_NAME = `${PARENT_BASE_CLASS_NAME}__header`;\n"
  },
  {
    "path": "packages/dialog/src/Header/index.ts",
    "content": "import Container from \"./Container\";\nimport Title from \"./Title\";\n\nexport default class Header extends Container {\n    public static Title = Title;\n}\n"
  },
  {
    "path": "packages/dialog/src/Surface.tsx",
    "content": "import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport {\n    Map,\n    OrderedSet,\n    Set,\n} from \"immutable\";\nimport * as PropTypes from \"prop-types\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    MDCDialogFoundation,\n} from \"@material/dialog/dist/mdc.dialog\";\nimport { FoundationAdapter, SurfaceAdapter } from \"./adapter\";\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nconst {\n    strings: { FOCUSABLE_ELEMENTS },\n} = MDCDialogFoundation;\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__surface`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type State = {\n    foundationClasses: Set<string>,\n    foundationEventListeners: Map<string, Set<EventListener>>,\n};\n\nexport type Context = {\n    adapter: FoundationAdapter,\n};\n\n/**\n * Surface component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static contextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter).isRequired,\n    };\n\n    public context: Context;\n\n    public state: State = {\n        foundationClasses: OrderedSet<string>(),\n        foundationEventListeners: Map<string, Set<EventListener>>(),\n    };\n\n    public componentDidMount() {\n        this.context.adapter.setSurfaceAdapter(new SurfaceAdapterImpl(this));\n    }\n\n    public componentWillUnmount() {\n        this.context.adapter.setSurfaceAdapter(new SurfaceAdapter());\n    }\n\n    protected renderNativeDOMProps() {\n        return {\n            eventListeners: this.state.foundationEventListeners.toJS(),\n        };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nclass SurfaceAdapterImpl extends SurfaceAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n    public registerSurfaceInteractionHandler(evt: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                evt,\n                OrderedSet<EventListener>(),\n                (x) => x.add(handler),\n            ),\n        }));\n    }\n    public deregisterSurfaceInteractionHandler(evt: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                evt,\n                OrderedSet<EventListener>(),\n                (x) => x.delete(handler),\n            ),\n        }));\n    }\n    public numFocusableTargets(): number {\n        return this.getDOMNode().querySelectorAll(FOCUSABLE_ELEMENTS)[0].length;\n    }\n    public setDialogFocusFirstTarget() {\n        return this.getDOMNode().querySelectorAll(FOCUSABLE_ELEMENTS)[0].focus();\n    }\n    public setInitialFocus() {\n    }\n    public getFocusableElements(): Element[] {\n        return this.getDOMNode().querySelectorAll(FOCUSABLE_ELEMENTS);\n    }\n    public getDOMNode(): Element {\n        return ReactDOM.findDOMNode(this.element);\n    }\n}\n\nexport default class Surface extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/__tests__/Backdrop.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Backdrop from \"../Backdrop\";\n\ndescribe(\"Backdrop\", () => {\n    it(\"Should have mdc-dialog__backdrop classname\", () => {\n        const wrapper = enzyme.mount(<Backdrop />);\n        expect(wrapper.hasClass(\"mdc-dialog__backdrop\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Backdrop />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/dialog/src/__tests__/Body.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Body from \"../Body\";\n\ndescribe(\"Body\", () => {\n    it(\"Should have mdc-dialog__body classname\", () => {\n        const wrapper = enzyme.mount(<Body />);\n        expect(wrapper.hasClass(\"mdc-dialog__body\")).toBeTruthy();\n    });\n\n    it(\"Should have section element as default component\", () => {\n        const wrapper = enzyme.mount(<Body />);\n        expect(wrapper.find(\"section\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Body scrollable />);\n        expect(wrapper.hasClass(\"mdc-dialog__body\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-dialog__body--scrollable\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Body />);\n        expect(wrapper.hasClass(\"mdc-dialog__body\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-dialog__body--scrollable\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/dialog/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-dialog classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-dialog\")).toBeTruthy();\n    });\n\n    it(\"Should have aside element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"aside\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Container dark />);\n        expect(wrapper.hasClass(\"mdc-dialog\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-dialog--theme-dark\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-dialog\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-dialog--theme-dark\")).toBeFalsy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/dialog/src/__tests__/Surface.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\nimport * as PropTypes from \"prop-types\";\n\nimport { FoundationAdapter } from \"../adapter\";\nimport Surface from \"../Surface\";\n\ndescribe(\"Surface\", () => {\n    it(\"Should have mdc-dialog__surface classname\", () => {\n        const wrapper = enzyme.mount(<Surface />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.hasClass(\"mdc-dialog__surface\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Surface />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/dialog/src/adapter.ts",
    "content": "/**\n * Foundation adapters.\n */\n\nimport {\n    util as dialogUtil,\n} from \"@material/dialog/dist/mdc.dialog\";\n\n/**\n * Container adapter\n */\nexport class ContainerAdapter {\n    public hasClass(_className: string): boolean {\n        return false;\n    }\n    public addClass(_className: string) {\n    }\n    public removeClass(_className: string) {\n    }\n    public setAttr(_attr: string, _val: string) {\n    }\n    public registerInteractionHandler(_evt: string, _handler: EventListener) {\n    }\n    public deregisterInteractionHandler(_evt: string, _handler: EventListener) {\n    }\n    public notifyAccept() {\n    }\n    public notifyCancel() {\n    }\n}\n\nexport class SurfaceAdapter {\n    public registerSurfaceInteractionHandler(_evt: string, _handler: EventListener) {\n    }\n    public deregisterSurfaceInteractionHandler(_evt: string, _handler: EventListener) {\n    }\n    public numFocusableTargets(): number {\n        return 0;\n    }\n    public setDialogFocusFirstTarget() {\n    }\n    public setInitialFocus() {\n    }\n    public getFocusableElements(): Element[] {\n        return [];\n    }\n}\n\n/**\n * Composite adapter for MDCDialogFoundation\n */\nexport class FoundationAdapter {\n    private containerAdapter: ContainerAdapter;\n    private surfaceAdapter: SurfaceAdapter;\n\n    constructor() {\n        this.containerAdapter = new ContainerAdapter();\n        this.surfaceAdapter = new SurfaceAdapter();\n    }\n\n    public setContainerAdapter(containerAdapter: ContainerAdapter) {\n        this.containerAdapter = containerAdapter;\n    }\n\n    public setSurfaceAdapter(surfaceAdapter: SurfaceAdapter) {\n        this.surfaceAdapter = surfaceAdapter;\n    }\n\n    /* Container */\n    public hasClass(className: string): boolean {\n        return this.containerAdapter.hasClass(className);\n    }\n    public addClass(className: string) {\n        this.containerAdapter.addClass(className);\n    }\n    public removeClass(className: string) {\n        this.containerAdapter.removeClass(className);\n    }\n    public setAttr(attr: string, val: string) {\n        this.containerAdapter.setAttr(attr, val);\n    }\n    public registerInteractionHandler(evt: string, handler: EventListener) {\n        this.containerAdapter.registerInteractionHandler(evt, handler);\n    }\n    public deregisterInteractionHandler(evt: string, handler: EventListener) {\n        this.containerAdapter.deregisterInteractionHandler(evt, handler);\n    }\n    public notifyAccept() {\n        this.containerAdapter.notifyAccept();\n    }\n    public notifyCancel() {\n        this.containerAdapter.notifyCancel();\n    }\n    /* Surface */\n    public registerSurfaceInteractionHandler(evt: string, handler: EventListener) {\n        this.surfaceAdapter.registerSurfaceInteractionHandler(evt, handler);\n    }\n    public deregisterSurfaceInteractionHandler(evt: string, handler: EventListener) {\n        this.surfaceAdapter.deregisterSurfaceInteractionHandler(evt, handler);\n    }\n    public numFocusableTargets(): number {\n        return this.surfaceAdapter.numFocusableTargets();\n    }\n    public setDialogFocusFirstTarget() {\n        this.surfaceAdapter.setDialogFocusFirstTarget();\n    }\n    public setInitialFocus() {\n        this.surfaceAdapter.setInitialFocus();\n    }\n    public getFocusableElements(): Element[] {\n        return this.surfaceAdapter.getFocusableElements();\n    }\n\n    /* Common */\n    public eventTargetHasClass(target: EventTarget & Element, className: string): boolean {\n        return target.classList.contains(className);\n    }\n    public registerDocumentKeydownHandler(handler: EventListener) {\n        document.addEventListener(\"keydown\", handler);\n    }\n    public deregisterDocumentKeydownHandler(handler: EventListener) {\n        document.removeEventListener(\"keydown\", handler);\n    }\n    public registerFocusTrappingHandler(handler: EventListener) {\n        document.addEventListener(\"focus\", handler, true);\n    }\n    public deregisterFocusTrappingHandler(handler: EventListener) {\n        document.removeEventListener(\"focus\", handler, true);\n    }\n    public getFocusedTarget(): Element {\n        return document.activeElement;\n    }\n    public setFocusedTarget(target: EventTarget & HTMLElement) {\n        target.focus();\n    }\n    public makeElementUntabbable(el: Element) {\n        el.setAttribute(\"tabindex\", \"-1\");\n    }\n    public saveElementTabState(el: Element) {\n        dialogUtil.saveElementTabState(el);\n    }\n    public restoreElementTabState(el: Element) {\n        dialogUtil.restoreElementTabState(el);\n    }\n    public addBodyClass(className: string) {\n        document.body.classList.add(className);\n    }\n    public removeBodyClass(className: string) {\n        document.body.classList.remove(className);\n    }\n    public setBodyAttr(attr: string, val: string) {\n        document.body.setAttribute(attr, val);\n    }\n    public rmBodyAttr(attr: string) {\n        document.body.removeAttribute(attr);\n    }\n    /**\n     * MDCFoundation accepts only object as adapter\n     * So we create object-proxy of instance.\n     */\n    public toObject(): {} {\n        const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(this));\n        const object = {};\n        keys.forEach((key: string) => {\n            object[key] = (...args) => this[key](...args);\n        });\n        return object;\n    }\n}\n"
  },
  {
    "path": "packages/dialog/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-dialog\";\n"
  },
  {
    "path": "packages/dialog/src/index.ts",
    "content": "import Backdrop from \"./Backdrop\";\nimport Body from \"./Body\";\nimport Container from \"./Container\";\nimport Footer from \"./Footer\";\nimport Header from \"./Header\";\nimport Surface from \"./Surface\";\n\nexport default class Dialog extends Container {\n    public static Backdrop = Backdrop;\n    public static Body = Body;\n    public static Footer = Footer;\n    public static Header = Header;\n    public static Surface = Surface;\n}\n"
  },
  {
    "path": "packages/dialog/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/dialog/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/drawer/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/drawer/package.json",
    "content": "{\n  \"name\": \"@react-mdc/drawer\",\n  \"description\": \"React wrapper of @material/drawer\",\n  \"version\": \"0.1.13\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/drawer\": \"^0.4.0\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/prop-types\": \"^15.5.1\",\n    \"@types/react\": \"^15.0.18\",\n    \"@types/react-dom\": \"^15.5.0\",\n    \"classnames\": \"^2.2.5\",\n    \"immutable\": \"^3.8.1\",\n    \"prop-types\": \"^15.5.8\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/drawer/src/Permanent/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"nav\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Permanent/Content.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__content`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Content extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Permanent/ToolbarSpacer.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__toolbar-spacer`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class ToolbarSpacer extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Permanent/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-permanent-drawer classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-permanent-drawer\")).toBeTruthy();\n    });\n\n    it(\"Should have nav element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"nav\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Permanent/__tests__/Content.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Content from \"../Content\";\n\ndescribe(\"Content\", () => {\n    it(\"Should have mdc-permanent-drawer__content classname\", () => {\n        const wrapper = enzyme.mount(<Content />);\n        expect(wrapper.hasClass(\"mdc-permanent-drawer__content\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Content />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Permanent/__tests__/ToolbarSpacer.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport ToolbarSpacer from \"../ToolbarSpacer\";\n\ndescribe(\"ToolbarSpacer\", () => {\n    it(\"Should have mdc-permanent-drawer__toolbar-spacer classname\", () => {\n        const wrapper = enzyme.mount(<ToolbarSpacer />);\n        expect(wrapper.hasClass(\"mdc-permanent-drawer__toolbar-spacer\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<ToolbarSpacer />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Permanent/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-permanent-drawer\";\nexport const SELECTED_CLASS_NAME = `${BASE_CLASS_NAME}--selected`;\n"
  },
  {
    "path": "packages/drawer/src/Permanent/index.ts",
    "content": "import Container from \"./Container\";\nimport Content from \"./Content\";\nimport ToolbarSpacer from \"./ToolbarSpacer\";\n\nexport default class Permanent extends Container {\n    public static Content = Content;\n    public static ToolbarSpacer = ToolbarSpacer;\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\nimport * as PropTypes from \"prop-types\";\n\nimport { MDCTemporaryDrawerFoundation } from \"@material/drawer/dist/mdc.drawer\";\nimport {\n    Map,\n    OrderedSet,\n    Set,\n} from \"immutable\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\nimport { includes } from \"@react-mdc/base/lib/util\";\n\nimport { ContainerAdapter, FoundationAdapter } from \"./adapter\";\nimport { BASE_CLASS_NAME } from \"./constants\";\nimport * as drawerUtil from \"./drawerUtil\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    open?: boolean,\n    rtl?: boolean,\n    style?: { [name: string]: any },\n    onOpenDrawer?: (meta: Meta) => void,\n    onCloseDrawer?: (meta: Meta) => void,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type State = {\n    foundationClasses: Set<string>,\n    foundationCssVars: Map<string, string | null>,\n    foundationEventListeners: Map<string, Set<EventListener>>,\n    open: boolean,\n};\n\nexport type ChildContext = {\n    adapter: FoundationAdapter,\n};\n\nconst {\n    cssClasses: {\n        OPEN: OPEN_CLASS_NAME,\n    },\n    strings: {\n        OPACITY_VAR_NAME,\n    },\n} = MDCTemporaryDrawerFoundation;\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static displayName = \"Container\";\n    public static childContextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter),\n    };\n\n    public static defaultProps = {\n        rtl: false,\n        style: {},\n    };\n\n    public state: State = {\n        foundationClasses: OrderedSet<string>(),\n        foundationCssVars: Map<string, string | null>(),\n        foundationEventListeners: Map<string, Set<EventListener>>(),\n        open: false,\n    };\n\n    private adapter: FoundationAdapter;\n    private foundation: MDCTemporaryDrawerFoundation;\n\n    constructor(props) {\n        super(props);\n        this.adapter = new FoundationAdapter();\n        this.foundation = new MDCTemporaryDrawerFoundation(this.adapter.toObject());\n    }\n\n    public getChildContext(): ChildContext {\n        return {\n            adapter: this.adapter,\n        };\n    }\n\n    // Sync props and internal state\n    public componentWillReceiveProps(props: MetaProps) {\n        if (props.open !== this.state.open) {\n            if (props.open) {\n                this.foundation.open();\n            } else {\n                this.foundation.close();\n            }\n        }\n    }\n\n    // Foundation lifecycle\n    public componentDidMount() {\n        this.adapter.setContainerAdapter(new ContainerAdapterImpl(this));\n        this.foundation.init();\n    }\n\n    public componentWillUnmount() {\n        this.foundation.destroy();\n        this.adapter.setContainerAdapter(new ContainerAdapter());\n    }\n\n    public getClassName(_props: MetaProps, state: State): string {\n        return classNames(\n            CLASS_NAME,\n            state.foundationClasses.toJS(),\n        );\n    }\n\n    protected renderNativeDOMProps() {\n        return {\n            cssVariables: this.state.foundationCssVars.toJS(),\n            eventListeners: this.state.foundationEventListeners.toJS(),\n        };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [this.getClassName(this.props, this.state)];\n    }\n}\n\nclass ContainerAdapterImpl extends ContainerAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n    public addClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.add(className),\n        }));\n\n        // MDCTemporaryDrawerFoundation does not provide opening/closing event.\n        // But we can assume open/close by adding/removing OPEN_CLASS_NAME\n        if (className === OPEN_CLASS_NAME) {\n            this.element.setState({\n                open: true,\n            });\n            if (this.element.props.onOpenDrawer) {\n                this.element.props.onOpenDrawer(this.element);\n            }\n        }\n    }\n    public removeClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.remove(className),\n        }));\n\n        // MDCTemporaryDrawerFoundation does not provide opening/closing event.\n        // But we can assume open/close by adding/removing OPEN_CLASS_NAME\n        if (className === OPEN_CLASS_NAME) {\n            this.element.setState({\n                open: false,\n            });\n            if (this.element.props.onCloseDrawer) {\n                this.element.props.onCloseDrawer(this.element);\n            }\n        }\n    }\n    public hasClass(className: string): boolean {\n        return includes(\n            this.element.getClassName(this.element.props, this.element.state).split(/\\s+/),\n            className);\n    }\n    public registerInteractionHandler(evt: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                drawerUtil.remapEvent(evt, window),\n                OrderedSet<EventListener>(),\n                (x) => x.add(handler),\n            ),\n        }));\n    }\n    public deregisterInteractionHandler(evt: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                drawerUtil.remapEvent(evt, window),\n                OrderedSet<EventListener>(),\n                (x) => x.delete(handler),\n            ),\n        }));\n    }\n    public registerTransitionEndHandler(handler: EventListener) {\n        const evt = \"transitionend\";\n        this.registerInteractionHandler(evt, handler);\n    }\n    public deregisterTransitionEndHandler(handler: EventListener) {\n        const evt = \"transitionend\";\n        this.deregisterInteractionHandler(evt, handler);\n    }\n    public registerDocumentKeydownHandler(handler: EventListener) {\n        document.addEventListener(\"keydown\", handler);\n    }\n    public deregisterDocumentKeydownHandler(handler: EventListener) {\n        document.removeEventListener(\"keydown\", handler);\n    }\n    public updateCssVariable(value: string) {\n        this.element.setState((state) => ({\n            foundationCssVars: state.foundationCssVars.set(OPACITY_VAR_NAME, value),\n        }));\n    }\n    public saveElementTabState(el: Element) {\n        drawerUtil.saveElementTabState(el);\n    }\n    public restoreElementTabState(el: Element) {\n        drawerUtil.restoreElementTabState(el);\n    }\n    public makeElementUntabbable(el: Element) {\n        el.setAttribute(\"tabindex\", \"-1\");\n    }\n    public isRtl(): boolean {\n        return this.element.props.rtl || false;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"open\",\n            \"rtl\",\n            \"style\",\n            \"onOpenDrawer\",\n            \"onCloseDrawer\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"aside\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/Content.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__content`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Content extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/Drawer.tsx",
    "content": "import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport { MDCTemporaryDrawerFoundation } from \"@material/drawer/dist/mdc.drawer\";\nimport {\n    Map,\n    OrderedSet,\n    Set,\n} from \"immutable\";\nimport * as PropTypes from \"prop-types\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { DrawerAdapter, FoundationAdapter } from \"./adapter\";\nimport { BASE_CLASS_NAME } from \"./constants\";\nimport * as drawerUtil from \"./drawerUtil\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__drawer`;\n\nconst {\n  strings: {\n    FOCUSABLE_ELEMENTS,\n  },\n} = MDCTemporaryDrawerFoundation;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type State = {\n    foundationCssVars: Map<string, string | null>,\n    foundationEventListeners: Map<string, Set<EventListener>>,\n};\n\nexport type Context = {\n    adapter: FoundationAdapter,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static contextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter).isRequired,\n    };\n\n    public context: Context;\n\n    public state: State = {\n        foundationCssVars: Map<string, string | null>(),\n        foundationEventListeners: Map<string, Set<EventListener>>(),\n    };\n\n    public componentDidMount() {\n        this.context.adapter.setDrawerAdapter(new DrawerAdapterImpl(this));\n    }\n\n    public componentWillUnmount() {\n        this.context.adapter.setDrawerAdapter(new DrawerAdapter());\n    }\n\n    protected renderNativeDOMProps() {\n        return {\n            cssVariables: this.state.foundationCssVars.toJS(),\n            eventListeners: this.state.foundationEventListeners.toJS(),\n        };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nclass DrawerAdapterImpl extends DrawerAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n\n    public registerDrawerInteractionHandler(evt: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                drawerUtil.remapEvent(evt, window),\n                OrderedSet<EventListener>(),\n                (x) => x.add(handler),\n            ),\n        }));\n    }\n\n    public deregisterDrawerInteractionHandler(evt: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                drawerUtil.remapEvent(evt, window),\n                OrderedSet<EventListener>(),\n                (x) => x.delete(handler),\n            ),\n        }));\n    }\n    public hasNecessaryDom(): boolean {\n        return this.getDOMNode() != null;\n    }\n    public getDrawerWidth(): number {\n        return this.getDOMNode().getBoundingClientRect().width;\n    }\n    public setTranslateX(value: number) {\n        if (value == null) {\n            this.element.setState((state) => ({\n                foundationCssVars: state.foundationCssVars.delete(drawerUtil.getTransformPropertyName()),\n            }));\n        } else {\n            this.element.setState((state) => ({\n                foundationCssVars: state\n                    .foundationCssVars\n                    .set(drawerUtil.getTransformPropertyName(), `translateX(${value}px)`),\n            }));\n        }\n    }\n    public isDrawer(el: Element): boolean {\n        return this.getDOMNode() === el;\n    }\n    public getFocusableElements(): NodeListOf<Element> {\n        return this.getDOMNode().querySelectorAll(FOCUSABLE_ELEMENTS);\n    }\n    public getDOMNode(): Element {\n        return ReactDOM.findDOMNode(this.element);\n    }\n}\n\nexport default class Drawer extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"nav\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/Header.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__header`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Header extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"header\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/HeaderContent.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__header-content`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class HeaderContent extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/ToolbarSpacer.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__toolbar-spacer`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class ToolbarSpacer extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\nimport Drawer from \"../Drawer\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-temporary-drawer classname\", () => {\n        const wrapper = enzyme.mount(\n            <Container>\n                <Drawer />{/* Drawer is required component of Container */}\n            </Container>,\n        );\n        expect(wrapper.hasClass(\"mdc-temporary-drawer\")).toBeTruthy();\n    });\n\n    it(\"Should have aside element as default component\", () => {\n        const wrapper = enzyme.mount(\n            <Container>\n                <Drawer />{/* Drawer is required component of Container */}\n            </Container>,\n        );\n        expect(wrapper.find(\"aside\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Temporary/__tests__/Content.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Content from \"../Content\";\n\ndescribe(\"Content\", () => {\n    it(\"Should have mdc-temporary-drawer__content classname\", () => {\n        const wrapper = enzyme.mount(<Content />);\n        expect(wrapper.hasClass(\"mdc-temporary-drawer__content\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Content />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Temporary/__tests__/Drawer.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport * as PropTypes from \"prop-types\";\n\nimport { FoundationAdapter } from \"../adapter\";\nimport Drawer from \"../Drawer\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-temporary-drawer__drawer classname\", () => {\n        const wrapper = enzyme.mount(<Drawer />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.hasClass(\"mdc-temporary-drawer__drawer\")).toBeTruthy();\n    });\n\n    it(\"Should have nav element as default component\", () => {\n        const wrapper = enzyme.mount(<Drawer />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.find(\"nav\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Temporary/__tests__/Header.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Header from \"../Header\";\n\ndescribe(\"Header\", () => {\n    it(\"Should have mdc-temporary-drawer__header classname\", () => {\n        const wrapper = enzyme.mount(<Header />);\n        expect(wrapper.hasClass(\"mdc-temporary-drawer__header\")).toBeTruthy();\n    });\n\n    it(\"Should have header element as default component\", () => {\n        const wrapper = enzyme.mount(<Header />);\n        expect(wrapper.find(\"header\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Temporary/__tests__/HeaderContent.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport HeaderContent from \"../HeaderContent\";\n\ndescribe(\"HeaderContent\", () => {\n    it(\"Should have mdc-temporary-drawer__header-content classname\", () => {\n        const wrapper = enzyme.mount(<HeaderContent />);\n        expect(wrapper.hasClass(\"mdc-temporary-drawer__header-content\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<HeaderContent />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Temporary/__tests__/ToolbarSpacer.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport ToolbarSpacer from \"../ToolbarSpacer\";\n\ndescribe(\"ToolbarSpacer\", () => {\n    it(\"Should have mdc-temporary-drawer__toolbar-spacer classname\", () => {\n        const wrapper = enzyme.mount(<ToolbarSpacer />);\n        expect(wrapper.hasClass(\"mdc-temporary-drawer__toolbar-spacer\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<ToolbarSpacer />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/drawer/src/Temporary/adapter.ts",
    "content": "/**\n * Foundation adapters.\n */\n\nfunction createEmptyNodeList(): NodeListOf<Element> {\n    const item: (index: number) => Element = () => { throw new Error(\"This is an empty node list\"); };\n    return {\n        ...([]),\n        item,\n    } as NodeListOf<Element>;\n}\n\n/**\n * Container adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class ContainerAdapter {\n    public addClass(_className: string) {\n    }\n    public removeClass(_className: string) {\n    }\n    public hasClass(_className: string): boolean {\n        return false;\n    }\n    public registerInteractionHandler(_evt: string, _handler: EventListener) {\n    }\n    public deregisterInteractionHandler(_evt: string, _handler: EventListener) {\n    }\n    public registerTransitionEndHandler(_handler: EventListener) {\n    }\n    public deregisterTransitionEndHandler(_handler: EventListener) {\n    }\n    public registerDocumentKeydownHandler(_handler: EventListener) {\n    }\n    public deregisterDocumentKeydownHandler(_handler: EventListener) {\n    }\n    public updateCssVariable(_value: string) {\n    }\n    public saveElementTabState(_el: Element) {\n    }\n    public restoreElementTabState(_el: Element) {\n    }\n    public makeElementUntabbable(_el: Element) {\n    }\n    public isRtl(): boolean {\n        return false;\n    }\n}\n\n/**\n * Drawer adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class DrawerAdapter {\n    public registerDrawerInteractionHandler(_evt: string, _handler: EventListener) {\n    }\n    public deregisterDrawerInteractionHandler(_evt: string, _handler: EventListener) {\n    }\n    public getDrawerWidth(): number {\n        return 0;\n    }\n    public setTranslateX(_value: number) {\n    }\n    public isDrawer(_el: Element): boolean {\n        return false;\n    }\n    public getFocusableElements(): NodeListOf<Element> {\n        return createEmptyNodeList();\n    }\n    public hasNecessaryDom(): boolean {\n        return false;\n    }\n}\n\n/**\n * Composite adapter for MDCTemporaryDrawerFoundation\n */\nexport class FoundationAdapter {\n    private containerAdapter: ContainerAdapter;\n    private drawerAdapter: DrawerAdapter;\n\n    constructor() {\n        this.containerAdapter = new ContainerAdapter();\n        this.drawerAdapter = new DrawerAdapter();\n    }\n    public setContainerAdapter(containerAdapter: ContainerAdapter) {\n        this.containerAdapter = containerAdapter;\n    }\n    public setDrawerAdapter(drawerAdapter: DrawerAdapter) {\n        this.drawerAdapter = drawerAdapter;\n    }\n    public addClass(className: string) {\n        this.containerAdapter.addClass(className);\n    }\n    public removeClass(className: string) {\n        this.containerAdapter.removeClass(className);\n    }\n    public hasClass(className: string): boolean {\n        return this.containerAdapter.hasClass(className);\n    }\n    public registerInteractionHandler(evt: string, handler: EventListener) {\n        this.containerAdapter.registerInteractionHandler(evt, handler);\n    }\n    public deregisterInteractionHandler(evt: string, handler: EventListener) {\n        this.containerAdapter.deregisterInteractionHandler(evt, handler);\n    }\n    public registerTransitionEndHandler(handler: EventListener) {\n        this.containerAdapter.registerTransitionEndHandler(handler);\n    }\n    public deregisterTransitionEndHandler(handler: EventListener) {\n        this.containerAdapter.deregisterTransitionEndHandler(handler);\n    }\n    public registerDocumentKeydownHandler(handler: EventListener) {\n        this.containerAdapter.registerDocumentKeydownHandler(handler);\n    }\n    public deregisterDocumentKeydownHandler(handler: EventListener) {\n        this.containerAdapter.deregisterDocumentKeydownHandler(handler);\n    }\n    public updateCssVariable(value: string) {\n        this.containerAdapter.updateCssVariable(value);\n    }\n    public saveElementTabState(el: Element) {\n        this.containerAdapter.saveElementTabState(el);\n    }\n    public restoreElementTabState(el: Element) {\n        this.containerAdapter.restoreElementTabState(el);\n    }\n    public makeElementUntabbable(el: Element) {\n        this.containerAdapter.makeElementUntabbable(el);\n    }\n    public isRtl(): boolean {\n        return this.containerAdapter.isRtl();\n    }\n    public registerDrawerInteractionHandler(evt: string, handler: EventListener) {\n        this.drawerAdapter.registerDrawerInteractionHandler(evt, handler);\n    }\n    public deregisterDrawerInteractionHandler(evt: string, handler: EventListener) {\n        this.drawerAdapter.deregisterDrawerInteractionHandler(evt, handler);\n    }\n    public getDrawerWidth(): number {\n        return this.drawerAdapter.getDrawerWidth();\n    }\n    public setTranslateX(value: number) {\n        this.drawerAdapter.setTranslateX(value);\n    }\n    public isDrawer(el: Element): boolean {\n        return this.drawerAdapter.isDrawer(el);\n    }\n    public getFocusableElements(): NodeListOf<Element> {\n        return this.drawerAdapter.getFocusableElements();\n    }\n    public hasNecessaryDom(): boolean {\n        return this.drawerAdapter.hasNecessaryDom();\n    }\n\n    /**\n     * MDCFoundation accepts only object as adapter\n     * So we create object-proxy of instance.\n     */\n    public toObject(): {} {\n        const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(this));\n        const object = {};\n        keys.forEach((key: string) => {\n            object[key] = (...args) => this[key](...args);\n        });\n        return object;\n    }\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-temporary-drawer\";\nexport const SELECTED_CLASS_NAME = `${BASE_CLASS_NAME}--selected`;\n"
  },
  {
    "path": "packages/drawer/src/Temporary/drawerUtil.ts",
    "content": "/* eslint-disable */\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst TAB_DATA = \"data-mdc-tabindex\";\nconst TAB_DATA_HANDLED = \"data-mdc-tabindex-handled\";\n\nlet _storedTransformPropertyName;\nlet _supportsPassive;\n\n// Remap touch events to pointer events, if the browser doesn't support touch events.\nexport function remapEvent(eventName, globalObj = window) {\n  if (!(\"ontouchstart\" in globalObj.document)) {\n    switch (eventName) {\n      case \"touchstart\":\n        return \"pointerdown\";\n      case \"touchmove\":\n        return \"pointermove\";\n      case \"touchend\":\n        return \"pointerup\";\n      default:\n        return eventName;\n    }\n  }\n\n  return eventName;\n}\n\n// Choose the correct transform property to use on the current browser.\nexport function getTransformPropertyName(globalObj = window, forceRefresh = false) {\n  if (_storedTransformPropertyName === undefined || forceRefresh) {\n    const el = globalObj.document.createElement(\"div\");\n    const transformPropertyName = (\"transform\" in el.style ? \"transform\" : \"-webkit-transform\");\n    _storedTransformPropertyName = transformPropertyName;\n  }\n\n  return _storedTransformPropertyName;\n}\n\n// Determine whether the current browser supports CSS properties.\nexport function supportsCssCustomProperties(globalObj: any = window) {\n  if (\"CSS\" in globalObj) {\n    return globalObj.CSS.supports(\"(--color: red)\");\n  }\n  return false;\n}\n\n// Determine whether the current browser supports passive event listeners, and if so, use them.\nexport function applyPassive(globalObj: any = window, forceRefresh = false) {\n  if (_supportsPassive === undefined || forceRefresh) {\n    let isSupported = false;\n    try {\n      const checker = {};\n      Object.defineProperty(checker, \"passive\", { get: () => { isSupported = true; } });\n      globalObj.document.addEventListener(\"test\", null, checker);\n    } catch (e) { }\n\n    _supportsPassive = isSupported;\n  }\n\n  return _supportsPassive ? {passive: true} : false;\n}\n\n// Save the tab state for an element.\nexport function saveElementTabState(el) {\n  if (el.hasAttribute(\"tabindex\")) {\n    el.setAttribute(TAB_DATA, el.getAttribute(\"tabindex\"));\n  }\n  el.setAttribute(TAB_DATA_HANDLED, true);\n}\n\n// Restore the tab state for an element, if it was saved.\nexport function restoreElementTabState(el) {\n  // Only modify elements we've already handled, in case anything was dynamically added since we saved state.\n  if (el.hasAttribute(TAB_DATA_HANDLED)) {\n    if (el.hasAttribute(TAB_DATA)) {\n      el.setAttribute(\"tabindex\", el.getAttribute(TAB_DATA));\n      el.removeAttribute(TAB_DATA);\n    } else {\n      el.removeAttribute(\"tabindex\");\n    }\n    el.removeAttribute(TAB_DATA_HANDLED);\n  }\n}\n"
  },
  {
    "path": "packages/drawer/src/Temporary/index.ts",
    "content": "import Container from \"./Container\";\nimport Content from \"./Content\";\nimport Drawer from \"./Drawer\";\nimport Header from \"./Header\";\nimport HeaderContent from \"./HeaderContent\";\nimport ToolbarSpacer from \"./ToolbarSpacer\";\n\nexport default class Temporary extends Container {\n    public static Content = Content;\n    public static Drawer = Drawer;\n    public static Header = Header;\n    public static HeaderContent = HeaderContent;\n    public static ToolbarSpacer = ToolbarSpacer;\n}\n"
  },
  {
    "path": "packages/drawer/src/index.ts",
    "content": "import Permanent from \"./Permanent\";\nimport Temporary from \"./Temporary\";\n\nexport {\n    Permanent,\n    Temporary,\n};\n\nexport default {\n    Permanent,\n    Temporary,\n};\n"
  },
  {
    "path": "packages/drawer/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/drawer/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/elevation/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/elevation/package.json",
    "content": "{\n  \"name\": \"@react-mdc/elevation\",\n  \"description\": \"React wrapper of @material/elevation\",\n  \"version\": \"0.1.9\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/elevation\": \"^0.1.2\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/elevation/src/Elevation.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\nimport { ZSpace } from \"./types\";\nimport { classNameForZSpace } from \"./utils\";\n\nexport const propertyClassNames = {\n    TRANSITION: `${BASE_CLASS_NAME}-transition`,\n};\n\nexport type MetaProps = {\n    zSpace: ZSpace,\n    transition?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Elevation component\n */\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName(_c) {\n        return classNameForZSpace(this.props.zSpace);\n    }\n\n    protected renderClassValues(_c: ChildProps) {\n        return [{\n            [propertyClassNames.TRANSITION]: this.props.transition,\n        }];\n    }\n}\n\nexport default class Elevation extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"zSpace\",\n            \"transition\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/elevation/src/__tests__/Elevation.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Elevation from \"../Elevation\";\n\ndescribe(\"Elevation\", () => {\n    it(\"Should have mdc-elevation--z{zSpace} classname\", () => {\n        for (let i = 0; i <= 24; i++) {\n            const wrapper = enzyme.mount(<Elevation zSpace={i as any} />);\n            expect(wrapper.hasClass(`mdc-elevation--z${i}`)).toBeTruthy();\n\n        }\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Elevation zSpace={10} />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Elevation zSpace={10} transition />);\n        expect(wrapper.hasClass(\"mdc-elevation--z10\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-elevation-transition\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Elevation zSpace={10} />);\n        expect(wrapper.hasClass(\"mdc-elevation--z10\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-elevation-transition\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/elevation/src/__tests__/utils.spec.ts",
    "content": "import \"jest\";\n\nimport { ZSpace } from \"../types\";\nimport * as utils from \"../utils\";\n\ndescribe(\"classNameForZSpace\", () => {\n    it(\"Should return mdc-elevation--z{zSpace} as result\", () => {\n        for (let i = 0; i <= 24; i++) {\n            expect(utils.classNameForZSpace(i as ZSpace)).toBe(`mdc-elevation--z${i}`);\n\n        }\n    });\n});\n"
  },
  {
    "path": "packages/elevation/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-elevation\";\n"
  },
  {
    "path": "packages/elevation/src/index.tsx",
    "content": "export { default } from \"./Elevation\";\n"
  },
  {
    "path": "packages/elevation/src/types.ts",
    "content": "export type ZSpace =\n    0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n    11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |\n    20 | 21 | 22 | 23 | 24;\n"
  },
  {
    "path": "packages/elevation/src/utils.ts",
    "content": "import {BASE_CLASS_NAME} from \"./constants\";\nimport {ZSpace} from \"./types\";\n\nexport function classNameForZSpace(zSpace: ZSpace): string {\n  if (zSpace < 0 || zSpace > 24) {\n    throw new TypeError(\"z-space should be a number between 0-24\");\n  }\n  return `${BASE_CLASS_NAME}--z${zSpace}`;\n}\n"
  },
  {
    "path": "packages/elevation/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/elevation/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/fab/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/fab/package.json",
    "content": "{\n  \"name\": \"@react-mdc/fab\",\n  \"description\": \"React wrapper of @material/fab\",\n  \"version\": \"0.1.9\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/fab\": \"^0.3.0\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/fab/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n    MINI: `${CLASS_NAME}--mini`,\n    PLAIN: `${CLASS_NAME}--plain`,\n};\n\nexport type MetaProps = {\n    mini?: boolean,\n    plain?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Fab container\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.MINI]: this.props.mini,\n            [propertyClassNames.PLAIN]: this.props.plain,\n        }];\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLButtonElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"mini\",\n            \"plain\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"button\";\n    }\n}\n"
  },
  {
    "path": "packages/fab/src/Icon.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__icon`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Fab icon component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Icon extends DefaultComponentBase<React.HTMLProps<HTMLSpanElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"span\";\n    }\n}\n"
  },
  {
    "path": "packages/fab/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-fab classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-fab\")).toBeTruthy();\n    });\n\n    it(\"Should have button element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"button\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Container mini />);\n        expect(wrapper.hasClass(\"mdc-fab\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-fab--mini\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container plain />);\n        expect(wrapper.hasClass(\"mdc-fab\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-fab--plain\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-fab\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-fab--mini\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-fab--plain\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/fab/src/__tests__/Icon.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Icon from \"../Icon\";\n\ndescribe(\"Icon\", () => {\n    it(\"Should have mdc-fab__icon classname\", () => {\n        const wrapper = enzyme.mount(<Icon />);\n        expect(wrapper.hasClass(\"mdc-fab__icon\")).toBeTruthy();\n    });\n\n    it(\"Should have span element as default component\", () => {\n        const wrapper = enzyme.mount(<Icon />);\n        expect(wrapper.find(\"span\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/fab/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-fab\";\n"
  },
  {
    "path": "packages/fab/src/index.ts",
    "content": "import Container from \"./Container\";\nimport Icon from \"./Icon\";\n\nexport default class FAB extends Container {\n    public static Icon = Icon;\n}\n"
  },
  {
    "path": "packages/fab/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/fab/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/form-field/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/form-field/package.json",
    "content": "{\n  \"name\": \"@react-mdc/form-field\",\n  \"description\": \"React wrapper of @material/form-field\",\n  \"version\": \"0.1.8\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/form-field\": \"^0.1.1\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/form-field/src/FormField.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n    ALIGN_END: `${CLASS_NAME}--align-end`,\n};\n\nexport type MetaProps = {\n    alignEnd?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Form field component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.ALIGN_END]: this.props.alignEnd,\n        }];\n    }\n}\n\nexport default class FormField extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"alignEnd\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/form-field/src/__tests__/FormField.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport FormField from \"../FormField\";\n\ndescribe(\"FormField\", () => {\n    it(\"Should have mdc-form-field classname\", () => {\n        const wrapper = enzyme.mount(<FormField />);\n        expect(wrapper.hasClass(\"mdc-form-field\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<FormField />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<FormField alignEnd />);\n        expect(wrapper.hasClass(\"mdc-form-field\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-form-field--align-end\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<FormField />);\n        expect(wrapper.hasClass(\"mdc-form-field\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-form-field--align-end\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/form-field/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-form-field\";\n"
  },
  {
    "path": "packages/form-field/src/index.tsx",
    "content": "export { default } from \"./FormField\";\n"
  },
  {
    "path": "packages/form-field/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/form-field/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/layout-grid/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/layout-grid/package.json",
    "content": "{\n  \"name\": \"@react-mdc/layout-grid\",\n  \"description\": \"React wrapper of @material/layout-grid\",\n  \"version\": \"0.1.9\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/layout-grid\": \"^0.1.0\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/layout-grid/src/Cell.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { CELL_BASE_CLASS_NAME } from \"./constants\";\nimport { Alignment, GridNumber } from \"./types\";\nimport * as utils from \"./utils\";\n\nexport const CLASS_NAME = CELL_BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    span?: GridNumber,\n    spanDesktop?: GridNumber,\n    spanTablet?: GridNumber,\n    spanPhone?: GridNumber,\n    order?: GridNumber,\n    align?: Alignment,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Grid cell component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        const {\n            span,\n            spanDesktop,\n            spanTablet,\n            spanPhone,\n            order,\n            align,\n        } = this.props;\n\n        const classes: string[] = [];\n        if (span != null) {\n            classes.push(utils.classNameForCellSpan(span));\n        }\n        if (spanDesktop != null) {\n            classes.push(utils.classNameForCellSpan(spanDesktop, \"desktop\"));\n        }\n        if (spanTablet != null) {\n            classes.push(utils.classNameForCellSpan(spanTablet, \"tablet\"));\n        }\n        if (spanPhone != null) {\n            classes.push(utils.classNameForCellSpan(spanPhone, \"phone\"));\n        }\n        if (align != null) {\n            classes.push(utils.classNameForCellAlignment(align));\n        }\n        if (order != null) {\n            classes.push(utils.classNameForCellOrder(order));\n        }\n        return classes;\n    }\n}\n\nexport default class Cell extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"span\",\n            \"spanDesktop\",\n            \"spanTablet\",\n            \"spanPhone\",\n            \"order\",\n            \"align\",\n        ];\n    }\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/layout-grid/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n    GUTTER_CSS_VARIABLE,\n    MARGIN_CSS_VARIABLE,\n} from \"./constants\";\nimport { Gutter, Margin } from \"./types\";\nimport * as utils from \"./utils\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    margin?: Margin,\n    gutter?: Gutter,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Wrapper component of mdc-layout-grid\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderNativeDOMProps() {\n        const cssVariables = {};\n        if (this.props.margin != null) {\n            cssVariables[MARGIN_CSS_VARIABLE] = utils.normalizeMarginAndGutter(this.props.margin);\n        }\n        if (this.props.gutter != null) {\n            cssVariables[GUTTER_CSS_VARIABLE] = utils.normalizeMarginAndGutter(this.props.gutter);\n        }\n        return { cssVariables };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"margin\",\n            \"gutter\",\n        ];\n    }\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/layout-grid/src/__tests__/Cell.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Cell from \"../Cell\";\n\ndescribe(\"Cell\", () => {\n    it(\"Should have mdc-layout-grid__cell classname\", () => {\n        const wrapper = enzyme.mount(<Cell />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Cell />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Cell span={1} />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell--span-1\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Cell spanDesktop={2} />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell--span-2-desktop\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Cell spanTablet={3} />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell--span-3-tablet\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Cell spanPhone={4} />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell--span-4-phone\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Cell order={5} />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell--order-5\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Cell align=\"top\" />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell--align-top\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Cell align=\"middle\" />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell--align-middle\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Cell align=\"bottom\" />);\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-layout-grid__cell--align-bottom\")).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/layout-grid/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport {\n    NativeDOMAdapter,\n} from \"@react-mdc/base\";\n\nimport { GUTTER_CSS_VARIABLE, MARGIN_CSS_VARIABLE } from \"../constants\";\nimport Container from \"../Container\";\nimport { MetaProps } from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-layout-grid classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-layout-grid\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property CSS properties\", () => {\n        let wrapper: enzyme.ShallowWrapper<React.HTMLProps<HTMLDivElement> & MetaProps, any>;\n\n        wrapper = enzyme.shallow(<Container margin={8} />).shallow();\n        expect(wrapper.find(NativeDOMAdapter).prop(\"cssVariables\")).toEqual({\n            [MARGIN_CSS_VARIABLE]: \"8px\",\n        });\n\n        wrapper = enzyme.shallow(<Container gutter={8} />).shallow();\n        expect(wrapper.find(NativeDOMAdapter).prop(\"cssVariables\")).toEqual({\n            [GUTTER_CSS_VARIABLE]: \"8px\",\n        });\n\n        wrapper = enzyme.shallow(<Container margin={8} gutter={16} />).shallow();\n        expect(wrapper.find(NativeDOMAdapter).prop(\"cssVariables\")).toEqual({\n            [MARGIN_CSS_VARIABLE]: \"8px\",\n            [GUTTER_CSS_VARIABLE]: \"16px\",\n        });\n\n        wrapper = enzyme.shallow(<Container margin=\"foo\" />).shallow();\n        expect(wrapper.find(NativeDOMAdapter).prop(\"cssVariables\")).toEqual({\n            [MARGIN_CSS_VARIABLE]: \"foo\",\n        });\n\n        wrapper = enzyme.shallow(<Container gutter=\"3em\" />).shallow();\n        expect(wrapper.find(NativeDOMAdapter).prop(\"cssVariables\")).toEqual({\n            [GUTTER_CSS_VARIABLE]: \"3em\",\n        });\n    });\n});\n"
  },
  {
    "path": "packages/layout-grid/src/__tests__/utils.spec.ts",
    "content": "import \"jest\";\n\nimport { GUTTER_CSS_VARIABLE, MARGIN_CSS_VARIABLE } from \"../constants\";\nimport { GridNumber, Screen } from \"../types\";\nimport * as utils from \"../utils\";\n\ndescribe(\"classNameForCellSpan()\", () => {\n    it(\"Should return span classname\", () => {\n        for (let i = 1; i <= 12; i++) {\n            expect(utils.classNameForCellSpan(i as GridNumber)).toBe(\n                `mdc-layout-grid__cell--span-${i}`,\n            );\n        }\n    });\n\n    it(\"Should return span classname with screens\", () => {\n        ([\"desktop\", \"phone\", \"tablet\"] as [Screen]).forEach((screen) => {\n            for (let i = 1; i <= 12; i++) {\n                expect(utils.classNameForCellSpan(i as GridNumber, screen)).toBe(\n                    `mdc-layout-grid__cell--span-${i}-${screen}`,\n                );\n            }\n        });\n    });\n});\n\ndescribe(\"classNameForCellOrder()\", () => {\n    it(\"Should return order classname\", () => {\n        for (let i = 1; i <= 12; i++) {\n            expect(utils.classNameForCellOrder(i as GridNumber)).toBe(\n                `mdc-layout-grid__cell--order-${i}`,\n            );\n        }\n    });\n});\n\ndescribe(\"classNameForCellAlignment()\", () => {\n    it(\"Should return align classname\", () => {\n        expect(utils.classNameForCellAlignment(\"top\")).toBe(\n            \"mdc-layout-grid__cell--align-top\",\n        );\n        expect(utils.classNameForCellAlignment(\"middle\")).toBe(\n            \"mdc-layout-grid__cell--align-middle\",\n        );\n        expect(utils.classNameForCellAlignment(\"bottom\")).toBe(\n            \"mdc-layout-grid__cell--align-bottom\",\n        );\n    });\n});\n"
  },
  {
    "path": "packages/layout-grid/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-layout-grid\";\nexport const CELL_BASE_CLASS_NAME = `${BASE_CLASS_NAME}__cell`;\n\nexport const MARGIN_CSS_VARIABLE = \"--mdc-layout-grid-margin\";\nexport const GUTTER_CSS_VARIABLE = \"--mdc-layout-grid-gutter\";\n"
  },
  {
    "path": "packages/layout-grid/src/index.ts",
    "content": "import Cell from \"./Cell\";\nimport Container from \"./Container\";\n\nexport default class LayoutGrid extends Container {\n    public static Cell = Cell;\n}\n"
  },
  {
    "path": "packages/layout-grid/src/types.ts",
    "content": "export type GridNumber =\n    1 | 2 | 3 | 4 |\n    5 | 6 | 7 | 8 |\n    9 | 10 | 11 | 12;\n\nexport type Screen =\n    \"desktop\" |\n    \"phone\" |\n    \"tablet\";\n\nexport type Alignment =\n    \"top\" |\n    \"middle\" |\n    \"bottom\";\n\nexport type Margin = number | string;\n\nexport type Gutter = number | string;\n"
  },
  {
    "path": "packages/layout-grid/src/utils.ts",
    "content": "import { CELL_BASE_CLASS_NAME } from \"./constants\";\nimport { Alignment, GridNumber, Gutter, Margin, Screen } from \"./types\";\n\nexport function classNameForCellSpan(span: GridNumber, screen: Screen | null = null): string {\n    const className = `${CELL_BASE_CLASS_NAME}--span-${span}`;\n    if (screen != null) {\n        return `${className}-${screen}`;\n    } else {\n        return className;\n    }\n}\n\nexport function classNameForCellOrder(order: GridNumber): string {\n    return `${CELL_BASE_CLASS_NAME}--order-${order}`;\n}\n\nexport function classNameForCellAlignment(alignment: Alignment): string {\n    return `${CELL_BASE_CLASS_NAME}--align-${alignment}`;\n}\n\nexport function normalizeMarginAndGutter(value: Margin | Gutter): string {\n    if (typeof value === \"number\") {\n        return `${value}px`;\n    } else {\n        return value;\n    }\n}\n"
  },
  {
    "path": "packages/layout-grid/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/layout-grid/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/list/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/list/package.json",
    "content": "{\n  \"name\": \"@react-mdc/list\",\n  \"description\": \"React wrapper of @material/list\",\n  \"version\": \"0.1.9\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/list\": \"^0.2.0\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/list/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n    DENSE: `${CLASS_NAME}--dense`,\n    TWO_LINE: `${CLASS_NAME}--two-line`,\n    AVATAR_LIST: `${CLASS_NAME}--avatar-list`,\n};\n\nexport type MetaProps = {\n    dense?: boolean,\n    twoLine?: boolean,\n    avatarList?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * List container component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.DENSE]: this.props.dense,\n            [propertyClassNames.TWO_LINE]: this.props.twoLine,\n            [propertyClassNames.AVATAR_LIST]: this.props.avatarList,\n        }];\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLUListElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"dense\",\n            \"twoLine\",\n            \"avatarList\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"ul\";\n    }\n}\n"
  },
  {
    "path": "packages/list/src/Divider.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}-divider`;\n\nexport const propertyClassNames = {\n    INSET: `${CLASS_NAME}--inset`,\n};\n\nexport type MetaProps = {\n    inset?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n/**\n * List divider component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.INSET]: this.props.inset,\n        }];\n    }\n}\n\n// li with role=\"separator\" as default\nfunction SeparatorLi(props: React.HTMLProps<HTMLLIElement>) {\n    return <li role=\"separator\" {...props} />;\n}\n\nexport default class Divider extends DefaultComponentBase<React.HTMLProps<HTMLLIElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"inset\",\n        ];\n    }\n\n    protected getChildComponent(): React.SFC<React.HTMLProps<HTMLLIElement>> {\n        return SeparatorLi;\n    }\n}\n"
  },
  {
    "path": "packages/list/src/Group/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/list/src/Group/Subheader.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__subheader`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Subheader extends DefaultComponentBase<React.HTMLProps<HTMLHeadingElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"h3\";\n    }\n}\n"
  },
  {
    "path": "packages/list/src/Group/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-list-group classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-list-group\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/list/src/Group/__tests__/Subheader.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Subheader from \"../Subheader\";\n\ndescribe(\"Subheader\", () => {\n    it(\"Should have mdc-list-group__subheader classname\", () => {\n        const wrapper = enzyme.mount(<Subheader />);\n        expect(wrapper.hasClass(\"mdc-list-group__subheader\")).toBeTruthy();\n    });\n\n    it(\"Should have h3 element as default component\", () => {\n        const wrapper = enzyme.mount(<Subheader />);\n        expect(wrapper.find(\"h3\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/list/src/Group/constants.ts",
    "content": "import { BASE_CLASS_NAME as LIST_BASE_CLASS_NAME } from \"../constants\";\n\nexport const BASE_CLASS_NAME = `${LIST_BASE_CLASS_NAME}-group`;\n"
  },
  {
    "path": "packages/list/src/Group/index.ts",
    "content": "import Container from \"./Container\";\nimport Subheader from \"./Subheader\";\n\nexport default class Group extends Container {\n    public static Subheader = Subheader;\n}\n"
  },
  {
    "path": "packages/list/src/Item/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLLIElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"li\";\n    }\n}\n"
  },
  {
    "path": "packages/list/src/Item/EndDetail.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__end-detail`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class EndDetail extends DefaultComponentBase<React.HTMLProps<HTMLSpanElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"span\";\n    }\n}\n"
  },
  {
    "path": "packages/list/src/Item/StartDetail.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__start-detail`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class StartDetail extends DefaultComponentBase<React.HTMLProps<HTMLSpanElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"span\";\n    }\n}\n"
  },
  {
    "path": "packages/list/src/Item/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-list-item classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-list-item\")).toBeTruthy();\n    });\n\n    it(\"Should have li element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"li\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/list/src/Item/__tests__/EndDetail.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport EndDetail from \"../EndDetail\";\n\ndescribe(\"EndDetail\", () => {\n    it(\"Should have mdc-list-item__end-detail classname\", () => {\n        const wrapper = enzyme.mount(<EndDetail />);\n        expect(wrapper.hasClass(\"mdc-list-item__end-detail\")).toBeTruthy();\n    });\n\n    it(\"Should have span element as default component\", () => {\n        const wrapper = enzyme.mount(<EndDetail />);\n        expect(wrapper.find(\"span\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/list/src/Item/__tests__/StartDetail.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport StartDetail from \"../StartDetail\";\n\ndescribe(\"StartDetail\", () => {\n    it(\"Should have mdc-list-item__start-detail classname\", () => {\n        const wrapper = enzyme.mount(<StartDetail />);\n        expect(wrapper.hasClass(\"mdc-list-item__start-detail\")).toBeTruthy();\n    });\n\n    it(\"Should have span element as default component\", () => {\n        const wrapper = enzyme.mount(<StartDetail />);\n        expect(wrapper.find(\"span\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/list/src/Item/constants.ts",
    "content": "import { BASE_CLASS_NAME as LIST_BASE_CLASS_NAME } from \"../constants\";\n\nexport const BASE_CLASS_NAME = `${LIST_BASE_CLASS_NAME}-item`;\n"
  },
  {
    "path": "packages/list/src/Item/index.ts",
    "content": "import Container from \"./Container\";\nimport EndDetail from \"./EndDetail\";\nimport StartDetail from \"./StartDetail\";\n\nexport default class Item extends Container {\n    public static EndDetail = EndDetail;\n    public static StartDetail = StartDetail;\n}\n"
  },
  {
    "path": "packages/list/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-list classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-list\")).toBeTruthy();\n    });\n\n    it(\"Should have ul element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"ul\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Container dense />);\n        expect(wrapper.hasClass(\"mdc-list\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list--dense\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container twoLine />);\n        expect(wrapper.hasClass(\"mdc-list\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list--two-line\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container avatarList />);\n        expect(wrapper.hasClass(\"mdc-list\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list--avatar-list\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container dense twoLine avatarList />);\n        expect(wrapper.hasClass(\"mdc-list\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list--dense\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list--two-line\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list--avatar-list\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-list\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list--dense\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-list--two-line\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-list--avatar-list\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/list/src/__tests__/Divider.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Divider from \"../Divider\";\n\ndescribe(\"Divider\", () => {\n    it(\"Should have mdc-list-divider classname\", () => {\n        const wrapper = enzyme.mount(<Divider />);\n        expect(wrapper.hasClass(\"mdc-list-divider\")).toBeTruthy();\n    });\n\n    it(\"Should have li element as default component\", () => {\n        const wrapper = enzyme.mount(<Divider />);\n        expect(wrapper.find(\"li\").exists()).toBeTruthy();\n        expect(wrapper.find(\"li\").prop(\"role\")).toBe(\"separator\");\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Divider inset />);\n        expect(wrapper.hasClass(\"mdc-list-divider\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list-divider--inset\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Divider />);\n        expect(wrapper.hasClass(\"mdc-list-divider\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-list-divider--inset\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/list/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-list\";\n"
  },
  {
    "path": "packages/list/src/index.ts",
    "content": "import Container from \"./Container\";\nimport Divider from \"./Divider\";\nimport Group from \"./Group\";\nimport Item from \"./Item\";\n\nexport default class List extends Container {\n    public static Divider = Divider;\n    public static Group = Group;\n    public static Item = Item;\n}\n"
  },
  {
    "path": "packages/list/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/list/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/radio/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/radio/package.json",
    "content": "{\n  \"name\": \"@react-mdc/radio\",\n  \"description\": \"React wrapper of @material/radio\",\n  \"version\": \"0.1.12\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/radio\": \"^0.2.2\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/prop-types\": \"^15.5.1\",\n    \"@types/react\": \"^15.0.18\",\n    \"@types/react-dom\": \"^0.14.23\",\n    \"classnames\": \"^2.2.5\",\n    \"immutable\": \"^3.8.1\",\n    \"prop-types\": \"^15.5.8\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/radio/src/Background.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n  BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__background`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Radio background component\n */\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Background extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/radio/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport { OrderedSet, Set } from \"immutable\";\nimport * as PropTypes from \"prop-types\";\n\nimport { MDCRadioFoundation } from \"@material/radio/dist/mdc.radio\";\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { ContainerAdapter, FoundationAdapter } from \"./adapter\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type MetaProps = {\n    checked?: boolean,\n    disabled?: boolean,\n    className?: string,\n};\n\nexport type State = {\n    foundationClasses: Set<string>,\n};\n\nexport type ChildContext = {\n    adapter: FoundationAdapter<ChildProps>,\n};\n\n/**\n * Radio input container component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static childContextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter),\n    };\n\n    public state: State = {\n        foundationClasses: OrderedSet<string>(),\n    };\n\n    private adapter: FoundationAdapter<ChildProps>;\n    private foundation: MDCRadioFoundation;\n\n    constructor(props) {\n        super(props);\n        this.adapter = new FoundationAdapter();\n        this.foundation = new MDCRadioFoundation(this.adapter.toObject());\n    }\n\n    public getChildContext(): ChildContext {\n        return {\n            adapter: this.adapter,\n        };\n    }\n\n    // Foundation lifecycle\n    public componentDidMount() {\n        this.adapter.setContainerAdapter(new ContainerAdapterImpl(this));\n        this.foundation.init();\n        this.adapter.setDefaultOnChangeHandler(this.handleChange);\n        if (this.props.checked != null) {\n            this.foundation.setChecked(this.props.checked);\n        }\n        if (this.props.disabled != null) {\n            this.foundation.setDisabled(this.props.disabled);\n        }\n    }\n\n    public componentWillUnmount() {\n        this.foundation.destroy();\n        this.adapter.setContainerAdapter(new ContainerAdapter());\n    }\n\n    // Sync props and internal state\n    public componentWillReceiveProps(props) {\n        this.syncFoundation(props);\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return this.state.foundationClasses.toJS();\n    }\n\n    private syncFoundation(props: MetaProps) {\n        if (props.checked != null && this.foundation.isChecked() !== this.props.checked) {\n            this.foundation.setChecked(props.checked);\n        }\n        if (props.disabled != null && this.foundation.isDisabled() !== this.props.disabled) {\n            this.foundation.setDisabled(props.disabled);\n        }\n    }\n\n    // Event handler\n    private handleChange = (_evt: React.ChangeEvent<ChildProps>) => {\n        if (this.props.checked != null) {\n            if (this.foundation.isChecked() !== this.props.checked) {\n                // Checked state should not be changed by foundation\n                this.foundation.setChecked(this.props.checked);\n            }\n        }\n    }\n}\n\nclass ContainerAdapterImpl extends ContainerAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n    public addClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.remove(className),\n        }));\n    }\n    public removeClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.add(className),\n        }));\n    }\n    public isChecked(): boolean | null {\n        return this.element.props.checked || null;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"checked\",\n            \"disabled\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/radio/src/Default.tsx",
    "content": "import * as React from \"react\";\n\nimport Background from \"./Background\";\nimport Container from \"./Container\";\nimport InnerCircle from \"./InnerCircle\";\nimport NativeControl from \"./NativeControl\";\nimport OuterCircle from \"./OuterCircle\";\n\nexport type Props = {\n    inputId?: string,\n    name?: string,\n    value?: any,\n    onChange?: React.FormEventHandler<HTMLInputElement>,\n    checked?: boolean,\n    disabled?: boolean,\n    defaultChecked?: boolean,\n};\n\n/**\n * Radio default composed component\n */\nexport default class Default extends React.Component<Props, {}> {\n    public render() {\n        const {\n            inputId,\n            name,\n            value,\n            onChange,\n            checked,\n            disabled,\n            defaultChecked,\n            children: _children, // Ignore original children\n            ...props,\n        } = this.props;\n        return (\n            <Container\n                disabled={disabled}\n                checked={checked}\n                {...props}>\n                <NativeControl\n                    id={inputId}\n                    name={name}\n                    onChange={onChange}\n                    checked={checked}\n                    defaultChecked={defaultChecked}\n                    value={value} />\n                <Background>\n                    <OuterCircle />\n                    <InnerCircle />\n                </Background>\n            </Container>\n        );\n    }\n}\n"
  },
  {
    "path": "packages/radio/src/InnerCircle.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__inner-circle`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class InnerCircle extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/radio/src/NativeControl.tsx",
    "content": "import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport * as PropTypes from \"prop-types\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\nimport { eventHandlerDecorator } from \"@react-mdc/base/lib/util\";\n\nimport { FoundationAdapter, NativeControlAdapter } from \"./adapter\";\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__native-control`;\n\nexport const propertyClassNames = {\n    PREFIX: CLASS_NAME,\n};\n\n// Maybe related to this\n// https://github.com/Microsoft/TypeScript/issues/5938\nexport type ChangeEventHandler = React.FormEventHandler<ChildProps>;\n\nexport type MetaProps = {\n    onChange?: ChangeEventHandler,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n    onChange?: ChangeEventHandler,\n    checked?: boolean,\n};\n\nexport type Context = {\n    adapter: FoundationAdapter<ChildProps>,\n};\n\n/**\n * Radio input component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    public static contextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter).isRequired,\n    };\n\n    public defaultOnChange: React.ChangeEventHandler<ChildProps>;\n    public context: Context;\n\n    public componentDidMount() {\n        this.context.adapter.setNativeControlAdapter(new NativeControlAdapterImpl(this));\n    }\n\n    public componentWillUnmount() {\n        this.context.adapter.setNativeControlAdapter(new NativeControlAdapter());\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderProps(childProps: ChildProps) {\n        const {\n            onChange,\n        } = this.props;\n        return {\n            ...super.renderProps(childProps),\n            checked: this.context.adapter.isChecked() || undefined,\n            onChange: (eventHandlerDecorator(this.handleChange)(onChange || null) as React.ChangeEventHandler<any>),\n        };\n    }\n\n    private handleChange: React.ChangeEventHandler<any> = (evt: React.ChangeEvent<ChildProps>) => {\n        this.defaultOnChange(evt);\n    }\n}\n\nclass NativeControlAdapterImpl extends NativeControlAdapter<ChildProps> {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n    public getNativeControl(): Element | null {\n        return ReactDOM.findDOMNode(this.element);\n    }\n    public setDefaultOnChangeHandler(onChange: React.ChangeEventHandler<ChildProps>) {\n        this.element.defaultOnChange = onChange;\n    }\n}\n\n// Input with type=\"radio\" as default\nfunction RadioInput(props: React.HTMLProps<HTMLInputElement>) {\n    return (\n        <input type=\"radio\" {...props} />\n    );\n}\n\nexport default class NativeControl extends DefaultComponentBase<React.HTMLProps<HTMLInputElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"onChange\",\n        ];\n    }\n\n    protected getChildComponent(): React.SFC<React.HTMLProps<HTMLInputElement>> {\n        return RadioInput;\n    }\n}\n"
  },
  {
    "path": "packages/radio/src/OuterCircle.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__outer-circle`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class OuterCircle extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/radio/src/__tests__/Background.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Background from \"../Background\";\n\ndescribe(\"Background\", () => {\n    it(\"Should have mdc-radio__background classname\", () => {\n        const wrapper = enzyme.mount(<Background />);\n        expect(wrapper.hasClass(\"mdc-radio__background\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Background />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/radio/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-radio classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-radio\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/radio/src/__tests__/Default.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Background from \"../Background\";\nimport Container from \"../Container\";\nimport Default from \"../Default\";\nimport InnerCircle from \"../InnerCircle\";\nimport NativeControl from \"../NativeControl\";\nimport OuterCircle from \"../OuterCircle\";\n\ndescribe(\"Default\", () => {\n    it(\"Should render common component composition\", () => {\n        const wrapper = enzyme.shallow(<Default />);\n        expect(wrapper.find(Background).exists()).toBeTruthy();\n        expect(wrapper.find(Container).exists()).toBeTruthy();\n        expect(wrapper.find(InnerCircle).exists()).toBeTruthy();\n        expect(wrapper.find(NativeControl).exists()).toBeTruthy();\n        expect(wrapper.find(OuterCircle).exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/radio/src/__tests__/InnerCircle.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport InnerCircle from \"../InnerCircle\";\n\ndescribe(\"InnerCircle\", () => {\n    it(\"Should have mdc-radio__inner-circle classname\", () => {\n        const wrapper = enzyme.mount(<InnerCircle />);\n        expect(wrapper.hasClass(\"mdc-radio__inner-circle\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<InnerCircle />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/radio/src/__tests__/NativeControl.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\nimport * as PropTypes from \"prop-types\";\n\nimport { FoundationAdapter } from \"../adapter\";\nimport NativeControl from \"../NativeControl\";\n\ndescribe(\"NativeControl\", () => {\n    it(\"Should have mdc-radio__native-control classname\", () => {\n        const wrapper = enzyme.mount(<NativeControl />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.hasClass(\"mdc-radio__native-control\")).toBeTruthy();\n    });\n\n    it(\"Should have input element as default component\", () => {\n        const wrapper = enzyme.mount(<NativeControl />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.find(\"input\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/radio/src/__tests__/OuterCircle.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport OuterCircle from \"../OuterCircle\";\n\ndescribe(\"OuterCircle\", () => {\n    it(\"Should have mdc-radio__outer-circle classname\", () => {\n        const wrapper = enzyme.mount(<OuterCircle />);\n        expect(wrapper.hasClass(\"mdc-radio__outer-circle\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<OuterCircle />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/radio/src/__tests__/adapter.spec.ts",
    "content": "import \"jest\";\n\nimport {\n    ContainerAdapter,\n    FoundationAdapter,\n    NativeControlAdapter,\n} from \"../adapter\";\n\ndescribe(\"ContainerAdapter\", () => {\n    // TODO: Add adapter tests\n    it(\"Should have at least one test\", () => {\n    });\n});\n\ndescribe(\"FoundationAdapter\", () => {\n    // TODO: Add adapter tests\n});\n\ndescribe(\"NativeControlAdapter\", () => {\n    // TODO: Add adapter tests\n});\n"
  },
  {
    "path": "packages/radio/src/adapter.ts",
    "content": "/**\n * Foundation adapters.\n */\n\n/**\n * Container adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class ContainerAdapter {\n  public addClass(_className: string) {\n  }\n  public removeClass(_className: string) {\n  }\n  public isChecked(): boolean | null {\n    return null;\n  }\n}\n\n/**\n * Native control adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class NativeControlAdapter<ChildProps> {\n  public getNativeControl(): Element | null {\n    return null;\n  }\n  public setDefaultOnChangeHandler(_onChange: React.ChangeEventHandler<ChildProps>) {\n  }\n}\n\n/**\n * Composite adapter for MDCRadioFoundation\n */\nexport class FoundationAdapter<ChildProps> {\n  private nativeControlAdapter: NativeControlAdapter<ChildProps>;\n  private containerAdapter: ContainerAdapter;\n  private defaultOnchangeHandler: React.ChangeEventHandler<ChildProps>;\n\n  constructor() {\n    this.containerAdapter = new ContainerAdapter();\n    this.nativeControlAdapter = new NativeControlAdapter();\n    this.defaultOnchangeHandler = () => { };\n  }\n\n  public setContainerAdapter(containerAdapter: ContainerAdapter) {\n    this.containerAdapter = containerAdapter;\n  }\n  public setNativeControlAdapter(nativeControlAdapter: NativeControlAdapter<ChildProps>) {\n    this.nativeControlAdapter = nativeControlAdapter;\n    this.nativeControlAdapter.setDefaultOnChangeHandler(this.defaultOnchangeHandler);\n  }\n  public addClass(className: string) {\n    this.containerAdapter.addClass(className);\n  }\n  public removeClass(className: string) {\n    this.containerAdapter.removeClass(className);\n  }\n  public getNativeControl(): Element | null {\n    return this.nativeControlAdapter.getNativeControl();\n  }\n\n  public setDefaultOnChangeHandler(onChange: React.ChangeEventHandler<ChildProps>) {\n    this.nativeControlAdapter.setDefaultOnChangeHandler(onChange);\n  }\n  public isChecked(): boolean | null {\n    return this.containerAdapter.isChecked();\n  }\n  /**\n   * MDCFoundation accepts only object as adapter\n   * So we create object-proxy of instance.\n   */\n  public toObject(): {} {\n    const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(this));\n    const object = {};\n    keys.forEach((key: string) => {\n      object[key] = (...args) => this[key](...args);\n    });\n    return object;\n  }\n}\n"
  },
  {
    "path": "packages/radio/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-radio\";\n"
  },
  {
    "path": "packages/radio/src/index.ts",
    "content": "import Background from \"./Background\";\nimport Container from \"./Container\";\nimport Default from \"./Default\";\nimport InnerCircle from \"./InnerCircle\";\nimport NativeControl from \"./NativeControl\";\nimport OuterCircle from \"./OuterCircle\";\n\nexport default class Radio extends Container {\n    public static Background = Background;\n    public static InnerCircle = InnerCircle;\n    public static NativeControl = NativeControl;\n    public static OuterCircle = OuterCircle;\n    public static Default = Default;\n}\n"
  },
  {
    "path": "packages/radio/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/radio/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/react-material-components-web/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/react-material-components-web/package.json",
    "content": "{\n  \"name\": \"react-material-components-web\",\n  \"description\": \"React Components for Metarial Component Web\",\n  \"author\": \"Choi Geonu\",\n  \"version\": \"0.1.18\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"material components\",\n    \"material design\",\n    \"react\"\n  ],\n  \"main\": \"src/index.js\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@react-mdc/button\": \"^0.1.8\",\n    \"@react-mdc/card\": \"^0.1.9\",\n    \"@react-mdc/checkbox\": \"^0.1.12\",\n    \"@react-mdc/dialog\": \"^0.1.7\",\n    \"@react-mdc/drawer\": \"^0.1.13\",\n    \"@react-mdc/elevation\": \"^0.1.9\",\n    \"@react-mdc/fab\": \"^0.1.9\",\n    \"@react-mdc/form-field\": \"^0.1.8\",\n    \"@react-mdc/layout-grid\": \"^0.1.9\",\n    \"@react-mdc/list\": \"^0.1.9\",\n    \"@react-mdc/radio\": \"^0.1.12\",\n    \"@react-mdc/ripple\": \"^0.1.11\",\n    \"@react-mdc/switch\": \"^0.1.9\",\n    \"@react-mdc/textfield\": \"^0.1.11\",\n    \"@react-mdc/theme\": \"^0.1.8\",\n    \"@react-mdc/toolbar\": \"^0.1.11\",\n    \"@react-mdc/typography\": \"^0.1.8\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/react-material-components-web/src/index.ts",
    "content": "import * as base from \"@react-mdc/base\";\nimport * as button from \"@react-mdc/button\";\nimport * as card from \"@react-mdc/card\";\nimport * as checkbox from \"@react-mdc/checkbox\";\nimport * as drawer from \"@react-mdc/drawer\";\nimport * as elevation from \"@react-mdc/elevation\";\nimport * as fab from \"@react-mdc/fab\";\nimport * as formField from \"@react-mdc/form-field\";\nimport * as list from \"@react-mdc/list\";\nimport * as radio from \"@react-mdc/radio\";\nimport * as ripple from \"@react-mdc/ripple\";\nimport * as theme from \"@react-mdc/theme\";\nimport * as typography from \"@react-mdc/typography\";\n\n// Export all\nexport {\n  base,\n  card,\n  drawer,\n  fab,\n  list,\n  theme,\n  button,\n  checkbox,\n  elevation,\n  formField,\n  radio,\n  ripple,\n  typography,\n};\n"
  },
  {
    "path": "packages/react-material-components-web/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/react-material-components-web/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/ripple/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/ripple/package.json",
    "content": "{\n  \"name\": \"@react-mdc/ripple\",\n  \"description\": \"React wrapper of @material/ripple\",\n  \"version\": \"0.1.11\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/ripple\": \"^0.6.0\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"immutable\": \"^3.8.1\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/ripple/src/Ripple.tsx",
    "content": "import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport {\n    MDCRippleFoundation,\n} from \"@material/ripple/dist/mdc.ripple\";\nimport {\n    Map,\n    OrderedMap,\n    OrderedSet,\n    Set,\n} from \"immutable\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { FoundationAdapter, RippleAdapter } from \"./adapter\";\nimport { getMatchesProperty, supportsCssVariables } from \"./rippleUtil\";\nimport { Color } from \"./types\";\nimport * as utils from \"./utils\";\n\nimport {\n    SURFACE_BASE_CLASS_NAME,\n} from \"./constants\";\n\nconst MATCHES = getMatchesProperty(HTMLElement.prototype);\n\nexport const CLASS_NAME = SURFACE_BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    unbounded?: boolean,\n    color?: Color,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type State = {\n    foundationClasses: Set<string>,\n    foundationCssVars: Map<string, string | null>,\n    foundationEventListeners: Map<string, Set<EventListener>>,\n};\n\n/**\n * Ripple foundation component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static defaultProps = {\n        unbounded: false,\n    };\n\n    public state: State = {\n        foundationClasses: OrderedSet<string>(),\n        foundationCssVars: OrderedMap<string, string | null>(),\n        foundationEventListeners: OrderedMap<string, Set<EventListener>>(),\n    };\n\n    private adapter: FoundationAdapter;\n    private foundation: MDCRippleFoundation;\n\n    constructor(props) {\n        super(props);\n        this.adapter = new FoundationAdapter();\n        this.foundation = new MDCRippleFoundation(this.adapter.toObject());\n    }\n\n    // Exposed methods\n    public activate() {\n        this.foundation.activate();\n    }\n\n    public deactivate() {\n        this.foundation.deactivate();\n    }\n\n    public getDOMNode(): Element {\n        return ReactDOM.findDOMNode(this);\n    }\n\n    // Foundation lifecycle\n    public componentDidMount() {\n        this.adapter.setRippleAdapter(new RippleAdapterImpl(this));\n        this.foundation.init();\n    }\n\n    public componentWillUnmount() {\n        this.foundation.destroy();\n        this.adapter.setRippleAdapter(new RippleAdapter());\n    }\n    protected renderNativeDOMProps() {\n        return {\n            cssVariables: this.state.foundationCssVars.toJS(),\n            eventListeners: this.state.foundationEventListeners.toJS(),\n        };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        const classes: string[] = [];\n        if (this.props.color != null) {\n            classes.push(utils.classNameForColor(this.props.color));\n        }\n        return [\n            classes,\n            this.state.foundationClasses.toJS(),\n        ];\n    }\n}\n\nclass RippleAdapterImpl extends RippleAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n    public browserSupportsCssVars(): boolean {\n        return supportsCssVariables(window);\n    }\n    public isUnbounded(): boolean {\n        return this.element.props.unbounded || false;\n    }\n    public isSurfaceActive(): boolean {\n        return this.element.getDOMNode()[MATCHES](\":active\");\n    }\n    public addClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.add(className),\n        }));\n    }\n    public removeClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.remove(className),\n        }));\n    }\n    public registerInteractionHandler(evtType: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                evtType,\n                OrderedSet<EventListener>(),\n                (x) => x.add(handler),\n            ),\n        }));\n    }\n    public deregisterInteractionHandler(evtType: string, handler: EventListener) {\n        this.element.setState((state) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                evtType,\n                OrderedSet<EventListener>(),\n                (x) => x.delete(handler),\n            ),\n        }));\n    }\n    public registerResizeHandler(handler: EventListener) {\n        window.addEventListener(\"resize\", handler);\n    }\n    public deregisterResizeHandler(handler: EventListener) {\n        window.removeEventListener(\"resize\", handler);\n    }\n    public updateCssVariable(varName: string, value: string | null) {\n        if (value == null) {\n            this.element.setState((state) => ({\n                foundationCssVars: state.foundationCssVars.delete(varName),\n            }));\n        } else {\n            this.element.setState((state) => ({\n                foundationCssVars: state.foundationCssVars.set(varName, value),\n            }));\n        }\n    }\n    public computeBoundingRect(): ClientRect | null {\n        return this.element.getDOMNode().getBoundingClientRect();\n    }\n    public getWindowPageOffset(): { x: number, y: number } {\n        return { x: window.pageXOffset, y: window.pageYOffset };\n    }\n}\n\nexport default class Ripple extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"unbounded\",\n            \"color\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/ripple/src/__tests__/Ripple.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Ripple from \"../Ripple\";\n\ndescribe(\"Ripple\", () => {\n    it(\"Should have mdc-ripple-surface classname\", () => {\n        const wrapper = enzyme.mount(<Ripple  />);\n        expect(wrapper.hasClass(\"mdc-ripple-surface\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Ripple  />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/ripple/src/__tests__/utils.spec.ts",
    "content": "import \"jest\";\n\nimport { Color } from \"../types\";\nimport * as utils from \"../utils\";\n\ndescribe(\"classNameForColor\", () => {\n    it(\"Should return mdc-ripple-surface--{color} as result\", () => {\n        expect(utils.classNameForColor(\"primary\")).toBe(\"mdc-ripple-surface--primary\");\n        expect(utils.classNameForColor(\"accent\")).toBe(\"mdc-ripple-surface--accent\");\n    });\n});\n"
  },
  {
    "path": "packages/ripple/src/adapter.ts",
    "content": "/**\n * Foundation adapters.\n */\n\n/**\n * Ripple adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class RippleAdapter {\n    public browserSupportsCssVars(): boolean {\n        return false;\n    }\n    public isUnbounded(): boolean {\n        return false;\n    }\n    public isSurfaceActive(): boolean {\n        return false;\n    }\n    public addClass(_className: string) {\n    }\n    public removeClass(_className: string) {\n    }\n    public registerInteractionHandler(_evtType: string, _handler: EventListener) {\n    }\n    public deregisterInteractionHandler(_evtType: string, _handler: EventListener) {\n    }\n    public registerResizeHandler(_handler: EventListener) {\n    }\n    public deregisterResizeHandler(_handler: EventListener) {\n    }\n    public updateCssVariable(_varName: string, _value: string | null) {\n    }\n    public computeBoundingRect(): ClientRect | null {\n        return null;\n    }\n    public getWindowPageOffset(): { x: number, y: number } {\n        return { x: 0, y: 0 };\n    }\n}\n\n/**\n * Composite adapter for MDCRippleFoundation\n */\nexport class FoundationAdapter {\n    public rippleAdapter: RippleAdapter;\n\n    constructor() {\n        this.rippleAdapter = new RippleAdapter();\n    }\n    public setRippleAdapter(rippleAdapter: RippleAdapter) {\n        this.rippleAdapter = rippleAdapter;\n    }\n    public browserSupportsCssVars(): boolean {\n        return this.rippleAdapter.browserSupportsCssVars();\n    }\n    public isUnbounded(): boolean {\n        return this.rippleAdapter.isUnbounded();\n    }\n    public isSurfaceActive(): boolean {\n        return this.rippleAdapter.isSurfaceActive();\n    }\n    public addClass(className: string) {\n        this.rippleAdapter.addClass(className);\n    }\n    public removeClass(className: string) {\n        this.rippleAdapter.removeClass(className);\n    }\n    public registerInteractionHandler(evtType: string, handler: EventListener) {\n        this.rippleAdapter.registerInteractionHandler(evtType, handler);\n    }\n    public deregisterInteractionHandler(evtType: string, handler: EventListener) {\n        this.rippleAdapter.deregisterInteractionHandler(evtType, handler);\n    }\n    public registerResizeHandler(handler: EventListener) {\n        this.rippleAdapter.registerResizeHandler(handler);\n    }\n    public deregisterResizeHandler(handler: EventListener) {\n        this.rippleAdapter.deregisterResizeHandler(handler);\n    }\n    public updateCssVariable(varName: string, value: string | null) {\n        this.rippleAdapter.updateCssVariable(varName, value);\n    }\n    public computeBoundingRect(): ClientRect | null {\n        return this.rippleAdapter.computeBoundingRect();\n    }\n    public getWindowPageOffset(): { x: number, y: number } {\n        return this.rippleAdapter.getWindowPageOffset();\n    }\n    /**\n     * MDCFoundation accepts only object as adapter\n     * So we create object-proxy of instance.\n     */\n    public toObject() {\n        const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(this));\n        const object = {};\n        keys.forEach((key: string) => {\n            object[key] = (...args) => this[key](...args);\n        });\n        return object;\n    }\n}\n"
  },
  {
    "path": "packages/ripple/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-ripple\";\nexport const SURFACE_BASE_CLASS_NAME = `${BASE_CLASS_NAME}-surface`;\n"
  },
  {
    "path": "packages/ripple/src/index.tsx",
    "content": "export { default } from \"./Ripple\";\n"
  },
  {
    "path": "packages/ripple/src/rippleUtil.ts",
    "content": "/**\n * Copied from\n * https://github.com/material-components/material-components-web/blob/master/packages/mdc-ripple/util.js\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function supportsCssVariables(windowObj: any): boolean {\n  const supportsFunctionPresent = windowObj.CSS && typeof windowObj.CSS.supports === \"function\";\n  if (!supportsFunctionPresent) {\n    return false;\n  }\n\n  const explicitlySupportsCssVars = windowObj.CSS.supports(\"--css-vars\", \"yes\");\n  // See: https://bugs.webkit.org/show_bug.cgi?id=154669\n  // See: README section on Safari\n  const weAreFeatureDetectingSafari10plus = (\n    windowObj.CSS.supports(\"(--css-vars: yes)\") &&\n    windowObj.CSS.supports(\"color\", \"#00000000\")\n  );\n  return explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus;\n}\n\nexport function getMatchesProperty(htmlElementPrototype: any): string {\n  return [\n    \"webkitMatchesSelector\", \"msMatchesSelector\", \"matches\",\n  ].filter((p) => p in htmlElementPrototype).pop() || \"matches\";\n}\n"
  },
  {
    "path": "packages/ripple/src/types.ts",
    "content": "export type Color = \"primary\" | \"accent\";\n"
  },
  {
    "path": "packages/ripple/src/utils.ts",
    "content": "import { SURFACE_BASE_CLASS_NAME } from \"./constants\";\nimport { Color } from \"./types\";\n\nexport function classNameForColor(color: Color): string {\n    return `${SURFACE_BASE_CLASS_NAME}--${color}`;\n}\n"
  },
  {
    "path": "packages/ripple/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/ripple/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/switch/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/switch/package.json",
    "content": "{\n  \"name\": \"@react-mdc/switch\",\n  \"description\": \"React wrapper of @material/switch\",\n  \"version\": \"0.1.9\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/switch\": \"^0.1.0\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/switch/src/Background.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__background`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Background extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/switch/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n    PREFIX: CLASS_NAME,\n    DISABLED: `${CLASS_NAME}--disabled`,\n};\n\nexport type MetaProps = {\n    disabled?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Switch input container component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.DISABLED]: this.props.disabled,\n        }];\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"disabled\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/switch/src/Default.tsx",
    "content": "import * as React from \"react\";\n\nimport Background from \"./Background\";\nimport Container from \"./Container\";\nimport Knob from \"./Knob\";\nimport NativeControl from \"./NativeControl\";\n\nexport type Props = {\n    inputId?: string,\n    name?: string,\n    value?: any,\n    onChange?: React.ChangeEventHandler<any>\n    checked?: boolean,\n    disabled?: boolean,\n    defaultChecked?: boolean,\n};\n\n/**\n * Switch default composed component\n */\nexport default class Default extends React.Component<Props, {}> {\n    public props: Props;\n\n    public render() {\n        const {\n            inputId,\n            name,\n            value,\n            onChange,\n            checked,\n            disabled,\n            defaultChecked,\n            ...props,\n        } = this.props;\n        return (\n            <Container\n                disabled={disabled}\n                {...props}>\n                <NativeControl\n                    id={inputId}\n                    name={name}\n                    onChange={onChange}\n                    checked={checked}\n                    defaultChecked={defaultChecked}\n                    disabled={disabled}\n                    value={value} />\n                <Background>\n                    <Knob />\n                </Background>\n            </Container >\n        );\n    }\n}\n"
  },
  {
    "path": "packages/switch/src/Knob.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__knob`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Knob extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/switch/src/Label.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}-label`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Label extends DefaultComponentBase<React.HTMLProps<HTMLLabelElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"label\";\n    }\n}\n"
  },
  {
    "path": "packages/switch/src/NativeControl.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__native-control`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Native control component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\n// Input with type=\"checkbox\" as default\nfunction CheckboxInput(props: React.HTMLProps<HTMLInputElement>) {\n    return (\n        <input type=\"checkbox\" {...props} />\n    );\n}\n\nexport type Props = React.HTMLProps<HTMLInputElement> & MetaProps;\n\nexport default class NativeControl extends DefaultComponentBase<React.HTMLProps<HTMLInputElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent(): React.SFC<React.HTMLProps<HTMLInputElement>> {\n        return CheckboxInput;\n    }\n}\n"
  },
  {
    "path": "packages/switch/src/__tests__/Background.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Background from \"../Background\";\n\ndescribe(\"Background\", () => {\n    it(\"Should have mdc-switch__background classname\", () => {\n        const wrapper = enzyme.mount(<Background />);\n        expect(wrapper.hasClass(\"mdc-switch__background\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Background />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/switch/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-switch classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-switch\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Container disabled />);\n        expect(wrapper.hasClass(\"mdc-switch\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-switch--disabled\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-switch\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-switch--disabled\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/switch/src/__tests__/Default.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Background from \"../Background\";\nimport Container from \"../Container\";\nimport Default from \"../Default\";\nimport Knob from \"../Knob\";\nimport NativeControl from \"../NativeControl\";\n\ndescribe(\"Default\", () => {\n    it(\"Should render common component composition\", () => {\n        const wrapper = enzyme.shallow(<Default />);\n        expect(wrapper.find(Background).exists()).toBeTruthy();\n        expect(wrapper.find(Container).exists()).toBeTruthy();\n        expect(wrapper.find(Knob).exists()).toBeTruthy();\n        expect(wrapper.find(NativeControl).exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/switch/src/__tests__/Knob.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Knob from \"../Knob\";\n\ndescribe(\"Knob\", () => {\n    it(\"Should have mdc-switch__knob classname\", () => {\n        const wrapper = enzyme.mount(<Knob />);\n        expect(wrapper.hasClass(\"mdc-switch__knob\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Knob />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/switch/src/__tests__/Label.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Label from \"../Label\";\n\ndescribe(\"Label\", () => {\n    it(\"Should have mdc-switch-label classname\", () => {\n        const wrapper = enzyme.mount(<Label />);\n        expect(wrapper.hasClass(\"mdc-switch-label\")).toBeTruthy();\n    });\n\n    it(\"Should have label element as default component\", () => {\n        const wrapper = enzyme.mount(<Label />);\n        expect(wrapper.find(\"label\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/switch/src/__tests__/NativeControl.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\nimport * as PropTypes from \"prop-types\";\n\nimport NativeControl from \"../NativeControl\";\n\ndescribe(\"NativeControl\", () => {\n    it(\"Should have mdc-switch__native-control classname\", () => {\n        const wrapper = enzyme.mount(<NativeControl />);\n        expect(wrapper.hasClass(\"mdc-switch__native-control\")).toBeTruthy();\n    });\n\n    it(\"Should have input element as default component\", () => {\n        const wrapper = enzyme.mount(<NativeControl />);\n        expect(wrapper.find(\"input\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/switch/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-switch\";\n"
  },
  {
    "path": "packages/switch/src/index.ts",
    "content": "import Background from \"./Background\";\nimport Container from \"./Container\";\nimport Default from \"./Default\";\nimport Knob from \"./Knob\";\nimport Label from \"./Label\";\nimport NativeControl from \"./NativeControl\";\n\nexport default class Switch extends Container {\n    public static Background = Background;\n    public static Knob = Knob;\n    public static Label = Label;\n    public static NativeControl = NativeControl;\n    public static Default = Default;\n}\n"
  },
  {
    "path": "packages/switch/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/switch/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/textfield/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/textfield/package.json",
    "content": "{\n  \"name\": \"@react-mdc/textfield\",\n  \"description\": \"React wrapper of @material/textfield\",\n  \"version\": \"0.1.11\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/textfield\": \"^0.2.0\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/prop-types\": \"^15.5.1\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"immutable\": \"^3.8.1\",\n    \"prop-types\": \"^15.5.8\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/textfield/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport { MDCTextfieldFoundation } from \"@material/textfield/dist/mdc.textfield\";\nimport { OrderedSet, Set } from \"immutable\";\nimport * as PropTypes from \"prop-types\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { ContainerAdapter, FoundationAdapter } from \"./adapter\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n    PREFIX: CLASS_NAME,\n    MULTILINE: `${CLASS_NAME}--multiline`,\n    FULLWIDTH: `${CLASS_NAME}--fullwidth`,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type MetaProps = {\n    disabled?: boolean,\n    multiline?: boolean,\n    fullwidth?: boolean,\n    className?: string,\n};\n\nexport type State = {\n    foundationClasses: Set<string>,\n};\n\nexport type ChildContext = {\n    adapter: FoundationAdapter,\n};\n\n/**\n * Textfield input container component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static childContextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter),\n    };\n\n    public state: State = {\n        foundationClasses: OrderedSet<string>(),\n    };\n\n    private adapter: FoundationAdapter;\n    private foundation: MDCTextfieldFoundation;\n\n    constructor(props) {\n        super(props);\n        this.adapter = new FoundationAdapter();\n        this.foundation = new MDCTextfieldFoundation(this.adapter.toObject());\n    }\n\n    // Foundation lifecycle\n    public componentDidMount() {\n        this.adapter.setContainerAdapter(new ContainerAdapterImpl(this));\n        this.foundation.init();\n    }\n\n    public componentWillUnmount() {\n        this.foundation.destroy();\n        this.adapter.setContainerAdapter(new ContainerAdapter());\n    }\n\n    public getChildContext(): ChildContext {\n        return {\n            adapter: this.adapter,\n        };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.MULTILINE]: this.props.multiline,\n            [propertyClassNames.FULLWIDTH]: this.props.fullwidth,\n        }, this.state.foundationClasses.toJS()];\n    }\n}\n\nclass ContainerAdapterImpl extends ContainerAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n    public addClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.add(className),\n        }));\n    }\n    public removeClass(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.remove(className),\n        }));\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"disabled\",\n            \"multiline\",\n            \"fullwidth\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/textfield/src/Default.tsx",
    "content": "import * as React from \"react\";\n\nimport Container from \"./Container\";\n\n// Typescript transpiler does not compile following line.\n// I don't know why, and it seems to be bug of typescript\n//\n// import Input from \"./Input\";\n//\n// We bypass the bug using following lines\n/* ---from here --- */\nimport * as InputModule from \"./Input\";\n// tslint:disable:variable-name\nconst Input = InputModule.default;\n// tslint:enable:variable-name\n/* --- to here --- */\n\nexport type ContainerProps = any;\nexport type InputProps = any;\n\ntype TextFieldInternalProps = {\n    containerProps: ContainerProps,\n    inputProps: InputProps,\n};\n\n/**\n * Internal default composed component\n */\nclass TextFieldInternal extends React.Component<TextFieldInternalProps, {}> {\n    public render() {\n        const {\n            containerProps,\n            inputProps,\n        } = this.props;\n\n        return (\n            <Container {...containerProps}>\n                <Input {...inputProps} />\n            </Container>\n        );\n    }\n}\n\nexport type Props = ContainerProps & {\n    inputId?: string,\n    name?: string,\n    value?: any,\n    onChange?: React.ChangeEventHandler<any>,\n    placeholder?: string,\n    disabled?: boolean,\n};\n\n/**\n * Textfield simple common composed component\n */\nexport default class Default extends React.Component<Props, {}> {\n    public render() {\n        const {\n            inputId,\n            name,\n            value,\n            onChange,\n            placeholder,\n            disabled,\n            ...props,\n        } = this.props;\n        const containerProps = {\n            disabled,\n            ...props,\n        };\n        const inputProps = {\n            id: inputId,\n            name,\n            value,\n            onChange,\n            placeholder,\n            disabled,\n        };\n        return (\n            <TextFieldInternal containerProps={containerProps} inputProps={inputProps} />\n        );\n    }\n}\n"
  },
  {
    "path": "packages/textfield/src/Input.tsx",
    "content": "import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport {\n    Map,\n    OrderedSet,\n    Set,\n} from \"immutable\";\nimport * as PropTypes from \"prop-types\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { FoundationAdapter, InputAdapter } from \"./adapter\";\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__input`;\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type State = {\n    foundationEventListeners: Map<string, Set<EventListener>>,\n};\n\nexport type Context = {\n    adapter: FoundationAdapter,\n};\n\n/**\n * Textfield input component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static contextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter).isRequired,\n    };\n\n    public context: Context;\n\n    public state: State = {\n        foundationEventListeners: Map<string, Set<EventListener>>(),\n    };\n\n    public componentDidMount() {\n        this.context.adapter.setInputAdapter(new InputAdapterImpl(this));\n    }\n\n    public componentWillUnmount() {\n        this.context.adapter.setInputAdapter(new InputAdapter());\n    }\n\n    protected renderNativeDOMProps() {\n        return {\n            eventListeners: this.state.foundationEventListeners.toJS(),\n        };\n    }\n\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nclass InputAdapterImpl extends InputAdapter {\n    private element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n\n    public registerInputFocusHandler(handler: EventListener) {\n        this.registerInputHandler(\"focus\", handler);\n    }\n    public deregisterInputFocusHandler(handler: EventListener) {\n        this.deregisterInputHandler(\"focus\", handler);\n    }\n    public registerInputBlurHandler(handler: EventListener) {\n        this.registerInputHandler(\"blur\", handler);\n    }\n    public deregisterInputBlurHandler(handler: EventListener) {\n        this.deregisterInputHandler(\"blur\", handler);\n    }\n    public registerInputInputHandler(handler: EventListener) {\n        this.registerInputHandler(\"input\", handler);\n    }\n    public deregisterInputInputHandler(handler: EventListener) {\n        this.deregisterInputHandler(\"input\", handler);\n    }\n    public registerInputKeydownHandler(handler: EventListener) {\n        this.registerInputHandler(\"keydown\", handler);\n    }\n    public deregisterInputKeydownHandler(handler: EventListener) {\n        this.deregisterInputHandler(\"keydown\", handler);\n    }\n    public getNativeInput(): { value: string, disabled: boolean, checkValidity: () => boolean } | null {\n        return ReactDOM.findDOMNode(this.element) as HTMLInputElement;\n    }\n\n    private registerInputHandler(evt: string, handler: EventListener) {\n        this.element.setState((state: State) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                evt,\n                OrderedSet<EventListener>(),\n                (x) => x.add(handler),\n            ),\n        }));\n    }\n\n    private deregisterInputHandler(evt: string, handler: EventListener) {\n        this.element.setState((state: State) => ({\n            foundationEventListeners: state.foundationEventListeners.update(\n                evt,\n                OrderedSet<EventListener>(),\n                (x) => x.delete(handler),\n            ),\n        }));\n    }\n}\n\n// Input with type=\"text\" as default\nfunction TextInput(props: React.HTMLProps<HTMLInputElement>) {\n    return (\n        <input type=\"text\" {...props} />\n    );\n}\n\nexport default class Input extends DefaultComponentBase<React.HTMLProps<HTMLInputElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent(): React.SFC<React.HTMLProps<HTMLInputElement>> {\n        return TextInput;\n    }\n}\n"
  },
  {
    "path": "packages/textfield/src/Label.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    OrderedSet,\n    Set,\n} from \"immutable\";\nimport * as PropTypes from \"prop-types\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { FoundationAdapter, LabelAdapter } from \"./adapter\";\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__label`;\n\nexport type MetaProps = {};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type State = {\n    foundationClasses: Set<string>,\n};\n\nexport type Context = {\n    adapter: FoundationAdapter,\n};\n\n/**\n * Textfield label component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, State> {\n    public static contextTypes = {\n        adapter: PropTypes.instanceOf(FoundationAdapter).isRequired,\n    };\n\n    public context: Context;\n\n    public state: State = {\n        foundationClasses: OrderedSet<string>(),\n    };\n\n    public componentDidMount() {\n        this.context.adapter.setLabelAdapter(new LabelAdapterImpl(this));\n    }\n\n    public componentWillUnmount() {\n        this.context.adapter.setLabelAdapter(new LabelAdapter());\n    }\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return this.state.foundationClasses.toJS();\n    }\n}\n\nclass LabelAdapterImpl extends LabelAdapter {\n    public element: Meta;\n\n    constructor(element: Meta) {\n        super();\n        this.element = element;\n    }\n\n    public addClassToLabel(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.add(className),\n        }));\n    }\n    public removeClassFromLabel(className: string) {\n        this.element.setState((state) => ({\n            foundationClasses: state.foundationClasses.remove(className),\n        }));\n    }\n}\n\nexport default class Label extends DefaultComponentBase<React.HTMLProps<HTMLLabelElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"label\";\n    }\n}\n"
  },
  {
    "path": "packages/textfield/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-textfield classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-textfield\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Container multiline />);\n        expect(wrapper.hasClass(\"mdc-textfield\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-textfield--multiline\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container fullwidth />);\n        expect(wrapper.hasClass(\"mdc-textfield\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-textfield--fullwidth\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-textfield\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-textfield--multiline\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-textfield--fullwidth\")).toBeFalsy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/textfield/src/__tests__/Default.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\nimport Default from \"../Default\";\nimport Input from \"../Input\";\n\ndescribe(\"Default\", () => {\n    it(\"Should render common component composition\", () => {\n        const wrapper = enzyme.shallow(<Default />).shallow();\n        expect(wrapper.find(Container).exists()).toBeTruthy();\n        expect(wrapper.find(Input).exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/textfield/src/__tests__/Input.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\nimport * as PropTypes from \"prop-types\";\n\nimport { FoundationAdapter } from \"../adapter\";\nimport Input from \"../Input\";\n\ndescribe(\"Input\", () => {\n    it(\"Should have mdc-textfield__input classname\", () => {\n        const wrapper = enzyme.mount(<Input />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.hasClass(\"mdc-textfield__input\")).toBeTruthy();\n    });\n\n    it(\"Should have input element as default component\", () => {\n        const wrapper = enzyme.mount(<Input />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.find(\"input\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/textfield/src/__tests__/Label.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\nimport * as PropTypes from \"prop-types\";\n\nimport { FoundationAdapter } from \"../adapter\";\nimport Label from \"../Label\";\n\ndescribe(\"Label\", () => {\n    it(\"Should have mdc-textfield__label classname\", () => {\n        const wrapper = enzyme.mount(<Label />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.hasClass(\"mdc-textfield__label\")).toBeTruthy();\n    });\n\n    it(\"Should have label element as default component\", () => {\n        const wrapper = enzyme.mount(<Label />, {\n            context: {\n                adapter: new FoundationAdapter(),\n            },\n            childContextTypes: {\n                adapter: PropTypes.instanceOf(FoundationAdapter),\n            },\n        });\n        expect(wrapper.find(\"label\").exists()).toBeTruthy();\n    });\n\n    it(\"Should update foundation with props\", () => {\n        // TODO: Add tests\n    });\n});\n"
  },
  {
    "path": "packages/textfield/src/__tests__/adapter.spec.ts",
    "content": "import \"jest\";\n\nimport {\n    ContainerAdapter,\n    FoundationAdapter,\n    HelptextAdapter,\n    InputAdapter,\n    LabelAdapter,\n} from \"../adapter\";\n\ndescribe(\"ContainerAdapter\", () => {\n    // TODO: Add adapter tests\n    it(\"Should have at least one test\", () => {\n    });\n});\n\ndescribe(\"FoundationAdapter\", () => {\n    // TODO: Add adapter tests\n});\n\ndescribe(\"InputAdapter\", () => {\n    // TODO: Add adapter tests\n});\n\ndescribe(\"LabelAdapter\", () => {\n    // TODO: Add adapter tests\n});\n\ndescribe(\"HelptextAdapter\", () => {\n    // TODO: Add adapter tests\n});\n"
  },
  {
    "path": "packages/textfield/src/adapter.ts",
    "content": "/**\n * Foundation adapters.\n */\n\n/**\n * Container adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class ContainerAdapter {\n    public addClass(_className: string) { }\n    public removeClass(_className: string) { }\n}\n\n/**\n * Input adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class InputAdapter {\n    public registerInputFocusHandler(_handler: EventListener) { }\n    public deregisterInputFocusHandler(_handler: EventListener) { }\n    public registerInputBlurHandler(_handler: EventListener) { }\n    public deregisterInputBlurHandler(_handler: EventListener) { }\n    public registerInputInputHandler(_handler: EventListener) { }\n    public deregisterInputInputHandler(_handler: EventListener) { }\n    public registerInputKeydownHandler(_handler: EventListener) { }\n    public deregisterInputKeydownHandler(_handler: EventListener) { }\n    public getNativeInput(): { value: string, disabled: boolean, checkValidity: () => boolean; } | null {\n        return null;\n    }\n}\n\n/**\n * Label adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class LabelAdapter {\n    public addClassToLabel(_className: string) { }\n    public removeClassFromLabel(_className: string) { }\n}\n\n/**\n * Helptext adapter interface\n * Default implementations are noop and returns meaningless value.\n */\nexport class HelptextAdapter {\n    public addClassToHelptext(_className: string) { }\n    public removeClassFromHelptext(_className: string) { }\n    public helptextHasClass(_className: string): boolean {\n        return false;\n    }\n    public setHelptextAttr(_name: string, _value: string) { }\n    public removeHelptextAttr(_name: string) { }\n}\n\n/**\n * Composite adapter for MDCRadioFoundation\n */\nexport class FoundationAdapter {\n    private containerAdapter: ContainerAdapter;\n    private inputAdapter: InputAdapter;\n    private labelAdapter: LabelAdapter;\n    private helptextAdapter: HelptextAdapter;\n\n    constructor() {\n        this.containerAdapter = new ContainerAdapter();\n        this.inputAdapter = new InputAdapter();\n        this.labelAdapter = new LabelAdapter();\n        this.helptextAdapter = new HelptextAdapter();\n    }\n    public setContainerAdapter(containerAdapter: ContainerAdapter) {\n        this.containerAdapter = containerAdapter;\n    }\n    public setInputAdapter(inputAdapter: InputAdapter) {\n        this.inputAdapter = inputAdapter;\n    }\n    public setLabelAdapter(labelAdapter: LabelAdapter) {\n        this.labelAdapter = labelAdapter;\n    }\n    public setHelptextAdapter(helptextAdapter: HelptextAdapter) {\n        this.helptextAdapter = helptextAdapter;\n    }\n\n    /* Container */\n    public addClass(className: string) {\n        this.containerAdapter.addClass(className);\n    }\n    public removeClass(className: string) {\n        this.containerAdapter.removeClass(className);\n    }\n    /* Label */\n    public addClassToLabel(className: string) {\n        this.labelAdapter.addClassToLabel(className);\n    }\n    public removeClassFromLabel(className: string) {\n        this.labelAdapter.removeClassFromLabel(className);\n    }\n    /* Helptext */\n    public addClassToHelptext(className: string) {\n        this.helptextAdapter.addClassToHelptext(className);\n    }\n    public removeClassFromHelptext(className: string) {\n        this.helptextAdapter.removeClassFromHelptext(className);\n    }\n    public helptextHasClass(className: string): boolean {\n        return this.helptextAdapter.helptextHasClass(className);\n    }\n    public setHelptextAttr(name: string, value: string) {\n        this.helptextAdapter.setHelptextAttr(name, value);\n    }\n    public removeHelptextAttr(name: string) {\n        this.helptextAdapter.removeHelptextAttr(name);\n    }\n\n    /* Input */\n    public registerInputFocusHandler(handler: EventListener) {\n        this.inputAdapter.registerInputFocusHandler(handler);\n    }\n    public deregisterInputFocusHandler(handler: EventListener) {\n        this.inputAdapter.deregisterInputFocusHandler(handler);\n    }\n    public registerInputBlurHandler(handler: EventListener) {\n        this.inputAdapter.registerInputBlurHandler(handler);\n    }\n    public deregisterInputBlurHandler(handler: EventListener) {\n        this.inputAdapter.deregisterInputBlurHandler(handler);\n    }\n    public registerInputInputHandler(handler: EventListener) {\n        this.inputAdapter.registerInputInputHandler(handler);\n    }\n    public deregisterInputInputHandler(handler: EventListener) {\n        this.inputAdapter.deregisterInputInputHandler(handler);\n    }\n    public registerInputKeydownHandler(handler: EventListener) {\n        this.inputAdapter.registerInputKeydownHandler(handler);\n    }\n    public deregisterInputKeydownHandler(handler: EventListener) {\n        this.inputAdapter.deregisterInputKeydownHandler(handler);\n    }\n    public getNativeInput(): { value: string, disabled: boolean, checkValidity: () => boolean; } | null {\n        return this.inputAdapter.getNativeInput();\n    }\n    /**\n     * MDCFoundation accepts only object as adapter\n     * So we create object-proxy of instance.\n     */\n    public toObject(): {} {\n        const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(this));\n        const object = {};\n        keys.forEach((key: string) => {\n            object[key] = (...args) => this[key](...args);\n        });\n        return object;\n    }\n}\n"
  },
  {
    "path": "packages/textfield/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-textfield\";\n"
  },
  {
    "path": "packages/textfield/src/index.ts",
    "content": "import Container from \"./Container\";\nimport Default from \"./Default\";\nimport Input from \"./Input\";\nimport Label from \"./Label\";\n\nexport default class Textfield extends Container {\n    public static Default = Default;\n    public static Input = Input;\n    public static Label = Label;\n}\n"
  },
  {
    "path": "packages/textfield/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/textfield/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/theme/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/theme/package.json",
    "content": "{\n  \"name\": \"@react-mdc/theme\",\n  \"description\": \"React wrapper of @material/theme\",\n  \"version\": \"0.1.8\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/theme\": \"^0.1.1\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/theme/src/Theme.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BackgroundColor, Color, OnColor, TextColor } from \"./types\";\nimport * as utils from \"./utils\";\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport type MetaProps = {\n    color?: Color,\n    backgroundColor?: BackgroundColor,\n    textColor?: TextColor,\n    onColor?: OnColor,\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return null;\n    }\n\n    protected renderClassValues() {\n        const {\n            color,\n            backgroundColor,\n            textColor,\n            onColor,\n        } = this.props;\n\n        const classes: string[] = [];\n        if (color != null) {\n            classes.push(utils.classNameForColor(color));\n        }\n        if (backgroundColor != null) {\n            classes.push(utils.classNameForBackground(backgroundColor));\n        }\n        if (textColor != null && onColor != null) {\n            classes.push(utils.classNameForTextColor(textColor, onColor));\n        }\n\n        return classes;\n    }\n}\n\nexport default class Theme extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"color\",\n            \"backgroundColor\",\n            \"textColor\",\n            \"onColor\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/theme/src/__tests__/Theme.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Theme from \"../Theme\";\nimport { MetaProps } from \"../Theme\";\n\ndescribe(\"Theme\", () => {\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Theme />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper: enzyme.ReactWrapper<React.HTMLProps<HTMLDivElement> & MetaProps, {}>;\n\n        wrapper = enzyme.mount(<Theme color=\"primary\" />);\n        expect(wrapper.hasClass(\"mdc-theme--primary\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Theme backgroundColor=\"primary\" />);\n        expect(wrapper.hasClass(\"mdc-theme--primary-bg\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Theme textColor=\"primary\" onColor=\"background\" />);\n        expect(wrapper.hasClass(\"mdc-theme--text-primary-on-background\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Theme />);\n        expect(wrapper.hasClass(\"mdc-theme--primary\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-theme--primary-bg\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-theme--text-primary-on-background\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/theme/src/__tests__/utils.spec.ts",
    "content": "import \"jest\";\n\nimport {\n    BackgroundColor,\n    Color,\n    OnColor,\n    TextColor,\n} from \"../types\";\nimport * as utils from \"../utils\";\n\ndescribe(\"classNameForColor()\", () => {\n    it(\"Should return color classname\", () => {\n        expect(utils.classNameForColor(\"primary\")).toBe(\"mdc-theme--primary\");\n        expect(utils.classNameForColor(\"accent\")).toBe(\"mdc-theme--accent\");\n        expect(utils.classNameForColor(\"light\")).toBe(\"mdc-theme--light\");\n        expect(utils.classNameForColor(\"dark\")).toBe(\"mdc-theme--dark\");\n    });\n});\n\ndescribe(\"classNameForBackground()\", () => {\n    it(\"Should return background color classname\", () => {\n        expect(utils.classNameForBackground(\"background\")).toBe(\"mdc-theme--background-bg\");\n        expect(utils.classNameForBackground(\"primary\")).toBe(\"mdc-theme--primary-bg\");\n        expect(utils.classNameForBackground(\"accent\")).toBe(\"mdc-theme--accent-bg\");\n    });\n});\n\ndescribe(\"classNameForTextColor()\", () => {\n    it(\"Should return text color classname\", () => {\n        const textColors: [TextColor] = [\n            \"primary\",\n            \"accent\",\n            \"hint\",\n            \"disabled\",\n            \"icon\",\n        ];\n\n        const onColors: [OnColor] = [\n            \"background\",\n            \"primary\",\n            \"accent\",\n            \"light\",\n            \"dark\",\n        ];\n\n        textColors.forEach((textColor) => {\n            onColors.forEach((onColor) => {\n                expect(utils.classNameForTextColor(textColor, onColor))\n                    .toBe(`mdc-theme--text-${textColor}-on-${onColor}`);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/theme/src/constants.ts",
    "content": "export const BASE_CLASS_NAME = \"mdc-theme\";\n"
  },
  {
    "path": "packages/theme/src/index.ts",
    "content": "export { default } from \"./Theme\";\n"
  },
  {
    "path": "packages/theme/src/types.ts",
    "content": "// Main colors\nexport type Color =\n    \"primary\" |\n    \"accent\" |\n    \"light\" |\n    \"dark\";\n\n// Background colors\nexport type BackgroundColor =\n    \"background\" |\n    \"primary\" |\n    \"accent\";\n\n// Text colors\nexport type TextColor =\n    \"primary\" |\n    \"accent\" |\n    \"hint\" |\n    \"disabled\" |\n    \"icon\";\n\n// Text background colors\nexport type OnColor =\n    \"background\" |\n    \"primary\" |\n    \"accent\" |\n    \"light\" |\n    \"dark\";\n"
  },
  {
    "path": "packages/theme/src/utils.ts",
    "content": "import { BASE_CLASS_NAME } from \"./constants\";\nimport {\n    BackgroundColor,\n    Color,\n    OnColor,\n    TextColor,\n} from \"./types\";\n\nexport function classNameForTextColor(textColor: TextColor, onColor: OnColor): string {\n    return `${BASE_CLASS_NAME}--text-${textColor}-on-${onColor}`;\n}\n\nexport function classNameForColor(color: Color): string {\n    return `${BASE_CLASS_NAME}--${color}`;\n}\n\nexport function classNameForBackground(backgroundColor: BackgroundColor): string {\n    return `${BASE_CLASS_NAME}--${backgroundColor}-bg`;\n}\n"
  },
  {
    "path": "packages/theme/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/theme/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/toolbar/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/toolbar/package.json",
    "content": "{\n  \"name\": \"@react-mdc/toolbar\",\n  \"description\": \"React wrapper of @material/toolbar\",\n  \"version\": \"0.1.11\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/toolbar\": \"^0.4.2\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/toolbar/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport {\n    BASE_CLASS_NAME,\n} from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport const propertyClassNames = {\n    FIXED: `${CLASS_NAME}--fixed`,\n};\n\nexport type MetaProps = {\n    fixed?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Toolbar container meta\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.FIXED]: this.props.fixed,\n        }];\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"fixed\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"header\";\n    }\n}\n"
  },
  {
    "path": "packages/toolbar/src/FixedToolbarAdjusted.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}-fixed-adjust`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Fixed toolbar adjusted main component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class FixedToolbarAdjusted extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/toolbar/src/Icon.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__icon`;\n\nexport const propertyClassNames = {\n    MENU: `${CLASS_NAME}--menu`,\n};\n\nexport type MetaProps = {\n    menu?: boolean,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.MENU]: this.props.menu,\n        }];\n    }\n}\n\nexport default class Icon extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n          \"menu\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/toolbar/src/Row.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__row`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Row extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/toolbar/src/Section.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { SECTION_BASE_CLASS_NAME } from \"./constants\";\nimport { Alignment } from \"./types\";\nimport * as utils from \"./utils\";\n\nexport const CLASS_NAME = SECTION_BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    align?: Alignment,\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Toolbar section component\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n\n    protected renderClassValues() {\n        const {\n            align,\n        } = this.props;\n        const classes: string[] = [];\n        if (align != null) {\n            classes.push(utils.classNameForSectionAlignment(align));\n        }\n        return classes;\n    }\n}\n\nexport default class Section extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n            \"align\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"section\";\n    }\n}\n"
  },
  {
    "path": "packages/toolbar/src/Title.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = `${BASE_CLASS_NAME}__title`;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Title extends DefaultComponentBase<React.HTMLProps<HTMLSpanElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"span\";\n    }\n}\n"
  },
  {
    "path": "packages/toolbar/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-toolbar classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-toolbar\")).toBeTruthy();\n    });\n\n    it(\"Should have header element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"header\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Container fixed />);\n        expect(wrapper.hasClass(\"mdc-toolbar\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-toolbar--fixed\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-toolbar\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-toolbar--fixed\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/toolbar/src/__tests__/FixedToolbarAdjusted.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport FixedToolbarAdjusted from \"../FixedToolbarAdjusted\";\n\ndescribe(\"FixedToolbarAdjusted\", () => {\n    it(\"Should have mdc-toolbar-fixed-adjust classname\", () => {\n        const wrapper = enzyme.mount(<FixedToolbarAdjusted />);\n        expect(wrapper.hasClass(\"mdc-toolbar-fixed-adjust\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<FixedToolbarAdjusted />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/toolbar/src/__tests__/Icon.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Icon from \"../Icon\";\n\ndescribe(\"Icon\", () => {\n    it(\"Should have mdc-toolbar__icon classname\", () => {\n        const wrapper = enzyme.mount(<Icon />);\n        expect(wrapper.hasClass(\"mdc-toolbar__icon\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Icon />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/toolbar/src/__tests__/Row.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Row from \"../Row\";\n\ndescribe(\"Row\", () => {\n    it(\"Should have mdc-toolbar__row classname\", () => {\n        const wrapper = enzyme.mount(<Row />);\n        expect(wrapper.hasClass(\"mdc-toolbar__row\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Row />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/toolbar/src/__tests__/Section.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Section from \"../Section\";\n\ndescribe(\"Section\", () => {\n    it(\"Should have mdc-toolbar__section classname\", () => {\n        const wrapper = enzyme.mount(<Section />);\n        expect(wrapper.hasClass(\"mdc-toolbar__section\")).toBeTruthy();\n    });\n\n    it(\"Should have section element as default component\", () => {\n        const wrapper = enzyme.mount(<Section />);\n        expect(wrapper.find(\"section\").exists()).toBeTruthy();\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Section align=\"start\" />);\n        expect(wrapper.hasClass(\"mdc-toolbar__section\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-toolbar__section--align-start\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Section align=\"end\" />);\n        expect(wrapper.hasClass(\"mdc-toolbar__section\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-toolbar__section--align-end\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Section />);\n        expect(wrapper.hasClass(\"mdc-toolbar__section\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-toolbar__section--align-start\")).toBeFalsy();\n        expect(wrapper.hasClass(\"mdc-toolbar__section--align-end\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/toolbar/src/__tests__/Title.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Title from \"../Title\";\n\ndescribe(\"Title\", () => {\n    it(\"Should have mdc-toolbar__title classname\", () => {\n        const wrapper = enzyme.mount(<Title />);\n        expect(wrapper.hasClass(\"mdc-toolbar__title\")).toBeTruthy();\n    });\n\n    it(\"Should have span element as default component\", () => {\n        const wrapper = enzyme.mount(<Title />);\n        expect(wrapper.find(\"span\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/toolbar/src/__tests__/utils.spec.ts",
    "content": "import \"jest\";\n\nimport * as utils from \"../utils\";\n\ndescribe(\"classNameForSectionAlignment()\", () => {\n    it(\"Should render alignment classname\", () => {\n        expect(utils.classNameForSectionAlignment(\"start\")).toBe(\"mdc-toolbar__section--align-start\");\n        expect(utils.classNameForSectionAlignment(\"end\")).toBe(\"mdc-toolbar__section--align-end\");\n    });\n});\n"
  },
  {
    "path": "packages/toolbar/src/constants.tsx",
    "content": "export const BASE_CLASS_NAME = \"mdc-toolbar\";\nexport const SECTION_BASE_CLASS_NAME = `${BASE_CLASS_NAME}__section`;\n"
  },
  {
    "path": "packages/toolbar/src/index.ts",
    "content": "import Container from \"./Container\";\nimport FixedToolbarAdjusted from \"./FixedToolbarAdjusted\";\nimport Icon from \"./Icon\";\nimport Row from \"./Row\";\nimport Section from \"./Section\";\nimport Title from \"./Title\";\n\nexport default class Toolbar extends Container {\n    public static Container = Container;\n    public static FixedToolbarAdjusted = FixedToolbarAdjusted;\n    public static Icon = Icon;\n    public static Row = Row;\n    public static Section = Section;\n    public static Title = Title;\n}\n"
  },
  {
    "path": "packages/toolbar/src/types.tsx",
    "content": "export type Alignment =\n    \"start\" |\n    \"end\";\n"
  },
  {
    "path": "packages/toolbar/src/utils.tsx",
    "content": "import { SECTION_BASE_CLASS_NAME } from \"./constants\";\nimport { Alignment } from \"./types\";\n\nexport function classNameForSectionAlignment(alignment: Alignment): string {\n    return `${SECTION_BASE_CLASS_NAME}--align-${alignment}`;\n}\n"
  },
  {
    "path": "packages/toolbar/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/toolbar/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "packages/typography/.npmignore",
    "content": ".git/\nnode_modules/\nsrc/\nyarn.lock\n**/__mocks__/**\n**/__tests__/**\n"
  },
  {
    "path": "packages/typography/package.json",
    "content": "{\n  \"name\": \"@react-mdc/typography\",\n  \"description\": \"React wrapper of @material/typography\",\n  \"version\": \"0.1.8\",\n  \"license\": \"MIT\",\n  \"main\": \"lib/index\",\n  \"typings\": \"lib/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/react-mdc/react-material-components-web.git\"\n  },\n  \"dependencies\": {\n    \"@material/typography\": \"^0.2.1\",\n    \"@react-mdc/base\": \"^0.1.12\",\n    \"@types/classnames\": \"0.0.32\",\n    \"@types/react\": \"^15.0.18\",\n    \"classnames\": \"^2.2.5\",\n    \"react\": \"^15.4.2\",\n    \"react-dom\": \"^15.4.2\"\n  },\n  \"devDependencies\": {\n    \"@types/enzyme\": \"^2.8.0\",\n    \"@types/jest\": \"^19.2.3\",\n    \"enzyme\": \"^2.8.2\",\n    \"jest\": \"^20.0.1\",\n    \"npm-run-all\": \"^4.0.2\",\n    \"react-test-renderer\": \"^15.5.4\",\n    \"shelljs\": \"^0.7.7\",\n    \"shx\": \"^0.2.2\",\n    \"ts-jest\": \"^20.0.3\",\n    \"tslint\": \"^5.2.0\",\n    \"tslint-react\": \"^3.0.0\",\n    \"typescript\": \"^2.4.1\"\n  },\n  \"scripts\": {\n    \"build\": \"npm-run-all build:ts lint\",\n    \"watch\": \"tsc --watch\",\n    \"prepublish\": \"npm run build\",\n    \"clean\": \"shx rm -rf lib/\",\n    \"lint\": \"tslint 'src/**/*.ts?(x)'\",\n    \"build:ts\": \"tsc\",\n    \"test\": \"jest\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \".(ts|tsx)\": \"<rootDir>/node_modules/ts-jest/preprocessor.js\"\n    },\n    \"testRegex\": \"src/.*(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$\",\n    \"moduleFileExtensions\": [\n      \"ts\",\n      \"tsx\",\n      \"js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/typography/src/Container.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\n\nexport const CLASS_NAME = BASE_CLASS_NAME;\n\nexport type MetaProps = {\n    className?: string,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    protected renderBaseClassName() {\n        return CLASS_NAME;\n    }\n}\n\nexport default class Container extends DefaultComponentBase<React.HTMLProps<HTMLDivElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"className\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return \"div\";\n    }\n}\n"
  },
  {
    "path": "packages/typography/src/Text.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    ClassNameMetaBase,\n    DefaultComponentBase,\n} from \"@react-mdc/base\";\n\nimport { BASE_CLASS_NAME } from \"./constants\";\nimport { TextStyle } from \"./types\";\nimport { classNameForTextStyle } from \"./utils\";\n\nexport const propertyClassNames = {\n    ADJUST_MARGIN: `${BASE_CLASS_NAME}--adjust-margin`,\n};\n\nexport type BaseMetaProps = {\n    adjustMargin?: boolean,\n};\n\nexport type MetaProps = BaseMetaProps & {\n    textStyle: TextStyle,\n};\n\nexport type ChildProps = {\n    className?: string,\n};\n\n/**\n * Text meta component decorated by mdc-typography\n */\nexport class Meta extends ClassNameMetaBase<ChildProps, MetaProps, {}> {\n    public static defaultProps = {\n        adjustMargin: false,\n    };\n\n    protected renderBaseClassName() {\n        return classNameForTextStyle(this.props.textStyle);\n    }\n\n    protected renderClassValues() {\n        return [{\n            [propertyClassNames.ADJUST_MARGIN]: this.props.adjustMargin,\n        }];\n    }\n}\n\nexport default class Text extends DefaultComponentBase<React.HTMLProps<HTMLElement>, MetaProps, {}> {\n    public static Meta = Meta;\n\n    public static defaultComponent(style: TextStyle): string {\n        switch (style) {\n            case \"display4\":\n                return \"h1\";\n            case \"display3\":\n                return \"h2\";\n            case \"display2\":\n                return \"h3\";\n            case \"display1\":\n                return \"h4\";\n            case \"headline\":\n                return \"h5\";\n            case \"title\":\n                return \"h6\";\n            case \"subheading2\":\n            case \"subheading1\":\n                return \"div\";\n            case \"body2\":\n            case \"body1\":\n            case \"caption\":\n                return \"p\";\n            default:\n                throw new TypeError(`Invalid text style: ${style}`);\n        }\n    }\n\n    protected getMetaComponent() {\n        return Meta;\n    }\n\n    protected getMetaPropNames() {\n        return [\n            \"textStyle\",\n            \"adjustMargin\",\n        ];\n    }\n\n    protected getChildComponent() {\n        return Text.defaultComponent(this.props.textStyle);\n    }\n}\n"
  },
  {
    "path": "packages/typography/src/__tests__/Container.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Container from \"../Container\";\n\ndescribe(\"Container\", () => {\n    it(\"Should have mdc-typography classname\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.hasClass(\"mdc-typography\")).toBeTruthy();\n    });\n\n    it(\"Should have div element as default component\", () => {\n        const wrapper = enzyme.mount(<Container />);\n        expect(wrapper.find(\"div\").exists()).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/typography/src/__tests__/Text.spec.tsx",
    "content": "import \"jest\";\n\nimport * as React from \"react\";\n\nimport * as enzyme from \"enzyme\";\n\nimport Text from \"../Text\";\nimport { MetaProps } from \"../Text\";\n\ndescribe(\"Text\", () => {\n    it(\"Should have mdc-typography classname\", () => {\n        const wrapper = enzyme.mount(<Text textStyle=\"display4\" />);\n        expect(wrapper.hasClass(\"mdc-typography--display4\")).toBeTruthy();\n    });\n\n    it(\"Should have various element as default component\", () => {\n        let wrapper: enzyme.ReactWrapper<React.HTMLProps<HTMLElement> & MetaProps, {}>;\n\n        wrapper = enzyme.mount(<Text textStyle=\"display4\" />);\n        expect(wrapper.find(Text.defaultComponent(\"display4\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"display3\" />);\n        expect(wrapper.find(Text.defaultComponent(\"display3\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"display2\" />);\n        expect(wrapper.find(Text.defaultComponent(\"display2\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"display1\" />);\n        expect(wrapper.find(Text.defaultComponent(\"display1\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"headline\" />);\n        expect(wrapper.find(Text.defaultComponent(\"headline\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"title\" />);\n        expect(wrapper.find(Text.defaultComponent(\"title\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"subheading2\" />);\n        expect(wrapper.find(Text.defaultComponent(\"subheading2\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"subheading1\" />);\n        expect(wrapper.find(Text.defaultComponent(\"subheading1\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"body2\" />);\n        expect(wrapper.find(Text.defaultComponent(\"body2\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"body1\" />);\n        expect(wrapper.find(Text.defaultComponent(\"body1\")).exists()).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"caption\" />);\n        expect(wrapper.find(Text.defaultComponent(\"caption\")).exists()).toBeTruthy();\n\n    });\n\n    it(\"Should render property classnames\", () => {\n        let wrapper;\n\n        wrapper = enzyme.mount(<Text textStyle=\"body1\" adjustMargin />);\n        expect(wrapper.hasClass(\"mdc-typography--body1\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-typography--adjust-margin\")).toBeTruthy();\n\n        wrapper = enzyme.mount(<Text textStyle=\"body1\" />);\n        expect(wrapper.hasClass(\"mdc-typography--body1\")).toBeTruthy();\n        expect(wrapper.hasClass(\"mdc-typography--adjust-margin\")).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/typography/src/__tests__/utils.spec.ts",
    "content": "import \"jest\";\n\nimport * as utils from \"../utils\";\n\ndescribe(\"classNameForTextStyle()\", () => {\n    it(\"Should return text style classname\", () => {\n        expect(utils.classNameForTextStyle(\"display4\")).toBe(\"mdc-typography--display4\");\n        expect(utils.classNameForTextStyle(\"display3\")).toBe(\"mdc-typography--display3\");\n        expect(utils.classNameForTextStyle(\"display2\")).toBe(\"mdc-typography--display2\");\n        expect(utils.classNameForTextStyle(\"display1\")).toBe(\"mdc-typography--display1\");\n        expect(utils.classNameForTextStyle(\"headline\")).toBe(\"mdc-typography--headline\");\n        expect(utils.classNameForTextStyle(\"title\")).toBe(\"mdc-typography--title\");\n        expect(utils.classNameForTextStyle(\"subheading2\")).toBe(\"mdc-typography--subheading2\");\n        expect(utils.classNameForTextStyle(\"subheading1\")).toBe(\"mdc-typography--subheading1\");\n        expect(utils.classNameForTextStyle(\"body2\")).toBe(\"mdc-typography--body2\");\n        expect(utils.classNameForTextStyle(\"body1\")).toBe(\"mdc-typography--body1\");\n        expect(utils.classNameForTextStyle(\"caption\")).toBe(\"mdc-typography--caption\");\n    });\n});\n"
  },
  {
    "path": "packages/typography/src/constants.tsx",
    "content": "export const BASE_CLASS_NAME = \"mdc-typography\";\n"
  },
  {
    "path": "packages/typography/src/index.tsx",
    "content": "import Container from \"./Container\";\nimport {\n    Body1,\n    Body2,\n    Caption,\n    Display1,\n    Display2,\n    Display3,\n    Display4,\n    Headline,\n    Subheading1,\n    Subheading2,\n    Title,\n} from \"./shortcuts\";\nimport Text from \"./Text\";\n\nexport default class Typography extends Container {\n    public static Text = Text;\n\n    public static Body1 = Body1;\n    public static Body2 = Body2;\n    public static Caption = Caption;\n    public static Display1 = Display1;\n    public static Display2 = Display2;\n    public static Display3 = Display3;\n    public static Display4 = Display4;\n    public static Headline = Headline;\n    public static Subheading1 = Subheading1;\n    public static Subheading2 = Subheading2;\n    public static Title = Title;\n}\n"
  },
  {
    "path": "packages/typography/src/shortcuts.tsx",
    "content": "import * as React from \"react\";\n\nimport {\n    BaseMetaProps,\n    ChildProps,\n    default as Text,\n    MetaProps,\n} from \"./Text\";\nimport { TextStyle } from \"./types\";\n\nexport type Props = React.HTMLProps<HTMLElement> & ChildProps & BaseMetaProps;\n\ntype TextProps = React.HTMLProps<HTMLElement> & MetaProps;\n\nfunction withTextStyle(props: Props, textStyle: TextStyle): TextProps {\n    return {\n        textStyle,\n        ...props,\n    };\n}\n\nfunction createShorcutComponent(textStyle: TextStyle): React.StatelessComponent<Props> {\n    return (props: Props) => React.createElement(Text, withTextStyle(props, textStyle));\n}\n\n/* tslint:disable:variable-name */\nexport const Display4 = createShorcutComponent(\"display4\");\nexport const Display3 = createShorcutComponent(\"display3\");\nexport const Display2 = createShorcutComponent(\"display2\");\nexport const Display1 = createShorcutComponent(\"display1\");\nexport const Headline = createShorcutComponent(\"headline\");\nexport const Title = createShorcutComponent(\"title\");\nexport const Subheading2 = createShorcutComponent(\"subheading2\");\nexport const Subheading1 = createShorcutComponent(\"subheading1\");\nexport const Body2 = createShorcutComponent(\"body2\");\nexport const Body1 = createShorcutComponent(\"body1\");\nexport const Caption = createShorcutComponent(\"caption\");\n/* tslint:enable:variable-name */\n"
  },
  {
    "path": "packages/typography/src/types.tsx",
    "content": "export type TextStyle =\n    \"display4\" |\n    \"display3\" |\n    \"display2\" |\n    \"display1\" |\n    \"headline\" |\n    \"title\" |\n    \"subheading2\" |\n    \"subheading1\" |\n    \"body2\" |\n    \"body1\" |\n    \"caption\";\n"
  },
  {
    "path": "packages/typography/src/utils.tsx",
    "content": "import { BASE_CLASS_NAME } from \"./constants\";\nimport { TextStyle } from \"./types\";\n\nexport function classNameForTextStyle(style: TextStyle): string {\n    return `${BASE_CLASS_NAME}--${style}`;\n}\n"
  },
  {
    "path": "packages/typography/tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "packages/typography/tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "scripts/package.py",
    "content": "#!/bin/env python3\nimport os\nimport collections\nimport functools\nimport glob\nimport json\nimport pprint\nimport typing\n\nimport click\n\nSCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))\nPROJECT_DIR = os.path.dirname(SCRIPT_DIR)\nPACKAGES_DIRNAME = 'packages'\n\nJSONLeafValue = typing.Union[int, float, str, bool]\nJSONValue = typing.Union[JSONLeafValue, typing.List[JSONLeafValue]]\n\n\n@functools.wraps(click.echo)\ndef pecho(message=None, *args, **kwargs):\n    message = pprint.pformat(message) if message is not None else None\n    return click.echo(message, *args, **kwargs)\n\n\ndef set_value(package: collections.Mapping, keypath: str, value: JSONValue):\n    paths = keypath.split('.')\n    target = package\n    for path in paths[:-1]:\n        target = package.setdefault(path, {})\n        assert isinstance(target, collections.Mapping), \"Invalid keypath\"\n    assert isinstance(target, collections.Mapping), \"Invalid keypath\"\n    path = paths[-1]\n    target[path] = value\n\n\ndef remove_value(package: collections.Mapping, keypath: str):\n    paths = keypath.split('.')\n    target = package\n    for path in paths[:-1]:\n        if path not in target:\n            return\n        target = package[path]\n        if not isinstance(target, collections.Mapping):\n            return\n    if not isinstance(target, collections.Mapping):\n        return\n    path = paths[-1]\n    if path in target:\n        del target[path]\n\n\ndef get_package_json(packagedir: str):\n    return os.path.join(packagedir, 'package.json')\n\n\ndef load_pacakge_json(filename: str):\n    decoder = json.JSONDecoder(object_pairs_hook=collections.OrderedDict)\n    with open(filename) as f:\n        return decoder.decode(f.read())\n\n\ndef dump_pacakge_json(package, filename):\n    with open(filename, 'w') as f:\n        decoded = json.dumps(package, ensure_ascii=False, indent=2)\n        f.write(decoded)\n        f.write('\\n')  # Add line feed @ EOF\n\n\ndef collect_package_dirs(path: str = '.'):\n    def has_package_json(path):\n        return os.path.isfile(get_package_json(path))\n\n    return filter(\n        has_package_json,\n        filter(\n            os.path.isdir,\n            glob.glob(os.path.join(PROJECT_DIR, PACKAGES_DIRNAME, '*')))\n    )\n\n\ndef coerce_value(value: str) -> JSONLeafValue:\n    try:\n        return int(value)\n    except ValueError:\n        pass\n    try:\n        return float(value)\n    except ValueError:\n        pass\n    if value.lower() == 'true':\n        return True\n    if value.lower() == 'false':\n        return False\n    return value\n\n# Comands\n\n\n@click.group()\ndef cli():\n    pass\n\n\n@cli.command()\n@click.argument('keypath')\n@click.argument('value')\ndef set(keypath: str, value: str):\n    package_paths = list(map(get_package_json, collect_package_dirs()))\n    packages = [(path, load_pacakge_json(path)) for path in package_paths]\n\n    for path, package in packages:\n        set_value(package, keypath, value)\n\n    for path, package in packages:\n        dump_pacakge_json(package, path)\n\n\n@cli.command()\n@click.argument('keypath')\ndef remove(keypath: str):\n    package_paths = list(map(get_package_json, collect_package_dirs()))\n    packages = [(path, load_pacakge_json(path)) for path in package_paths]\n\n    for path, package in packages:\n        remove_value(package, keypath)\n\n    for path, package in packages:\n        dump_pacakge_json(package, path)\n\n\ndef main():\n    cli()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "scripts/requirements.txt",
    "content": "click\n"
  },
  {
    "path": "tsconfig.base.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n    \"compileOnSave\": true,\n    \"compilerOptions\": {\n        \"outDir\": \"./lib/\",\n        \"declaration\": true,\n        \"strictNullChecks\": true,\n        \"sourceMap\": true,\n        \"module\": \"commonjs\",\n        \"target\": \"es5\",\n        \"jsx\": \"react\",\n        \"moduleResolution\": \"node\",\n        \"noEmitOnError\": true\n    },\n    \"include\": [\n        \"./src/**/*\"\n    ]\n} \n"
  },
  {
    "path": "tslint.base.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  },
  {
    "path": "tslint.json",
    "content": "{\n    \"extends\": [\n        \"tslint:recommended\",\n        \"tslint-react\"\n    ],\n    \"rules\": {\n        // Common\n        \"object-literal-sort-keys\": false,\n        \"interface-over-type-literal\": false,\n        \"prefer-const\": [true, {\"destructuring\": \"all\"}],\n        \"no-empty\": false,\n        \"variable-name\": [\n            true,\n            \"ban-keywords\",\n            \"check-format\",\n            \"allow-leading-underscore\"\n        ],\n        \"max-classes-per-file\": [\n            false\n        ],\n        // React\n        \"jsx-no-lambda\": true,\n        \"jsx-alignment\": false,\n        \"jsx-boolean-value\": false,\n        \"jsx-no-multiline-js\": false\n    }\n}\n"
  }
]