[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\n    \"es2015\",\n    \"stage-0\",\n    \"react\"\n  ],\n  \"plugins\": [\n    \"transform-decorators-legacy\"\n  ]\n}\n"
  },
  {
    "path": ".codeclimate.yml",
    "content": "languages:\n  JavaScript: true\nexclude_paths:\n  - \"test/*\"\n  - \"lib/*\"\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# http://editorconfig.org\n\nroot = true\n\n[*]\n\n# Change these settings to your own preference\nindent_style = space\nindent_size = 2\n\n# We recommend you to keep these unchanged\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".eslintrc.yml",
    "content": "parser: babel-eslint\n\nextends:\n  - plugin:import/errors\n  - plugin:import/warnings\n\nplugins:\n  - react\n\nenv:\n  browser: true\n  node: true\n  es6: true\n  mocha: true\n\nrules:\n  # Strict mode\n  strict: [2, never]\n\n  # Code style\n  indent: [2, 2]\n  quotes: [2, single]\n  no-unused-vars: 1\n  no-undef: 1\n  object-curly-spacing: [2, always]\n\n  # JSX\n  jsx-quotes: 1\n\n  # React\n  react/display-name: 0\n  react/jsx-boolean-value: 1\n  react/jsx-closing-bracket-location: 1\n  react/jsx-curly-spacing: 1\n  react/jsx-max-props-per-line: 0\n  react/jsx-indent-props: 0\n  react/jsx-no-duplicate-props: 1\n  react/jsx-no-undef: 1\n  react/jsx-sort-prop-types: 0\n  react/jsx-sort-props: 0\n  react/jsx-uses-react: 1\n  react/jsx-uses-vars: 1\n  react/no-danger: 0\n  react/no-set-state: 0\n  react/no-did-mount-set-state: 1\n  react/no-did-update-set-state: 1\n  react/no-multi-comp: 0\n  react/no-unknown-property: 1\n  react/self-closing-comp: 1\n  react/jsx-wrap-multilines: 1\n"
  },
  {
    "path": ".github/workflows/npm-publish.yml",
    "content": "# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created\n# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages\n\nname: Node.js Package\n\non:\n  release:\n    types: [created]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - uses: actions/setup-node@v2\n        with:\n          node-version: 12\n      - run: npm ci\n      - run: npm test\n\n  publish-npm:\n    needs: build\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - uses: actions/setup-node@v2\n        with:\n          node-version: 12\n          registry-url: https://registry.npmjs.org/\n      - run: npm ci\n      - run: npm publish\n        env:\n          NODE_AUTH_TOKEN: ${{secrets.npm_token}}\n\n  publish-gpr:\n    needs: build\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write\n    steps:\n      - uses: actions/checkout@v2\n      - uses: actions/setup-node@v2\n        with:\n          node-version: 12\n          registry-url: https://npm.pkg.github.com/\n      - run: npm ci\n      - run: npm publish\n        env:\n          NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}\n"
  },
  {
    "path": ".gitignore",
    "content": "# OS generated files\n.DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\n/.idea\nehthumbs.db\nThumbs.db\n\n# Node\n/node_modules\nyarn.lock\n\n# react-desktop #\n########\n\n/lib\n/build\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\npackage-lock.json\n\n"
  },
  {
    "path": ".npmignore",
    "content": "/build\n/docs\n/examples\n/lib\n/node_modules\n/playground\n/test\n/.idea\n/.babelrc\n/.codeclimate.yml\n/.editorconfig\n/.eslintrc\n/.npmignore\n/.travis.yml\n/CONTRIBUTING.md\n/npm-debug.log\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - '8'\n  - '7'\n  - '6'\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# CHANGELOG\n\n## 0.3.10 (July 28th, 2019)\n\n- Add the Electron framework demo\n\n## 0.3.7 (July 25th, 2018)\n\n- Add ability to disable individual titlebar controls (#125)\n- Allow end-user to force `isWindowFocused` prop (#126)\n- Allow defaultChecked to be string as well as boolean (#123) (Fixes #90)\n\n## 0.3.6 (July 25th, 2018)\n\n- This release was published incorrectly. Use 0.3.7 instead.\n\n## 0.3.5 (April 6th, 2018)\n\n- Fixed issue with case sensitivity\n\n## 0.3.4 (April 4th, 2018)\n\n- Added TextArea component\n- Several minor fixes\n\n## 0.3.3 (November 21st, 2017)\n\n- Updated dependencies\n- Fixed title props\n\n## 0.3.2 (October 17th, 2017)\n\n- Updated dependencies\n- Fixed unit tests\n- Fixed unit playground\n- Add public `focus` and `blur` methods to TextInput\n- Prop title of TitleBar now supports element node\n\n## 0.3.1 (June 21th, 2017)\n\n- Updated dependencies\n\n## 0.3.0 (April 17th, 2017)\n\n- Added prop-types dependency to avoid deprecation in React 16\n\n## 0.2.19 (March 14th, 2017)\n\n- Removed rubber band effect from list view\n\n## 0.2.18 (March 14th, 2017)\n\n- Fixed an issue with OS detection\n\n## 0.2.17 (January 9th, 2017)\n\n- Fixed issue with windows window background color\n- Added ref value for input elements\n- CheckBoxes and Radios now changes style when window is unfocused\n- Can now import components based on OS from 'react-desktop'\n\n## 0.2.16 (January 9th, 2017)\n\n- Custom styles for Windows text field's label\n- Default color for Windows text field's label changes based on theme\n\n## 0.2.15 (January 9th, 2017)\n\n- Fixed bug with macOs text field’s placeholder\n\n## 0.2.14 (September 19th, 2016)\n\n- Fixed duplicate onChange events on the windows textInput\n\n## 0.2.13 (August 25th, 2016)\n\n- Improve macOS title bar control icons\n\n## 0.2.12 (August 17th, 2016)\n\n- Fixed some styling issues with the list view\n- Fixed some styling issues with the windows\n\n## 0.2.11 (August 12th, 2016)\n\n- Added macOS list view component\n\n## 0.2.10 (August 11th, 2016)\n\n- Quick fix for the macOS text input component border issue\n\n## 0.2.9 (August 11th, 2016)\n\n- Added macOS search field component\n- Added centerPlaceholder, focusRing, icon and onEnter properties to the macOS text input component\n\n## 0.2.8 (August 8th, 2016)\n\n- Added macOS toolbar nav component\n- Added inset property to macOS title bar component\n- Added dimension and alignment properties to macOS toolbar component\n\n## 0.2.7 (July 28th, 2016)\n\n- Added macOS dialog component\n- Added bold property to macOS text\n- Added onEnter and disabled properties to macOS button\n- Fixed issues with margin on pin component for macOS\n\n## 0.2.6 (July 27th, 2016)\n\n- Added macOS pin component\n- Added size, padding and margin properties to macOS buttons\n- Fixed issues with text input for macOS\n- Added rounded corners and size properties to text input for macOS\n\n## 0.2.5 (July 18th, 2016)\n\n- Fixed some issues with View alignment\n\n## 0.2.4 (July 17th, 2016)\n\n- Removed all unknown props from components\n- Intial window focus is now the real window focus instead of being always true\n\n## 0.2.3 (June 24th, 2016)\n\n- Fixed bug with title bar in macOS\n\n## 0.2.2 (June 24th, 2016)\n\n- Added Link component for macOS\n- Added size to Text component\n- Added transparent option to titlebar for macOS\n- Fixed title bar size for macOS\n\n## 0.2.1 (June 14th, 2016)\n\n- Added support for React 15.1.0\n\n## 0.2.0 (May 16th, 2016)\n\n- Beta 1 release\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing Guidelines\n\nWe are open to, and grateful for, any contributions made by the community.\n\n## Reporting Issues and Asking Questions\n\nBefore opening an issue, please search the [issue tracker](https://github.com/gabrielbull/react-desktop/issues) \nto make sure your issue hasn’t already been reported.\n\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright © 2017 Gabriel Bull\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# <a href=\"http://reactdesktop.js.org/\" target=\"_blank\">![React Desktop](https://rawgit.com/gabrielbull/react-desktop/master/docs/resources/react-desktop.svg \"React Desktop\")</a>\n\n[![Build Status](https://travis-ci.org/gabrielbull/react-desktop.svg?branch=master)](https://travis-ci.org/gabrielbull/react-desktop)\n[![Code Climate](https://codeclimate.com/github/gabrielbull/react-desktop/badges/gpa.svg)](https://codeclimate.com/github/gabrielbull/react-desktop)\n[![GitHub license](https://img.shields.io/github/license/gabrielbull/react-desktop?style=square)](https://github.com/gabrielbull/react-desktop/blob/master/LICENSE)\n[![GitHub stars](https://img.shields.io/github/stars/gabrielbull/react-desktop)](https://github.com/gabrielbull/react-desktop/stargazers)\n[![npm downloads](http://img.shields.io/npm/dt/react-desktop.svg)](https://www.npmjs.org/package/react-desktop)\n[![npm version](https://img.shields.io/npm/v/react-desktop.svg)](https://www.npmjs.org/package/react-desktop)\n[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/gabrielbull/react-desktop?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)\n\nReact UI Components for macOS High Sierra and Windows 10.\n\n```npm \nnpm install react-desktop --save\n```\n\n<a href=\"http://reactdesktop.js.org/demo/\" target=\"_blank\">![Demo](https://rawgit.com/gabrielbull/react-desktop/master/docs/resources/demo.svg \"Demo\")</a>\n\n## Help wanted!\n\nI am looking for developers to help me develop this project. Please submit some ideas in the issues section or some PRs to get this project going. If you are interested, you can become a collaborator on the project. Thanks.\n\n## Contributing\n\nThis library has been created to bring a native desktop experience to the web. It works extremely well with tools such as [node-webkit](http://nwjs.io) or [Electron.js](http://electron.atom.io)!\n\nEveryone is welcome to contribute and add more components/documentation whilst following the [contributing guidelines](/CONTRIBUTING.md).\n\n## Documentation\n\nGuides on installation, components and advanced usage are found in the [documentation](http://reactdesktop.js.org).\n\n## Contributors\n<a href=\"https://github.com/gabrielbull/react-desktop/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=gabrielbull/react-desktop\" />\n</a> \n"
  },
  {
    "path": "demo/electron/.gitignore",
    "content": "node_modules/\ndist/"
  },
  {
    "path": "demo/electron/README.md",
    "content": "# React desktop Electron demo\n\n![TIM201907300143533f238.png](https://miao.su/images/2019/07/30/TIM201907300143533f238.png)\n\n## How to use\n\nFirst, enter the folder:\n\n```cd demo/electron```\n\nInstall the libraries:\n\n```npm i``` or ```yarn``` (if you have been installed it)\n\nBuild once:\n\n```npm run build```\n\nThen start the server:\n\n```npm run watch```\n\nOpen another console at the same folder, and run this command to start the Electron process:\n\n```npm start```\n\nThat's it!\n"
  },
  {
    "path": "demo/electron/babel.config.js",
    "content": "module.exports = function (api) {\n  api.cache(false);\n\n  const presets = [\n    [\n      '@babel/preset-env',\n      {\n        'modules': 'commonjs',\n        'targets': {\n          'node': 'current'\n        }\n      }\n    ],\n    [\n      '@babel/preset-react'\n    ]\n  ];\n  const plugins = [\n    [\n      '@babel/plugin-proposal-decorators',\n      {\n        'legacy': true\n      }\n    ],\n    [\n      '@babel/plugin-proposal-class-properties',\n      {\n        'loose': true\n      }\n    ]\n  ];\n\n  return {\n    presets,\n    plugins\n  };\n}"
  },
  {
    "path": "demo/electron/index.html",
    "content": "<!DOCTYPE html>\n\n<html>\n\n<head>\n  <meta charset=\"utf-8\">\n  <title>DEMO</title>\n\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n\n  <style>\n    html {\n      overflow-x: hidden;\n      overflow-y: hidden;\n      display: flex;\n      padding: 0px;\n      margin: 0px;\n    }\n\n    body {\n      padding: 0px;\n      margin: 0px;\n    }\n\n    .initTitle {\n      text-align: center;\n      margin-left: auto;\n      margin-right: auto;\n      font-size: 1.4em;\n      color: #333333;\n      background-color: rgba(255, 255, 255, 0.4);\n      margin: 0px;\n      padding: 5px;\n      padding-left: 20px;\n      padding-right: 20px;\n    }\n\n    .position {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      width: 100%;\n      height: 100%;\n    }\n\n    .circleBox {\n      display: block;\n      background-color: rgba(255, 255, 255, 0.4);\n      margin: 0px;\n      padding: 10px;\n    }\n\n    .outside {\n      display: inline-block;\n      line-height: 1;\n      transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n      animation: rotate 1.4s linear infinite;\n      animation-name: rotate;\n    }\n\n    .svgPrimary {\n      color: #3399cc;\n    }\n\n    .circle {\n      stroke: currentColor;\n      animation: dash 1.4s ease-in-out infinite;\n      animation-name: dash;\n      stroke-dasharray: 80px, 200px;\n      stroke-dashoffset: 0px;\n    }\n\n    @keyframes rotate {\n      100% {\n        transform: rotate(360deg);\n      }\n    }\n\n    @keyframes dash {\n      0% {\n        stroke-dasharray: 1px, 200px;\n        stroke-dashoffset: 0px;\n      }\n\n      50% {\n        stroke-dasharray: 100px, 200px;\n        stroke-dashoffset: -15px;\n      }\n\n      100% {\n        stroke-dasharray: 100px, 200px;\n        stroke-dashoffset: -125px;\n      }\n    }\n  </style>\n</head>\n\n<body>\n  <div id=\"content\">\n    <div class=\"circleBox\">\n      <div class=\"position\">\n        <div class=\"outside\" style=\"width: 75px; height: 75px;\">\n          <svg class=\"svgPrimary\" viewBox=\"22 22 44 44\">\n            <circle class=\"circle\" cx=\"44\" cy=\"44\" r=\"20.2\" fill=\"none\" stroke-width=\"3.6\"></circle>\n          </svg>\n        </div>\n      </div>\n    </div>\n  </div>\n  <script src=\"./dist/bundle.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "demo/electron/index.js",
    "content": "const electron = require('electron');\nconst { app, BrowserWindow, Menu } = electron;\nlet mainWnd = null;\n\nfunction createMainWnd() {\n  mainWnd = new BrowserWindow({\n    width:800,\n    height:600,\n    minWidth:800,\n    maxWidth: 800,\n    minHeight: 600,\n    maxHeight: 600,\n    useContentSize: true,\n    show: false,\n    frame: false,\n    titleBarStyle: 'hidden',\n    webPreferences: {\n      nodeIntegration: true\n    }\n  });\n\n  mainWnd.loadURL('http://127.0.0.1:16000/index.html');\n\n  mainWnd.on('ready-to-show', ()=>{\n    Menu.setApplicationMenu(null);\n    mainWnd.show();\n    // mainWnd.webContents.openDevTools({ detach:true });\n  });\n\n  mainWnd.on('closed', () => {\n    mainWnd = null;\n    process.exit();\n  });\n}\n\napp.on('ready', ()=>{\n  createMainWnd();\n});\n\napp.on('window-all-closed', () => {\n  app.quit();\n});\n"
  },
  {
    "path": "demo/electron/package.json",
    "content": "{\n  \"name\": \"react-desktop-electron-demo\",\n  \"version\": \"0.1.0\",\n  \"description\": \"\",\n  \"private\": true,\n  \"scripts\": {\n    \"start\": \"electron ./index.js\",\n    \"watch\": \"webpack-dev-server --config ./webpack.config.js --colors --inline --port 16000\",\n    \"build\": \"webpack --config ./webpack.config.js\",\n    \"package\": \"electron-packager ./ ReactDesktop --all --overwrite --out=./packaged/\",\n    \"package:windows\": \"electron-packager ./ ReactDesktop --platform=win32 --overwrite --out=./packaged/\",\n    \"package:mac\": \"electron-builder build --mac --config electron-builder.json --publish never\",\n    \"test\": \"jest --watch\"\n  },\n  \"author\": \"langyo\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@babel/cli\": \"^7.5.5\",\n    \"@babel/core\": \"^7.5.5\",\n    \"@babel/plugin-proposal-class-properties\": \"^7.5.5\",\n    \"@babel/plugin-proposal-decorators\": \"^7.4.4\",\n    \"@babel/plugin-transform-flow-strip-types\": \"^7.4.4\",\n    \"@babel/preset-env\": \"^7.5.5\",\n    \"@babel/preset-react\": \"^7.0.0\",\n    \"@material-ui/core\": \"^4.3.0\",\n    \"babel-jest\": \"^24.8.0\",\n    \"babel-loader\": \"^8.0.6\",\n    \"classnames\": \"^2.2.6\",\n    \"prop-types\": \"^15.7.2\",\n    \"react\": \"^16.8.6\",\n    \"react-desktop\": \"^0.3.9\",\n    \"react-dom\": \"^16.8.6\"\n  },\n  \"keywords\": [],\n  \"devDependencies\": {\n    \"electron\": \"^9.1.0\",\n    \"electron-builder\": \"^21.1.5\",\n    \"electron-packager\": \"^14.0.3\",\n    \"jest\": \"^24.8.0\",\n    \"webpack\": \"^4.38.0\",\n    \"webpack-cli\": \"^3.3.6\",\n    \"webpack-dev-server\": \"^3.7.2\"\n  }\n}\n"
  },
  {
    "path": "demo/electron/page_index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Window, TitleBar } from 'react-desktop/windows';\nimport Button from '@material-ui/core/Button';\n\nReactDOM.render(<Window\n  chrome\n  height=\"600px\"\n  width=\"800px\"\n  padding=\"12px\">\n  <TitleBar title=\"My Windows Application\" controls onCloseClick={() => process.exit()}/>\n  <div>\n    <Button color=\"primary\" variant=\"outlined\">\n      {'Hello world!'}\n    </Button>\n  </div>\n</Window>, document.querySelector('#content'));\n"
  },
  {
    "path": "demo/electron/webpack.config.js",
    "content": "var path = require('path');\n\nmodule.exports = {\n  mode: 'development',\n\n  entry: './page_index.js',\n\n  output: {\n    filename: 'bundle.js'\n  },\n\n  devtool: 'source-map',\n\n  // resolve: {\n  //   alias: {\n  //     'react-desktop': path.join(__dirname, '..', '..')\n  //   }\n  // },\n\n  module: {\n    rules: [\n      {\n        test: /\\.(js)$/,\n        exclude: /node_modules/,\n        use: 'babel-loader'\n      }\n    ]\n  }\n};\n"
  },
  {
    "path": "docs/README.md",
    "content": "# Documentation\n\n**react-desktop** is a JavaScript library built on top of [Facebook's React](https://facebook.github.io/react/) library, \nwhich aims to bring a native desktop experience to the web, featuring many macOS High Sierra and Windows 10 components. \n**react-desktop** works perfectly with [NW.js](http://nwjs.io) and [Electron.js](http://electron.atom.io), but \ncan be used in any JavaScript powered project!\n\n## Table of Contents\n\n1. Getting Started\n  * [Installation](/docs/getting-started/installation.md)\n2. macOS\n  * [Box](/docs/mac-os/box.md)\n  * [Button](/docs/mac-os/button.md)\n  * [Checkbox](/docs/mac-os/checkbox.md)\n  * [Dialog](/docs/mac-os/dialog.md)\n  * [Label](/docs/mac-os/label.md)\n  * [Link](/docs/mac-os/link.md)\n  * [List View](/docs/mac-os/list-view.md)\n  * [Pin](/docs/mac-os/pin.md)\n  * [Progress Circle](/docs/mac-os/progress-circle.md)\n  * [Radio](/docs/mac-os/radio.md)\n  * [Search Field](/docs/mac-os/search-field.md)\n  * [Segmented Control](/docs/mac-os/segmented-control.md)\n  * [Text](/docs/mac-os/text.md)\n  * [Text Input](/docs/mac-os/text-input.md)\n  * [Title Bar](/docs/mac-os/title-bar.md)\n  * [Toolbar](/docs/mac-os/toolbar.md)\n  * [Toolbar Nav](/docs/mac-os/toolbar-nav.md)\n  * [View](/docs/mac-os/view.md)\n  * [Window](/docs/mac-os/window.md)\n3. Windows 10\n  * [Button](/docs/windows/button.md)\n  * [Checkbox](/docs/windows/checkbox.md)\n  * [Label](/docs/windows/label.md)\n  * [Master/Details View](/docs/windows/master-details-view.md)\n  * [Nav Pane](/docs/windows/nav-pane.md)\n  * [Progress Circle](/docs/windows/progress-circle.md)\n  * [Radio](/docs/windows/radio.md)\n  * [Text](/docs/windows/text.md)\n  * [Text Input](/docs/windows/text-input.md)\n  * [Title Bar](/docs/windows/title-bar.md)\n  * [View](/docs/windows/view.md)\n  * [Window](/docs/windows/window.md)\n4. [Contributing](/CONTRIBUTING.md)\n5. [Change Log](/CHANGELOG.md)\n\n<!---\n4. Advanced Usage\n * [Electron.js](/docs/advanced-usage/electron-js.md)\n * [NW.js](/docs/advanced-usage/nw-js.md)\n5. [Testing](/docs/testing.md)\n6. [Frequently Asked Questions](/docs/faq.md)\n-->\n"
  },
  {
    "path": "docs/advanced-usage/electron-js.md",
    "content": "# Electron.js\n\nDocumentation is coming soon.\n"
  },
  {
    "path": "docs/advanced-usage/nw-js.md",
    "content": "# NW.js\n\nDocumentation is coming soon.\n"
  },
  {
    "path": "docs/faq.md",
    "content": "# Frequently Asked Questions\n\nDocumentation is coming soon.\n"
  },
  {
    "path": "docs/getting-started/installation.md",
    "content": "# Installation\n\n**To install the stable version:**\n\n## [NPM](https://www.npmjs.com/)\n`npm install react-desktop --save`\n\n## [Yarn](https://yarnpkg.com)\n`yarn add react-desktop`\n"
  },
  {
    "path": "docs/mac-os/box.md",
    "content": "# Box\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbackground          | string         | Sets the background color of a component.\nheight              | number         | Sets the height of a component.\nhidden              | bool           | Sets the visibility of a component.\nhorizontalAlignment | string         | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nlabel               | string         | Adds a label to the box.\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nverticalAlignment   | string         | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number         | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Box, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Box label=\"Box\" padding=\"10px 30px\">\n        <Text>Some text...</Text>\n      </Box>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/button.md",
    "content": "# Button\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\ncolor               | string         | Sets the color of the button<br/>__Property value__ _null_ _\"blue\"_.\nhidden              | bool           | Sets the visibility of a component.\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\nonClick             | function       | Callback function when the button is pressed.\nonEnter             | function       | Callback function when the the enter key is pressed.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nsize                | string, number | Sets the font size of a component.\ntype                | string         | Sets the type of the button<br/>__Property value__ _\"button\"_ _\"submit\"_. Default value _\"button\"_.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Button } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Button color=\"blue\" onClick={() => console.log('Clicked!')}>\n        Press me!\n      </Button>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/checkbox.md",
    "content": "# Checkbox\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\ndefaultValue        | string       | Sets the default value of the input.\ndefaultChecked      | string       | If true, the checkbox is checked by default.\nhidden              | bool         | Sets the visibility of a component.\nlabel               | string       | Adds a label to the checkbox.\nonChange            | function     | Callback function when the checkbox has changed.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Checkbox } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Checkbox\n        label=\"Check me!\"\n        onChange={(e) => console.log(e.target.value)}\n        defaultValue=\"I got checked!\"\n        defaultChecked\n      />\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/dialog.md",
    "content": "# Dialog\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbuttons             | array          | Sets the buttons of the component.\nhorizontalAlignment | string         | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nicon                | element        | Sets the icon element of the component.\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\nmessage             | string         | Sets the message of the component.\ntitle               | string         | Sets the title of the component.\nverticalAlignment   | string         | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Dialog, Button } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Dialog\n        title=\"This is a title\"\n        message=\"This message is inside a dialog component.\"\n        icon={this.renderIcon()}\n        buttons={[\n          <Button onClick={() => console.log('close this dialog')}>Cancel</Button>,\n          <Button color=\"blue\" onClick={() => console.log('submit this dialog')}>Submit</Button>,\n        ]}\n      />\n    );\n  }\n\n  renderIcon() {\n    return (\n      <img\n        src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsSAAALEgHS3X78AAAP8UlEQVRo3u2aa4xd1XXHf3ufcx9z58547jxs7MExGL/w2DwKNNCmAZRQ1MoxFYZEbfOhmJAUlYQWKf1QqWlDWqmiVdNGIYmiBFGaNq1wiJQqkCZgQ5GhCXbB2OM3HhvLD8bznrlzH+ecvfrhnLPPPndMviQf+qHHtnzvPfvsvdZe//Vfj30UznX48OFB4DFgG7ABKPFLvARQv9gULeAo8APgK5s3b57oHGDnHz08ugP4drW7uqyv1ke1u4rW+pepzy98GWNYWFhgenqGxXp9TpCdIyMj31ui0Ojo6A7f95+96uqrVbFQiPdSFKLiPVVIsr0KQVAokPieJFuipHOLLn/lrdRhM0kmEhX/vMSk2SJBGDJ26pSEUXj/yOZMKTV6aHQI5OT6jRt6C17BKoEISqVTKJTEqsR/rVrx/UQQJSoTKBHAjlOCsgLG84tSibzJ5kgyukMZIZtbkptKIIgijh87PoeS9VtGtowDaEE+W+nu7vU9P1EmnkLZvUit4S5ALJAk41S6TLygqPgTikQIsQKKxIJLsklIfC8TVZL78SMiifUT2VSitAAFz6Na7e5F5I9TC2lBttdqtVgwyf6lk0miTKpEKoAFQSpQqnPuHuzb9TZv7Hrbfs8eFnc5u2YOXiLWylYe8jL19fUhoralT/kisqna3Z1MrxL0JDuYuUoOGplY6W65YDeIxFA6/uoYB54/CkDPUJVNt691fDB9RFKXReUcxvUlya3tjqlWuxExG62FMJS058UkYD1LoVQsJg4MM7gIoQhj9TDZgFgtZYEDR3af4NWn37BL731mH6MvnYynE4nhne64Uph3TkG7nUA5xnc6JoMqjtUSOGqNQDGzkMoGOBqRITVd1BkgcHwh4KGDM1xd8bmjv8S6isd1tSL9Gi785DjHvrYXr69CUPDQJn7ute8eQHWV2XzbMGpqivbbBzEnThK8/ApmbIzub34Db2Qk2TwsmSCglANLF5tWSQs5MCm75NDtPtfpN3CqHgEwthgythgC4JUL3KRCGmMLDF+3mpUXZigEEZGnUQi+hPzknw/jP/99Nu7+Gk2pYZRnN86MncbbPBJvXoo4ydbMKeE4qzg3tRhjWSZzcLGTSAKB1KFTGB6YD1hy1VvsDTUvfWSEp3bewemrh1g228gt3BXW+fHEOn468JsUTBtPIns/fOstSz6ZA4j9g2VAsfNZUrEKQcb7rnUsX1q7WvO2ImH3ZAuv7KO8jNYjT1MIImrTiwxMzDMwsUC75CczKERpClGTmdIgYytuQmuFdhQK9uxBWo0MHRnR5ZjUtUpM/cZRyMYBck/lLOaoKgJjTUNY9mlPNzHtCNWRIi1US6x75z1Wn52kXsnSQYVwqXIl1869yfbDTyLGEOhi9uBiC3Py1BLo5y5XSQQDGGeYTgOkDXAqmSj+kET4+HsjiDh0fp5v/fd5Jt44x4WXTtKabOB1F/KLKsUHzk5SbIcYbbHNXGmAq+eO8LGj36TYrtPwqw60QOqa8KXvYsaPIEEzCR/iQD/zbsuAkvch3/2SczyEejviUj3g2HiDF09M819js0zVQ8LFAEQw7YhwoYXSGaEYrSi3Awbnm4S+tqitF3pZEV1i2+l/wg8azJYGc3ADwINwz25YeAHx+vGuuQ296TdQV2xAVQegVMl8wzjMu1Qhl1KUtdC7My22PzW6xOp+pZD4TEjzUp1oMUB5ConiHGtFd4EHH/01jjyxm+mJBloMfRtWsf33bqHr4W8zE3l5ZQSkpaAF0VgBb12A6psiOvA80YHnASg+/Axq5cYst7SxWTAO5rRlMUsGGT43DnWxvFrg/S5d8AjmWkStEK/kx+wkwnoP+nqL3Pqlu6mUPHR3F5/47AiloRrR2k0oMZaIpK6hpdD9Bu/aAP+GFhRBgszqqjoAKzYgiRu4btIZYHxxGMIIICZLeVB86KplPHdoAkTFoVZl45WniBoh20pCeajEj4KIettwLREgKKXY/sW7MFrbrKW9fgv89C1UqYJ3+13oVQpz+N/QPQJd8dyyqCHEPqPW3WpLF8gypsxVOgKrZFSGm8YLcN2qbp47NImO/MQsCvFCWyLokk9lrskjNw7xwIDP/rmQTRXfwrq8rOzm0Xjbt1Fadw3ejTej+nowP3saJqNYiQWHLZ20Ta26NpfY2lCTliGdgdUm0LnsOsbetk01esMeFpafZXLtQZTR6KBkSw3lab7++kXaYUiPVtxRK7Ci5NRDidXTEMDyFeg77oBl3UjYJtz9LWROQwc/ZFteQm+9C5vEusyWzGlchUxWJ8SbriSXHfSUNGu3zjC/4gzNvnGmrjoMCH67nBRzQuhpDpyr23ie0a39BZvJ2wAN5vwhWAx+TpUrqCs3Q7kXcSNsUvBJElZct/Hj0AQdnG3N+52zR9nrv4VuFvDaZRq195hCGD53HcvLNfp6hV9f182agbI1cz6BTDYnLWZjb41LjGVXou/8FHLidViYRBamIGhi6xVjYOIdzKEXYMtvZZm3SwQmL7qfmi9FuXLc6blzp/jc/r1JeRBLVGhUafVOURk8wQsfvSepTJOqKC2eUh9MM2WneorT6Jh2qQ6gP/wgcvvO+P7TDyEXjkMYkeaYmBay+8sor4Bs+mhmYceXJA85tyLNlPnOmeN85o1X4lq+AxNeu4tDrQt85u0XrXXtnK4PugundEs+6kviGPLjv4O5d1GVMqqngq52oXoqKM+DSJAf/Q0cfN6pWnHW7sy2yRYC+PLxt/mTN/fy/pfgBUW+d+pdbn/5Ocabi0uyYKzF8qmLkhQFiWSNGeRf/whG/xMiE8MMAd9DlYtZIQTIS38P+/49nks5hWDehyRPiSKcW1ywAxQQidA2Bl9rPJUvlI/PztM2qR92BGj7f66yslAQBMIAJt9d6r5ZhM/fmh/PmT1OtnMWSukvy66fuP5W/vCakdTn8JSiv1TCV4pmFFEPQ5pRxIZqHwfv/jjDXd1OvZRStbtRGWtmqVYyunsQefBfkIH1YPj51433Irc/koNZhovUQpL/Ie2BfXHkZqq+z+Oj+1lVqXDr0BBzQcB8EHCx0WCoUGbPnffkrJBB2cmKnd/sp5zDCpR74JNfhWcegkvvgn8ZZW75XeS2P3DmdgtRF3K2v6YsY6WLf37jDcy1WuyZukDZ84hEqBWLDFcqlD2fJ078D0OlCr/SO8g11WV0+4W41FBOjyiNb25jMoVzex41dQx1/nXU4gVU7wJmFkwbVNrAlQLccE+sjIDKupUpYeYg5xuXlZJRkrVMeXzrr/KXR/dxsj5DYAxtY1BA2xj2TV8C4IWLZ/iLTbewuaffKaFzUI+7SNKh0swZvFe+kP1WAL1CI+8ZpAVoUBuuw3z4Uxl7dvqkkAOdzmPQ8eQE6wbhUnuRVhTlRkWSf+oDXdUM0al/5BJIpwpO11x2JcrNQtuxEt6QRvmgKwrNmLVArizPJsU4vqfFJA0JpwOaUrCI8NrkRSZaTbS6fH5iUHxkaDXdno8gnG/MMx+2bUB1SQIB06zTnhmPqbvYi1nz26g0g1dAkCh1hUbXFKo+gz67J6N5lbGxkBTWeR9KMejkJo7sR+anlygR2bwMNMIyX/HqxBhvTl/g2MIU21dt5O7l67GJQVL7K4Tg0s8YKOxibmorYffNmN4hKkFA5BczpUysVJq6qUuH4AN3kqZMqYVV6iL58sFkiYnNXLIBJxZmlyhUUoaiMngYCkrYO34c43QHji1G3J1YpnxuJ5GCYPip+H5zGrojeuUgFE4S+W0ivLgYc0p5l8L15FEiC2WSwwFlU618ppDGi844AZxrLnCmMZ+Dl0ao6Ra9qk2XivAw1mIQ95YPL8YzlCb+nLBxAlk8TnHqcRDBC8ah7WPaBUzdoIsaKiUI369+ADV7GmbfzYWCXBy6XE/BNstTrYEer8ifrb+RA3NT7Ju5xMXWIhGatniUVETUkeP5RIxLDWnNMnP6YVabV2hQizdj6vv482forqxAWgknRwYqJXR/lXByHmUEr2AQvxQLXV2JWflBoituQoq9GZlYz0hCwWW7PkltYb8APX6BLT39bO3p5/eH13Ghucg7i/O8PHGayeZEjoE9Iiakj7YU+ULl66w2r9M0g3YuEwkFNYUursBEkvmpArpKKK3Qgz2ElbWYNXcT1TZAz5X55MeWqpmcclmF0uMT4lihckEkm2dluYuVpS6Gij5PvjOZ4RbDnFSpSxdfqjzJbaUXaUWrEyJIYeITRf2ZEukSjTa6rxv9wfXo5V3MyKcp9a+11K+4jDBOd8qFn1UoPWpMtc/VevaEMAu2w6We3M41k8Pyr1T/ls2F12hGazDO6YVSAYpefK+PONg4V2SgXED3FTGLBl1bnijjZNn2KCKreMUp3Fx5teVGl/7c/M7G2GyHKn6Brb3Lc3JpZViQClC0Z0XpZUyA1v34/gBQRPugdBp7VKyUNJhtbMHvquYz8nzajiQhIB+1O3rbIlkEt8o4KXyWXkhyOAwbq4N2kjJxIP3T+ufYHfwOJT2bU0ipEsIMzdYorfZF2s0CSml0KUSXA7QXjw27rs2YjIzB3GwnRYq4kHM21u9MTyy8kwJK5TLjtLsqrCz32Oc29SxnU7WfWnmIjZW/pjU7jJrZRZbRFVFqHpFLBL2fpN39acL5SfzwLLpxjJ7iETyjUOVBp2pOBUtPzF2rqJwW79vbTt3QVS5tE3Q+uKarlwdW38BwVy9DxQpZVIZG7VEKUYCe/48UdICP6f0EYe0xlAjFgSqwBuFDzDQmkfpFdHWY/H6nz6qOn52MZmmmIK0gDEu+72WnZeljSYsyfvUgYxsl4CvNDX1X5BVNGyCiaA9+noIq4809C0DUey/hwKOJY6scs3pd/UjXQNaoca3i6GAZM+ltI9BqtxGRBUchjk5PTV0/NDTUYerko8pOxmOZ07op3aiOHU1ZU4Sg/xEIL6IQwv5HndQ/e/3E7aXnoovKlLAn9OnLG6mkSjE7O4uI2EMlH8wPzp0/f/3Q0BAdy+UVsfeS74aOlxKWAlcEguV/1Znv4nj4kjXfZ4iFmaM/IJy/cB7gh+koLcJXp6en55qtVsZkafyQdMfdDCI778w1MhwmdJMAu8tuHHBWcmySDxXO/7b6kLQzGw9rtlpMTU3NgfyDVei+HTvGxZid+/fvl3arTXqkn3Y7LU1aP4nFVSrr19kWlrMfWSEnlljcw+j0YDg9i0rbW5kyyYs2abGZLJciptVusX//PjEiO3fcu2M8Vcha+tldu+5TSj1Vq9V6hoeH6a/143nJaYAtySXLGlIrujurUoU7mcrJNhwg5d+EICGU9KUmN2OJn2sHbaanpzh//gIzMzPzIvLA/ffdt/T1skypZwdFeAzUx5SSjYgqWOZPegJLmMaxAJLrsSScoiwcs0YMTj3TIYk4EzkEECNC6oI6roQfCvKPH7///iUvAP7/9X/9+l8UQncgxFqS5wAAAABJRU5ErkJggg==\"\n        width=\"52\"\n        height=\"52\"\n      />\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/label.md",
    "content": "# Label\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\ncolor               | string         | Sets the color of the text.\nheight              | number         | Sets the height of a component.\nhidden              | bool           | Sets the visibility of a component.\nhorizontalAlignment | string         | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nverticalAlignment   | string         | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number         | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Label } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Label>My Label</Label>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/link.md",
    "content": "# Link\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\ncolor               | string         | Sets the color of the text.\nheight              | string, number | Sets the height of a component.\nhidden              | bool           | Sets the visibility of a component.\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nsize                | string, number | Sets the font size of a component.\ntextAlign           | string         | Sets the text alignment of the component's content.<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nwidth               | string, number | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { View, Link } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <View background=\"#efefef\" padding=\"20px\" width=\"300px\" direction=\"row\">\n        <Link color=\"red\">\n          This is a link\n        </Link>\n        <Link marginLeft=\"auto\">\n          This is another link\n        </Link>\n      </View>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/list-view.md",
    "content": "# ListView\n\n## ListView\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbackground          | string         | Sets the background color of a component.\nheight              | number         | Sets the height of a component.\nhidden              | bool           | Sets the visibility of a component.\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nwidth               | number         | Sets the width of a component.\n\n## ListViewFooter\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbackground          | string         | Sets the background color of a component.\nheight              | number         | Sets the height of a component.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nwidth               | number         | Sets the width of a component.\n\n## ListViewHeader\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbackground          | string         | Sets the background color of a component.\nheight              | number         | Sets the height of a component.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nwidth               | number         | Sets the width of a component.\n\n## ListViewRow\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbackground          | string         | Sets the background color of a component.\nheight              | number         | Sets the height of a component.\nhidden              | bool           | Sets the visibility of a component.\nhorizontalAlignment | string         | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nlayout              | string         | Sets the direction of the content.<br/>__Property value__ _\"horizontal\"_, _\"vertical\"_\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nverticalAlignment   | string         | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number         | Sets the width of a component.\n\n## ListViewSection\n\n### Properties\n\nProperty            | Type                   | Description\n:------------------ | :---------------------:| :----------\nheader              | string, element, array | Sets the header or header element of the component.\n\n## ListViewSectionHeader\n\n### Properties\n\nProperty            | Type                 | Description\n:------------------ | :-------------------:| :----------\nbold                | bool, number, string | Sets the bold value of a component.\ncolor               | string               | Sets the color of the text.\nmargin              | string, number       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number       | Sets the outer margin bottom of a component.\nmarginLeft          | string, number       | Sets the outer margin left of a component.\nmarginRight         | string, number       | Sets the outer margin right of a component.\nmarginTop           | string, number       | Sets the outer margin top of a component.\npadding             | string, number       | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number       | Sets the padding bottom inside a component.\npaddingLeft         | string, number       | Sets the padding left inside a component.\npaddingRight        | string, number       | Sets the padding right inside a component.\npaddingTop          | string, number       | Sets the padding top inside a component.\nsize                | string, number       | Sets the font size of a component.\n\n## ListViewSeparator\n\n### Properties\n\nProperty            | Type                 | Description\n:------------------ | :-------------------:| :----------\ncolor               | string               | Sets the color of the separator.\nheight              | number               | Sets the height of a component.\nhidden              | bool                 | Sets the visibility of a component.\nmargin              | string, number       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number       | Sets the outer margin bottom of a component.\nmarginLeft          | string, number       | Sets the outer margin left of a component.\nmarginRight         | string, number       | Sets the outer margin right of a component.\nmarginTop           | string, number       | Sets the outer margin top of a component.\npadding             | string, number       | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number       | Sets the padding bottom inside a component.\npaddingLeft         | string, number       | Sets the padding left inside a component.\npaddingRight        | string, number       | Sets the padding right inside a component.\npaddingTop          | string, number       | Sets the padding top inside a component.\nwidth               | number               | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport {\n  ListView,\n  ListViewHeader,\n  ListViewFooter,\n  ListViewSection,\n  ListViewSectionHeader,\n  ListViewRow,\n  ListViewSeparator,\n  Text\n} from 'react-desktop/macOs';\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this.state = { selected: null };\n  }\n\n  render() {\n    return (\n      <ListView background=\"#f1f2f4\" width=\"240\" height=\"200\">\n        <ListViewHeader>\n          <Text size=\"11\" color=\"#696969\">Order by name</Text>\n        </ListViewHeader>\n        <ListViewSection header={this.renderSectionHeader('My Section')}>\n          {this.renderItem('Item 1', 'This is the first item.')}\n          {this.renderItem('Item 2', 'This is the second item.')}\n          {this.renderItem('Item 3', 'This is the third item.')}\n        </ListViewSection>\n        <ListViewSeparator/>\n        <ListViewSection header={this.renderSectionHeader('My Section 2')}>\n          {this.renderItem('Item 4', 'This is the fourth item.')}\n          {this.renderItem('Item 5', 'This is the fifth item.')}\n          {this.renderItem('Item 6', 'This is the sixth item.')}\n        </ListViewSection>\n        <ListViewFooter>\n          <Text size=\"11\" color=\"#696969\">Status</Text>\n        </ListViewFooter>\n      </ListView>\n    );\n  }\n\n  renderSectionHeader(title) {\n    return (\n      <ListViewSectionHeader>\n        {title}\n      </ListViewSectionHeader>\n    );\n  }\n\n  renderItem(title, info) {\n    return (\n      <ListViewRow\n        onClick={() => this.setState({ selected: title })}\n        background={this.state.selected === title ? '#d8dadc' : null}\n      >\n        <svg x=\"0px\" y=\"0px\" width=\"18\" height=\"12\" viewBox=\"0 0 18 12\" style={{ marginRight: '6px' }}>\n          <path fill=\"#727476\" d=\"M13.2,0H4.9L0,6.8v3.7C0,11.3,0.7,12,1.5,12h15\n\tc0.8,0,1.5-0.7,1.5-1.5V6.8L13.2,0z M13.8,6.8L12.3,9L5.9,9L4.2,6.8l-3.1,0l4.2-6h7.4l4.2,6L13.8,6.8z\"/>\n          <polygon fill=\"#C9CBCD\" points=\"13.8,6.8 12.3,9 5.9,9 4.2,6.8 1.2,6.7 5.4,0.8 12.8,0.8\n\t17,6.7 \"/>\n        </svg>\n        <Text color=\"#414141\" size=\"13\">{info}</Text>\n      </ListViewRow>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/pin.md",
    "content": "# Pin\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nhidden              | bool           | Sets the visibility of a component.\nlength              | number         | Sets the length of the pin.\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\nonChange            | function       | Callback function when the input changes.\nreveal              | bool           | Reveals the characters in the pin.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Pin, View } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <View background=\"#efeff1\" padding=\"20px\">\n        <Pin\n          onChange={value => console.log(value)}\n          length={4}\n          reveal\n        />\n      </View>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/progress-circle.md",
    "content": "# Progress Circle\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\ncolor               | string       | Sets the color of the progress circle.\nhidden              | bool         | Sets the visibility of a component.\nsize                | number       | Sets the size of the progress circle.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { ProgressCircle } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <ProgressCircle size={25}/>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/radio.md",
    "content": "# Radio\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\ndefaultValue        | string       | Sets the default value of the input.\ndefaultChecked      | string       | If true, the radio is checked by default.\nhidden              | bool         | Sets the visibility of a component.\nlabel               | string       | Adds a label to the checkbox.\nname                | string       | Name of the input.\nonChange            | function     | Callback function when the checkbox has changed.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { View, Radio } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <View horizontalAlignment=\"center\" direction=\"column\">\n          <Radio\n            label=\"Check me!\"\n            name=\"radio1\"\n            onChange={(e) => console.log(e.target.value)}\n            defaultValue=\"I got checked!\"\n            defaultChecked\n          />\n          <Radio\n            label=\"Check me!\"\n            name=\"radio1\"\n            onChange={(e) => console.log(e.target.value)}\n            defaultValue=\"I got checked!\"\n          />\n      </View>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/search-field.md",
    "content": "# SearchField\n\n### Properties\n\nProperty            | Type                 | Description\n:------------------ | :-------------------:| :----------\ncancel              | bool                 | Sets whether the cancel button is visible.\ncenterPlaceholder   | bool                 | Sets whether the placeholder is animated and centered when the input is not focused.\ndefaultValue        | string               | Sets the default value of the input.\nfocusRing           | bool                 | Sets the visibility of the focus ring around the input.\nhidden              | bool                 | Sets the visibility of a component.\nicon                | element, array       | Adds an icon to the input.\nlabel               | string               | Adds a label to the input.\nmargin              | string, number       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number       | Sets the outer margin bottom of a component.\nmarginLeft          | string, number       | Sets the outer margin left of a component.\nmarginRight         | string, number       | Sets the outer margin right of a component.\nmarginTop           | string, number       | Sets the outer margin top of a component.\nonCancel            | function             | Callback function when the user press the cancel button.\nonChange            | function             | Callback function when the input changes.\nonEnter             | function             | Callback function when the enter key is pressed.\nplaceholder         | string               | Adds a placeholder to the input.\nrounded             | bool, number, string | Sets the roundness of the input border\nsize                | string, number       | Sets the font size of a component.\nvalue               | string               | Sets the value of the input.\nwidth               | number               | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { TitleBar, Toolbar, SearchField } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  handleChange = e => console.log(e.target.value);\n\n  render() {\n    return (\n      <TitleBar inset>\n        <Toolbar height=\"43\" horizontalAlignment=\"right\">\n          <SearchField\n            placeholder=\"Search\"\n            defaultValue=\"\"\n            onChange={this.handleChange}\n          />\n        </Toolbar>\n      </TitleBar>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/segmented-control.md",
    "content": "# Segmented Control\n\n## SegmentedControl\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbox                 | bool           | Sets whether the item is in a box or not.\nheight              | number         | Sets the height of a component.\nhidden              | bool           | Sets the visibility of a component.\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\nwidth               | number         | Sets the width of a component.\n\n## SegmentedControlItem\n\n### Properties\n\nProperty            | Type     | Description\n:------------------ | :-------:| :----------\ntitle               | string   | Sets the title of the item.\nonSelect            | function | Callback function when selecting an item.\nselected            | bool     | Sets whether the item is selected or not. \n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { SegmentedControl, SegmentedControlItem, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this.state = { selected: 1 }\n  }\n\n  render() {\n    return (\n      <SegmentedControl box>\n        {this.renderItems()}\n      </SegmentedControl>\n    );\n  }\n\n  renderItems() {\n    return [\n      this.renderItem(1, 'Tab 1', <Text>Content 1</Text>),\n      this.renderItem(2, 'Tab 2', <Text>Content 2</Text>),\n      this.renderItem(3, 'Tab 3', <Text>Content 3</Text>)\n    ];\n  }\n\n  renderItem(key, title, content) {\n    return (\n      <SegmentedControlItem\n        key={key}\n        title={title}\n        selected={this.state.selected === key}\n        onSelect={() => this.setState({ selected: key })}\n      >\n        {content}\n      </SegmentedControlItem>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/text-input.md",
    "content": "# TextInput\n\n### Properties\n\nProperty            | Type                 | Description\n:------------------ | :-------------------:| :----------\ncenterPlaceholder   | bool                 | Sets whether the placeholder is animated and centered when the input is not focused.\ndefaultValue        | string               | Sets the default value of the input.\nfocusRing           | bool                 | Sets the visibility of the focus ring around the input.\nhidden              | bool                 | Sets the visibility of a component.\nicon                | element, array       | Adds an icon to the input.\nlabel               | string               | Adds a label to the input.\nmargin              | string, number       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number       | Sets the outer margin bottom of a component.\nmarginLeft          | string, number       | Sets the outer margin left of a component.\nmarginRight         | string, number       | Sets the outer margin right of a component.\nmarginTop           | string, number       | Sets the outer margin top of a component.\nonChange            | function             | Callback function when the input changes.\nonEnter             | function             | Callback function when the enter key is pressed.\nplaceholder         | string               | Adds a placeholder to the input.\nrounded             | bool, number, string | Sets the roundness of the input border\nsize                | string, number       | Sets the font size of a component.\nvalue               | string               | Sets the value of the input.\nwidth               | number               | Sets the width of a component.\npassword            | bool                 | Sets the input type to password.\n\n### Methods\n\nMethod              | Type           | Description\n:------------------ | :-------------:| :----------\nfocus               | function       | Focus text input programmatically\nblur                | function       | Remove focus from text input programmatically\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { TextInput } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  handleChange = e => console.log(e.target.value);\n\n  render() {\n    return (\n      <TextInput\n        label=\"My Input\"\n        placeholder=\"My Input\"\n        defaultValue=\"\"\n        onChange={this.handleChange}\n      />\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/text.md",
    "content": "# Text\n\n### Properties\n\nProperty            | Type                 | Description\n:------------------ | :-------------------:| :----------\nbackground          | string               | Sets the background color of a component.\nbold                | bool, number, string | Sets the bold value of a component.\ncolor               | string               | Sets the color of the text.\nheight              | string, number       | Sets the height of a component.\nhidden              | bool                 | Sets the visibility of a component.\nmargin              | string, number       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number       | Sets the outer margin bottom of a component.\nmarginLeft          | string, number       | Sets the outer margin left of a component.\nmarginRight         | string, number       | Sets the outer margin right of a component.\nmarginTop           | string, number       | Sets the outer margin top of a component.\npadding             | string, number       | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number       | Sets the padding bottom inside a component.\npaddingLeft         | string, number       | Sets the padding left inside a component.\npaddingRight        | string, number       | Sets the padding right inside a component.\npaddingTop          | string, number       | Sets the padding top inside a component.\nsize                | string, number       | Sets the font size of a component.\ntextAlign           | string               | Sets the text alignment of the component's content.<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nwidth               | string, number       | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Text padding=\"0 100px\" textAlign=\"center\" size=\"16\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam justo urna, posuere vitae est et, accumsan\n        bibendum sapien. Suspendisse lobortis mollis finibus. Nunc tincidunt enim est, efficitur semper dolor luctus\n        eget. Donec faucibus dolor id leo tincidunt, condimentum mattis augue finibus. Etiam hendrerit ipsum nisi,\n        vel semper dolor malesuada a. Pellentesque a scelerisque sapien, quis interdum odio. Nulla posuere, velit sit\n        amet lacinia pharetra, sapien arcu convallis dolor, id congue erat lectus nec sem. Praesent pretium a nisi et\n        elementum. Cras lacinia sollicitudin suscipit. Phasellus accumsan felis odio. Pellentesque habitant morbi\n        tristique senectus et netus et malesuada fames ac turpis egestas.\n      </Text>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/title-bar.md",
    "content": "# TitleBar\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\ncontrols            | bool         | Sets the visibility of the controls of the title bar.\ninset               | bool         | Sets the controls of the title bar state to be inset.\nisFullscreen        | bool         | Sets the title bar state to fullscreen.\nonCloseClick        | function     | Callback function of the close button.\nonMaximizeClick     | function     | Callback function of the maximize button\nonMinimizeClick     | function     | Callback function of the minimize button\nonResizeClick       | function     | Callback function of the resize button\ntitle               | string       | Sets the title of the title bar.\ntransparent         | bool         | Make the title bar background transparent.\ndisableClose        | bool         | Disable the close button.\ndisableMinimize     | bool         | Disable the minimize button.\ndisableResize       | bool         | Disable the resize button.\ndisableFullscreen   | bool         | Disable fullscreen, will show the '+' maximize icon instead.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { View, TitleBar } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this.state = { isFullscreen: false };\n  }\n\n  render() {\n    return (\n      <TitleBar\n        title=\"untitled text 5\"\n        controls\n        isFullscreen={this.state.isFullscreen}\n        onCloseClick={() => console.log('Close window')}\n        onMinimizeClick={() => console.log('Minimize window')}\n        onMaximizeClick={() => console.log('Mazimize window')}\n        onResizeClick={() => this.setState({ isFullscreen: !this.state.isFullscreen })}\n      />\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/toolbar-nav.md",
    "content": "# Toolbar Nav\n\n## ToolbarNav\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nheight              | number       | Sets the height of a component.\nwidth               | number       | Sets the width of a component.\n\n## ToolbarNavItem\n\n### Properties\n\nProperty            | Type                   | Description\n:------------------ | :---------------------:| :----------\nicon                | element, array         | Sets the icon element of the item.\nonClick             | function               | Callback function when the item is pressed.\nselected            | bool                   | Sets whether the item is selected or not. \ntitle               | string                 | Sets the title of the item.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { TitleBar, Toolbar, ToolbarNav, ToolbarNavItem } from 'react-desktop/macOs';\n\nconst circle = (\n  <svg x=\"0px\" y=\"0px\" width=\"25px\" height=\"25px\" viewBox=\"0 0 25 25\">\n    <circle cx=\"12.5\" cy=\"12.5\" r=\"12.5\"/>\n  </svg>\n);\n\nconst star = (\n  <svg x=\"0px\" y=\"0px\" width=\"25px\" height=\"23.8px\" viewBox=\"0 0 25 23.8\">\n    <polygon points=\"12.5,0 16.4,7.8 25,9.1 18.8,15.2 20.2,23.8 12.5,19.7 4.8,23.8 6.2,15.2 0,9.1 8.6,7.8 \"/>\n  </svg>\n);\n\nconst polygon = (\n  <svg x=\"0px\" y=\"0px\" width=\"25px\" height=\"21.7px\" viewBox=\"0 0 25 21.7\">\n    <polygon points=\"6.2,21.7 0,10.8 6.2,0 18.8,0 25,10.8 18.8,21.7 \"/>\n  </svg>\n);\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this.state = { selected: 1 };\n  }\n\n  render() {\n    return (\n      <TitleBar>\n        <Toolbar>\n          <ToolbarNav>\n            <ToolbarNavItem\n              title=\"Item 1\"\n              icon={circle}\n              selected={this.state.selected === 1}\n              onClick={() => this.setState({ selected: 1 })}\n            />\n            <ToolbarNavItem\n              title=\"Item 2\"\n              icon={star}\n              selected={this.state.selected === 2}\n              onClick={() => this.setState({ selected: 2 })}\n            />\n            <ToolbarNavItem\n              title=\"Item 3\"\n              icon={polygon}\n              selected={this.state.selected === 3}\n              onClick={() => this.setState({ selected: 3 })}\n            />\n          </ToolbarNav>\n        </Toolbar>\n      </TitleBar>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/toolbar.md",
    "content": "# Toolbar\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nheight              | number       | Sets the height of a component.\nhorizontalAlignment | string       | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nverticalAlignment   | string       | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number       | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { TitleBar, Toolbar, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <TitleBar controls inset>\n        <Toolbar height=\"43\" horizontalAlignment=\"center\"/>\n      </TitleBar>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/view.md",
    "content": "# View\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbackground          | string         | Sets the background color of a component.\nheight              | number         | Sets the height of a component.\nhidden              | bool           | Sets the visibility of a component.\nhorizontalAlignment | string         | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nlayout              | string         | Sets the direction of the content.<br/>__Property value__ _\"horizontal\"_, _\"vertical\"_\nmargin              | string, number | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nmarginBottom        | string, number | Sets the outer margin bottom of a component.\nmarginLeft          | string, number | Sets the outer margin left of a component.\nmarginRight         | string, number | Sets the outer margin right of a component.\nmarginTop           | string, number | Sets the outer margin top of a component.\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nverticalAlignment   | string         | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number         | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { View, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <View\n        background=\"black\"\n        padding=\"20px\"\n        horizontalAlignment=\"center\"\n        verticalAlignment=\"center\"\n        width=\"200px\"\n        height=\"100px\"\n      >\n        <Text color=\"white\">Hello World</Text>\n      </View>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/mac-os/window.md",
    "content": "# Window\n\n### Properties\n\nProperty            | Type           | Description\n:------------------ | :-------------:| :----------\nbackground          | string         | Sets the background color of a component.\nchrome              | bool           | Sets the chrome of the window.\nheight              | number         | Sets the height of a component.\nhidden              | bool           | Sets the visibility of a component.\nhorizontalAlignment | string         | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\npadding             | string, number | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npaddingBottom       | string, number | Sets the padding bottom inside a component.\npaddingLeft         | string, number | Sets the padding left inside a component.\npaddingRight        | string, number | Sets the padding right inside a component.\npaddingTop          | string, number | Sets the padding top inside a component.\nverticalAlignment   | string         | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number         | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Window, TitleBar, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Window\n        chrome\n        height=\"300px\"\n        padding=\"10px\"\n      >\n        <TitleBar title=\"untitled text 5\" controls/>\n        <Text>Hello World</Text>\n      </Window>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/testing.md",
    "content": "# Testing\n\nDocumentation is coming soon.\n"
  },
  {
    "path": "docs/windows/button.md",
    "content": "# Button\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\ncolor               | string, bool | Sets whether the button is colored (bool) or sets the color of the button (string).\nhidden              | bool         | Sets the visibility of a component.\nonClick             | function     | Callback function when the button is pressed.\npush                | bool         | Display push animation when pressing the button.\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\ntype                | string       | Sets the type of the button<br/>__Property value__ _\"button\"_ _\"submit\"_. Default value _\"button\"_.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Button } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29'\n  };\n\n  render() {\n    return (\n      <Button push color={this.props.color} onClick={() => console.log('Clicked!')}>\n        Press me!\n      </Button>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/checkbox.md",
    "content": "# Checkbox\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\ncolor               | string       | Sets the color of the checkbox.\ndefaultValue        | string       | Sets the default value of the input.\ndefaultChecked      | string       | If true, the checkbox is checked by default.\nhidden              | bool         | Sets the visibility of a component.\nlabel               | string       | Adds a label to the checkbox.\nonChange            | function     | Callback function when the checkbox has changed.\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Checkbox } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <Checkbox\n        color={this.props.color}\n        theme={this.props.theme}\n        label=\"Check me!\"\n        onChange={(e) => console.log(e.target.value)}\n        defaultValue=\"I got checked!\"\n        defaultChecked\n      />\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/label.md",
    "content": "# Label\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nbackground          | string, bool | Sets whether the background is colored (bool) or sets the color of the background (string).\ncolor               | string, bool | Sets whether the text is colored (bool) or sets the color of the text (string).\nheight              | number       | Sets the height of a component.\nhidden              | bool         | Sets the visibility of a component.\nhorizontalAlignment | string       | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nmargin              | string       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\npadding             | string       | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\nverticalAlignment   | string       | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number       | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Label } from 'react-desktop/windows';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Label>My Label</Label>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/master-details-view.md",
    "content": "# MasterDetailsView\n\n## MasterDetailsView\n\n### Properties\n\nProperty            | Type   | Description\n:------------------ | :-----:| :----------\ncolor               | string | Sets the main color of a component.\ntheme               | string | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\n\n## MasterDetailsViewItem\n\n### Properties\n\nProperty            | Type   | Description\n:------------------ | :-----:| :----------\ncolor               | string | Sets the main color of a component.\ntheme               | string | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\n\n## MasterDetailsViewItemMaster\n\n### Properties\n\nProperty            | Type   | Description\n:------------------ | :-----:| :----------\ncolor               | string | Sets the main color of a component.\npush                | bool   | Display push animation when selecting an item.\nselected            | bool   | Master is selected.\ntheme               | string | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\nwidth               | number | Sets the width of a component.\n\n## MasterDetailsViewItemDetails\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nbackground          | string, bool | Sets the background color of a component, if bool, the color will be used as the background color.\ncolor               | string       | Sets the main color of a component.\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport {\n  MasterDetailsView,\n  MasterDetailsViewItem,\n  MasterDetailsViewItemMaster,\n  MasterDetailsViewItemDetails,\n  Text\n} from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <MasterDetailsView color={this.props.color} theme={this.props.theme}>\n        {this.renderItem('Item 1', 'Content 1')}\n        {this.renderItem('Item 2', 'Content 2')}\n        {this.renderItem('Item 3', 'Content 3')}\n      </MasterDetailsView>\n    );\n  }\n\n  renderItem(master, details) {\n    return (\n      <MasterDetailsViewItem>\n        <MasterDetailsViewItemMaster push>\n          {master}\n        </MasterDetailsViewItemMaster>\n        <MasterDetailsViewItemDetails background>\n          <Text padding=\"20px\" color=\"white\">{details}</Text>\n        </MasterDetailsViewItemDetails>\n      </MasterDetailsViewItem>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/nav-pane.md",
    "content": "# NavPane\n\n## NavPane\n\n### Properties\n\nProperty              | Type           | Description\n:-------------------- | :-------------:| :----------\ncanPaneToggle         | bool           | Sets whether the pane can be compacted. <br/>Default value _\"true\"_.\ncolor                 | string         | Sets the main color of a component.\ndefaultIsPaneExpanded | string         | Sets whether the pane is expanded by default. <br/>Default value _\"true\"_.\nonPaneToggle          | function       | Callback function when the pane is expanded or compacted.\npaneCompactedLength   | string, number | Sets the length of the pane when compacted.<br/>Default value _\"48px\"_.\npaneExpandedLength    | string, number | Sets the length of the pane when expanded.<br/>Default value _\"200px\"_\ntheme                 | string         | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\n\n## NavPaneItem\n\n### Properties\n\nProperty             | Type                   | Description\n:------------------- | :---------------------:| :----------\nbackground           | string, bool           | Sets the background color of a component, if bool, the color will be used as the background color.\ncolor                | string                 | Sets the main color of a component.\nhorizontalAlignment  | string                 | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nicon                 | string, element, array | Sets the icon element of the item.\nmargin               | string                 | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nonSelect             | function               | Callback function when an item is selected.\npadding              | string                 | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\npush                 | bool                   | Display push animation when pressing the button.\nselected             | bool                   | Sets whether the item is selected or not.\ntitle                | string, element, array | Sets the title of the element.\ntheme                | string                 | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\nverticalAlignment    | string                 | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { NavPane, NavPaneItem, Text } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  constructor() {\n    super();\n    this.state = {\n      selected: 'Item 1'\n    }\n  }\n\n  render() {\n    return (\n      <NavPane openLength={200} push color={this.props.color} theme={this.props.theme}>\n        {this.renderItem('Item 1', 'Content 1')}\n        {this.renderItem('Item 2', 'Content 2')}\n        {this.renderItem('Item 3', 'Content 3')}\n      </NavPane>\n    );\n  }\n\n  renderItem(title, content) {\n    return (\n      <NavPaneItem\n        title={title}\n        icon={this.renderIcon(title)}\n        theme=\"light\"\n        background=\"#ffffff\"\n        selected={this.state.selected === title}\n        onSelect={() => this.setState({ selected: title })}\n        padding=\"10px 20px\"\n        push\n      >\n        <Text>{content}</Text>\n      </NavPaneItem>\n    );\n  }\n\n  renderIcon(name) {\n    const fill = this.props.theme === 'dark' ? '#ffffff' : '#000000';\n    switch(name) {\n    case 'Item 1':\n      return (\n        <svg x=\"0px\" y=\"0px\" width=\"16px\" height=\"14.9px\" viewBox=\"0 0 16 14.9\">\n          <polygon fill={fill} points=\"16,5.6 10.6,4.7 8,0 5.4,4.7 0,5.7 3.8,9.6 3.1,14.9 8,12.6 13,14.8 12.3,9.5 \"/>\n        </svg>\n      );\n    case 'Item 2':\n      return (\n        <svg x=\"0px\" y=\"0px\" width=\"16px\" height=\"13.5px\" viewBox=\"0 0 16 13.5\">\n          <path\n            fill={fill}\n            d=\"M16,4.2C16,1.9,14.1,0,11.7,0c-1.4,0-2.6,0.6-3.4,1.6c0,0,0,0,0,0C8.3,1.7,8.1,1.8,8,1.8\n            c-0.2,0-0.3-0.1-0.4-0.2c0,0,0,0,0,0C6.8,0.6,5.6,0,4.3,0C1.9,0,0,1.9,0,4.2c0,0,0,0.1,0,0.1l0,0c0,0,0,0.1,0,0.3\n            C0,4.8,0.1,5,0.1,5.2c0.3,1.4,1.4,4.1,5.1,6.5c2.1,1.4,2.6,1.8,2.8,1.8c0,0,0,0,0,0c0,0,0,0,0,0c0.1,0,0.7-0.4,2.8-1.8\n            c3.5-2.3,4.6-4.8,5-6.3C15.9,5.1,16,4.8,16,4.5C16,4.3,16,4.2,16,4.2L16,4.2C16,4.2,16,4.2,16,4.2z\"\n          />\n        </svg>\n      );\n    case 'Item 3':\n      return (\n        <svg x=\"0px\" y=\"0px\" width=\"16px\" height=\"15.6px\" viewBox=\"0 0 16 15.6\">\n          <path\n            fill={fill}\n            d=\"M14.9,3.2c0.7-0.9,1-1.7,1.1-2.4c0-0.2,0-0.4-0.1-0.5c0,0,0-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1\n            C15.6,0,15.4,0,15.2,0c-0.7,0-1.6,0.4-2.4,1c-0.7,0.5-1.4,1.2-2.4,2.3C10.2,3.5,10,3.6,9.8,3.8L8.3,3.4L7.9,3.3C8,3.2,8.1,3.1,8.1,3\n            c0-0.1,0-0.2-0.1-0.3L7.6,2.3C7.5,2.3,7.4,2.2,7.3,2.2c-0.1,0-0.2,0-0.3,0.1L6.5,2.8L6.2,2.8c0.1-0.1,0.1-0.2,0.1-0.3\n            c0-0.1,0-0.2-0.1-0.3L5.8,1.9C5.7,1.8,5.6,1.8,5.5,1.8c-0.1,0-0.2,0-0.3,0.1L4.7,2.3L2.8,1.8c0,0-0.1,0-0.1,0\n            c-0.1,0-0.3,0.1-0.4,0.1L1.6,2.6C1.5,2.6,1.5,2.7,1.5,2.8c0,0.1,0.1,0.3,0.2,0.3l4.1,2.2c0,0,0.1,0.1,0.1,0.1L7,6.6\n            C6,7.7,5,8.8,4.2,9.7C4.2,9.8,4.1,9.9,4,10L0.9,9.7c0,0,0,0-0.1,0c-0.1,0-0.3,0.1-0.4,0.2l-0.3,0.3C0,10.3,0,10.4,0,10.5\n            c0,0.1,0.1,0.3,0.2,0.3l2.2,1c0,0,0.1,0,0.1,0.1l0.2,0.2c-0.1,0.2-0.1,0.3-0.1,0.4c0,0.2,0.1,0.3,0.2,0.4C2.9,13,3,13.1,3.2,13.1\n            c0.1,0,0.3,0,0.4-0.1l0.2,0.2c0,0,0,0.1,0.1,0.1l1.1,2.2c0.1,0.1,0.2,0.2,0.4,0.2c0.1,0,0.2,0,0.3-0.1l0.3-0.3C6,15.1,6,14.9,6,14.8\n            c0,0-0.3-3.1-0.3-3.1c0.1-0.1,0.2-0.1,0.3-0.2c1-0.7,2.1-1.7,3.2-2.7l1.2,1.1c0,0,0.1,0.1,0.1,0.1l2.3,4c0.1,0.1,0.2,0.2,0.3,0.2\n            c0.1,0,0.2,0,0.3-0.1l0.7-0.7c0.1-0.1,0.1-0.2,0.1-0.3c0,0,0-0.1,0-0.1l-0.5-1.8L13.6,11l0.5-0.4c0.1-0.1,0.1-0.2,0.1-0.3\n            c0-0.1,0-0.2-0.1-0.3l-0.3-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1l-0.1-0.3l0.5-0.5c0.1-0.1,0.1-0.2,0.1-0.3\n            c0-0.1,0-0.2-0.1-0.3l-0.3-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1L12.1,6c0.2-0.2,0.4-0.4,0.6-0.5\n            C13.7,4.5,14.4,3.8,14.9,3.2z\"\n          />\n        </svg>\n      );\n    }\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/progress-circle.md",
    "content": "# Progress Circle\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\ncolor               | string       | Sets the color of the progress circle.\nhidden              | bool         | Sets the visibility of a component.\nsize                | number       | Sets the size of the progress circle.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { ProgressCircle } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29'\n  };\n\n  render() {\n    return (\n      <ProgressCircle\n        color={this.props.color}\n        size={100}\n      />\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/radio.md",
    "content": "# Radio\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\ncolor               | string       | Sets the color of the radio.\ndefaultValue        | string       | Sets the default value of the input.\ndefaultChecked      | string       | If true, the radio is checked by default.\nhidden              | bool         | Sets the visibility of a component.\nlabel               | string       | Adds a label to the checkbox.\nname                | string       | Name of the input.\nonChange            | function     | Callback function when the checkbox has changed.\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { View, Radio } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <View horizontalAlignment=\"center\" layout=\"vertical\" theme={this.props.theme}>\n          <Radio\n            color={this.props.color}\n            label=\"Check me!\"\n            name=\"radio1\"\n            onChange={(e) => console.log(e.target.value)}\n            defaultValue=\"I got checked!\"\n            defaultChecked\n          />\n          <Radio\n            color={this.props.color}\n            label=\"Check me!\"\n            name=\"radio1\"\n            onChange={(e) => console.log(e.target.value)}\n            defaultValue=\"I got checked!\"\n          />\n      </View>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/text-input.md",
    "content": "# TextInput\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nbackground          | string, bool | Sets the background color of a component, if bool, the color will be used as the background color.\ncolor               | string       | Sets the main color of a component and it's children.\ndefaultValue        | string       | Sets the default value of the input.\nhidden              | bool         | Sets the visibility of a component.\nlabel               | string       | Adds a label to the input.\nlabelColor          | string, bool | Sets whether the label text is colored (bool) or sets the color of the label text (string).\nlabelStyle          | object       | Custom styles for the label.\nmargin              | string       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\nonChange            | function     | Callback function when the input changes.\nplaceholder         | function     | Adds a placeholder to the input.\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\nvalue               | string       | Sets the value of the input.\nwidth               | number       | Sets the width of a component.\npassword            | bool         | Sets the input type to password.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { TextInput } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  handleChange = e => console.log(e.target.value);\n\n  render() {\n    return (\n      <TextInput\n        ref=\"input\"\n        theme={this.props.theme}\n        color={this.props.color}\n        background\n        label=\"My Input\"\n        placeholder=\"My Input\"\n        onChange={this.handleChange}\n      />\n    );\n  }\n}\n```\n\n"
  },
  {
    "path": "docs/windows/text.md",
    "content": "# Text\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nbackground          | string, bool | Sets whether the background is colored (bool) or sets the color of the background (string).\ncolor               | string, bool | Sets whether the text is colored (bool) or sets the color of the text (string).\nheight              | number       | Sets the height of a component.\nhidden              | bool         | Sets the visibility of a component.\nhorizontalAlignment | string       | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nmargin              | string       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\npadding             | string       | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\nverticalAlignment   | string       | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number       | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Text } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <Text\n        background={this.props.color}\n        theme={this.props.theme}\n        width=\"100%\"\n        horizontalAlignment=\"center\"\n        verticalAlignment=\"center\"\n        padding=\"100px\"\n      >\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam justo urna, posuere vitae est et, accumsan\n        bibendum sapien. Suspendisse lobortis mollis finibus. Nunc tincidunt enim est, efficitur semper dolor luctus\n        eget. Donec faucibus dolor id leo tincidunt, condimentum mattis augue finibus. Etiam hendrerit ipsum nisi,\n        vel semper dolor malesuada a. Pellentesque a scelerisque sapien, quis interdum odio. Nulla posuere, velit sit\n        amet lacinia pharetra, sapien arcu convallis dolor, id congue erat lectus nec sem. Praesent pretium a nisi et\n        elementum. Cras lacinia sollicitudin suscipit. Phasellus accumsan felis odio. Pellentesque habitant morbi\n        tristique senectus et netus et malesuada fames ac turpis egestas.\n      </Text>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/title-bar.md",
    "content": "# TitleBar\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nbackground          | string, bool | Sets the background color of a component, if bool, the color will be used as the background color.\ncontrols            | bool         | Sets the visibility of the controls of the title bar.\ncolor               | string       | Sets the main color of a component and it's children.\nisMaximized         | bool         | Sets the title bar state to maximized.\nonCloseClick        | function     | Callback function of the close button.\nonMaximizeClick     | function     | Callback function of the maximize button\nonMinimizeClick     | function     | Callback function of the minimize button\nonRestoreDownClick  | function     | Callback function of the restore down button\ntitle               | string       | Sets the title of the title bar.\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { TitleBar } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  constructor(props) {\n    super(props);\n    this.state = { isMaximized: true };\n  }\n\n  close = () => console.log('close');\n  minimize = () => console.log('minimize');\n  toggleMaximize = () => this.setState({ isMaximized: !this.state.isMaximized });\n\n  render() {\n    return (\n      <TitleBar\n        title=\"My Windows Application\"\n        controls\n        isMaximized={this.state.isMaximized}\n        theme={this.props.theme}\n        background={this.props.color}\n        onCloseClick={this.close}\n        onMinimizeClick={this.minimize}\n        onMaximizeClick={this.toggleMaximize}\n        onRestoreDownClick={this.toggleMaximize}\n      />\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/view.md",
    "content": "# View\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nbackground          | string, bool | Sets the background color of a component, if bool, the color will be used as the background color.\ncolor               | string       | Sets the main color of a component and it's children.\nheight              | number       | Sets the height of a component.\nhidden              | bool         | Sets the visibility of a component.\nhorizontalAlignment | string       | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\nlayout              | string       | Sets the direction of the content.<br/>__Property value__ _\"horizontal\"_, _\"vertical\"_\nmargin              | string       | Sets the outer margin of a component.<br/>__E.G.__ _\"30px 20px\"_\npadding             | string       | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\nverticalAlignment   | string       | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number       | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { View, Text } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <View\n        color={this.props.color}\n        background\n        padding=\"20px\"\n        horizontalAlignment=\"center\"\n        verticalAlignment=\"center\"\n        width=\"200px\"\n        height=\"100px\"\n      >\n        <Text color={this.props.theme === 'dark' ? 'white' : '#333'}>Hello World</Text>\n      </View>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "docs/windows/window.md",
    "content": "# Window\n\n### Properties\n\nProperty            | Type         | Description\n:------------------ | :-----------:| :----------\nbackground          | string, bool | Sets the background color of a component, if bool, the color will be used as the background color.\nchrome              | bool         | Sets the chrome of the window.\ncolor               | string       | Sets the main color of a component and it's children.\nheight              | number       | Sets the height of a component.\nhidden              | bool         | Sets the visibility of a component.\nhorizontalAlignment | string       | Sets the horizontal alignment of the component's content<br/>__Property value__ _\"left\"_, _\"center\"_, _\"right\"_\npadding             | string       | Sets the padding inside a component.<br/>__E.G.__ _\"30px 20px\"_\ntheme               | string       | Sets the UI theme that is used by this component and its children elements.<br/>__Property value__ _\"light\"_, _\"dark\"_\nverticalAlignment   | string       | Sets the vertical alignment of the component's content.<br/>__Property value__ _\"top\"_, _\"center\"_, _\"bottom\"_\nwidth               | number       | Sets the width of a component.\n\n### Examples\n\n```jsx\nimport React, { Component } from 'react';\nimport { Window, TitleBar, Text } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <Window\n        color={this.props.color}\n        theme={this.props.theme}\n        chrome\n        height=\"300px\"\n        padding=\"12px\"\n      >\n        <TitleBar title=\"My Windows Application\" controls/>\n        <Text color={this.props.theme === 'dark' ? 'white' : '#333'}>Hello World</Text>\n      </Window>\n    );\n  }\n}\n```\n"
  },
  {
    "path": "examples/macOs/advanced/pinDialog.js",
    "content": "import React, { Component } from 'react';\nimport { View, Dialog, Pin, Button, Text, ProgressCircle } from 'react-desktop/macOs';\n\nclass PinDialog extends Component {\n  constructor() {\n    super();\n    this.state = {\n      pin: '',\n      error: null,\n      loading: false\n    };\n  }\n\n  submit = () => {\n    this.setState({ loading: true });\n    setTimeout(() => {\n      this.setState({ loading: false, error: 'The confirmation code you entered is incorrect.' });\n    }, 1500);\n  };\n\n  render() {\n    let error;\n    if (this.state.error) {\n      error = <Text color=\"red\" marginBottom=\"16px\">{this.state.error}</Text>;\n    }\n\n    return (\n      <View width=\"596px\" background=\"#efefef\">\n        <Dialog\n          title=\"Confirmation code\"\n          message=\"A confirmation code has been sent to your email. Enter the code you received by email below.\"\n          icon={this.renderIcon()}\n          buttons={[\n            <Button\n              disabled={this.state.loading}\n            >\n              Cancel\n            </Button>,\n            <Button\n              color=\"blue\"\n              onEnter={this.submit}\n              onClick={this.submit}\n              disabled={this.state.pin.length !== 4 || this.state.loading}\n            >\n              Submit\n            </Button>\n          ]}\n          horizontalAlignment=\"center\"\n        >\n          {error}\n          <ProgressCircle\n            hidden={!this.state.loading}\n            style={{ position: 'absolute', bottom: '46px', marginLeft: '-120px' }}\n          />\n          <Pin length={4} marginBottom=\"16px\" onChange={pin => this.setState({ pin })}/>\n          <Text>Enter the four digit security code</Text>\n        </Dialog>\n      </View>\n    );\n  }\n\n  renderIcon() {\n    return (\n      <img\n        src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsSAAALEgHS3X78AAAP8UlEQVRo3u2aa4xd1XXHf3ufcx9z58547jxs7MExGL/w2DwKNNCmAZRQ1MoxFYZEbfOhmJAUlYQWKf1QqWlDWqmiVdNGIYmiBFGaNq1wiJQqkCZgQ5GhCXbB2OM3HhvLD8bznrlzH+ecvfrhnLPPPndMviQf+qHHtnzvPfvsvdZe//Vfj30UznX48OFB4DFgG7ABKPFLvARQv9gULeAo8APgK5s3b57oHGDnHz08ugP4drW7uqyv1ke1u4rW+pepzy98GWNYWFhgenqGxXp9TpCdIyMj31ui0Ojo6A7f95+96uqrVbFQiPdSFKLiPVVIsr0KQVAokPieJFuipHOLLn/lrdRhM0kmEhX/vMSk2SJBGDJ26pSEUXj/yOZMKTV6aHQI5OT6jRt6C17BKoEISqVTKJTEqsR/rVrx/UQQJSoTKBHAjlOCsgLG84tSibzJ5kgyukMZIZtbkptKIIgijh87PoeS9VtGtowDaEE+W+nu7vU9P1EmnkLZvUit4S5ALJAk41S6TLygqPgTikQIsQKKxIJLsklIfC8TVZL78SMiifUT2VSitAAFz6Na7e5F5I9TC2lBttdqtVgwyf6lk0miTKpEKoAFQSpQqnPuHuzb9TZv7Hrbfs8eFnc5u2YOXiLWylYe8jL19fUhoralT/kisqna3Z1MrxL0JDuYuUoOGplY6W65YDeIxFA6/uoYB54/CkDPUJVNt691fDB9RFKXReUcxvUlya3tjqlWuxExG62FMJS058UkYD1LoVQsJg4MM7gIoQhj9TDZgFgtZYEDR3af4NWn37BL731mH6MvnYynE4nhne64Uph3TkG7nUA5xnc6JoMqjtUSOGqNQDGzkMoGOBqRITVd1BkgcHwh4KGDM1xd8bmjv8S6isd1tSL9Gi785DjHvrYXr69CUPDQJn7ute8eQHWV2XzbMGpqivbbBzEnThK8/ApmbIzub34Db2Qk2TwsmSCglANLF5tWSQs5MCm75NDtPtfpN3CqHgEwthgythgC4JUL3KRCGmMLDF+3mpUXZigEEZGnUQi+hPzknw/jP/99Nu7+Gk2pYZRnN86MncbbPBJvXoo4ydbMKeE4qzg3tRhjWSZzcLGTSAKB1KFTGB6YD1hy1VvsDTUvfWSEp3bewemrh1g228gt3BXW+fHEOn468JsUTBtPIns/fOstSz6ZA4j9g2VAsfNZUrEKQcb7rnUsX1q7WvO2ImH3ZAuv7KO8jNYjT1MIImrTiwxMzDMwsUC75CczKERpClGTmdIgYytuQmuFdhQK9uxBWo0MHRnR5ZjUtUpM/cZRyMYBck/lLOaoKgJjTUNY9mlPNzHtCNWRIi1US6x75z1Wn52kXsnSQYVwqXIl1869yfbDTyLGEOhi9uBiC3Py1BLo5y5XSQQDGGeYTgOkDXAqmSj+kET4+HsjiDh0fp5v/fd5Jt44x4WXTtKabOB1F/KLKsUHzk5SbIcYbbHNXGmAq+eO8LGj36TYrtPwqw60QOqa8KXvYsaPIEEzCR/iQD/zbsuAkvch3/2SczyEejviUj3g2HiDF09M819js0zVQ8LFAEQw7YhwoYXSGaEYrSi3Awbnm4S+tqitF3pZEV1i2+l/wg8azJYGc3ADwINwz25YeAHx+vGuuQ296TdQV2xAVQegVMl8wzjMu1Qhl1KUtdC7My22PzW6xOp+pZD4TEjzUp1oMUB5ConiHGtFd4EHH/01jjyxm+mJBloMfRtWsf33bqHr4W8zE3l5ZQSkpaAF0VgBb12A6psiOvA80YHnASg+/Axq5cYst7SxWTAO5rRlMUsGGT43DnWxvFrg/S5d8AjmWkStEK/kx+wkwnoP+nqL3Pqlu6mUPHR3F5/47AiloRrR2k0oMZaIpK6hpdD9Bu/aAP+GFhRBgszqqjoAKzYgiRu4btIZYHxxGMIIICZLeVB86KplPHdoAkTFoVZl45WniBoh20pCeajEj4KIettwLREgKKXY/sW7MFrbrKW9fgv89C1UqYJ3+13oVQpz+N/QPQJd8dyyqCHEPqPW3WpLF8gypsxVOgKrZFSGm8YLcN2qbp47NImO/MQsCvFCWyLokk9lrskjNw7xwIDP/rmQTRXfwrq8rOzm0Xjbt1Fadw3ejTej+nowP3saJqNYiQWHLZ20Ta26NpfY2lCTliGdgdUm0LnsOsbetk01esMeFpafZXLtQZTR6KBkSw3lab7++kXaYUiPVtxRK7Ci5NRDidXTEMDyFeg77oBl3UjYJtz9LWROQwc/ZFteQm+9C5vEusyWzGlchUxWJ8SbriSXHfSUNGu3zjC/4gzNvnGmrjoMCH67nBRzQuhpDpyr23ie0a39BZvJ2wAN5vwhWAx+TpUrqCs3Q7kXcSNsUvBJElZct/Hj0AQdnG3N+52zR9nrv4VuFvDaZRq195hCGD53HcvLNfp6hV9f182agbI1cz6BTDYnLWZjb41LjGVXou/8FHLidViYRBamIGhi6xVjYOIdzKEXYMtvZZm3SwQmL7qfmi9FuXLc6blzp/jc/r1JeRBLVGhUafVOURk8wQsfvSepTJOqKC2eUh9MM2WneorT6Jh2qQ6gP/wgcvvO+P7TDyEXjkMYkeaYmBay+8sor4Bs+mhmYceXJA85tyLNlPnOmeN85o1X4lq+AxNeu4tDrQt85u0XrXXtnK4PugundEs+6kviGPLjv4O5d1GVMqqngq52oXoqKM+DSJAf/Q0cfN6pWnHW7sy2yRYC+PLxt/mTN/fy/pfgBUW+d+pdbn/5Ocabi0uyYKzF8qmLkhQFiWSNGeRf/whG/xMiE8MMAd9DlYtZIQTIS38P+/49nks5hWDehyRPiSKcW1ywAxQQidA2Bl9rPJUvlI/PztM2qR92BGj7f66yslAQBMIAJt9d6r5ZhM/fmh/PmT1OtnMWSukvy66fuP5W/vCakdTn8JSiv1TCV4pmFFEPQ5pRxIZqHwfv/jjDXd1OvZRStbtRGWtmqVYyunsQefBfkIH1YPj51433Irc/koNZhovUQpL/Ie2BfXHkZqq+z+Oj+1lVqXDr0BBzQcB8EHCx0WCoUGbPnffkrJBB2cmKnd/sp5zDCpR74JNfhWcegkvvgn8ZZW75XeS2P3DmdgtRF3K2v6YsY6WLf37jDcy1WuyZukDZ84hEqBWLDFcqlD2fJ078D0OlCr/SO8g11WV0+4W41FBOjyiNb25jMoVzex41dQx1/nXU4gVU7wJmFkwbVNrAlQLccE+sjIDKupUpYeYg5xuXlZJRkrVMeXzrr/KXR/dxsj5DYAxtY1BA2xj2TV8C4IWLZ/iLTbewuaffKaFzUI+7SNKh0swZvFe+kP1WAL1CI+8ZpAVoUBuuw3z4Uxl7dvqkkAOdzmPQ8eQE6wbhUnuRVhTlRkWSf+oDXdUM0al/5BJIpwpO11x2JcrNQtuxEt6QRvmgKwrNmLVArizPJsU4vqfFJA0JpwOaUrCI8NrkRSZaTbS6fH5iUHxkaDXdno8gnG/MMx+2bUB1SQIB06zTnhmPqbvYi1nz26g0g1dAkCh1hUbXFKo+gz67J6N5lbGxkBTWeR9KMejkJo7sR+anlygR2bwMNMIyX/HqxBhvTl/g2MIU21dt5O7l67GJQVL7K4Tg0s8YKOxibmorYffNmN4hKkFA5BczpUysVJq6qUuH4AN3kqZMqYVV6iL58sFkiYnNXLIBJxZmlyhUUoaiMngYCkrYO34c43QHji1G3J1YpnxuJ5GCYPip+H5zGrojeuUgFE4S+W0ivLgYc0p5l8L15FEiC2WSwwFlU618ppDGi844AZxrLnCmMZ+Dl0ao6Ra9qk2XivAw1mIQ95YPL8YzlCb+nLBxAlk8TnHqcRDBC8ah7WPaBUzdoIsaKiUI369+ADV7GmbfzYWCXBy6XE/BNstTrYEer8ifrb+RA3NT7Ju5xMXWIhGatniUVETUkeP5RIxLDWnNMnP6YVabV2hQizdj6vv482forqxAWgknRwYqJXR/lXByHmUEr2AQvxQLXV2JWflBoituQoq9GZlYz0hCwWW7PkltYb8APX6BLT39bO3p5/eH13Ghucg7i/O8PHGayeZEjoE9Iiakj7YU+ULl66w2r9M0g3YuEwkFNYUursBEkvmpArpKKK3Qgz2ElbWYNXcT1TZAz5X55MeWqpmcclmF0uMT4lihckEkm2dluYuVpS6Gij5PvjOZ4RbDnFSpSxdfqjzJbaUXaUWrEyJIYeITRf2ZEukSjTa6rxv9wfXo5V3MyKcp9a+11K+4jDBOd8qFn1UoPWpMtc/VevaEMAu2w6We3M41k8Pyr1T/ls2F12hGazDO6YVSAYpefK+PONg4V2SgXED3FTGLBl1bnijjZNn2KCKreMUp3Fx5teVGl/7c/M7G2GyHKn6Brb3Lc3JpZViQClC0Z0XpZUyA1v34/gBQRPugdBp7VKyUNJhtbMHvquYz8nzajiQhIB+1O3rbIlkEt8o4KXyWXkhyOAwbq4N2kjJxIP3T+ufYHfwOJT2bU0ipEsIMzdYorfZF2s0CSml0KUSXA7QXjw27rs2YjIzB3GwnRYq4kHM21u9MTyy8kwJK5TLjtLsqrCz32Oc29SxnU7WfWnmIjZW/pjU7jJrZRZbRFVFqHpFLBL2fpN39acL5SfzwLLpxjJ7iETyjUOVBp2pOBUtPzF2rqJwW79vbTt3QVS5tE3Q+uKarlwdW38BwVy9DxQpZVIZG7VEKUYCe/48UdICP6f0EYe0xlAjFgSqwBuFDzDQmkfpFdHWY/H6nz6qOn52MZmmmIK0gDEu+72WnZeljSYsyfvUgYxsl4CvNDX1X5BVNGyCiaA9+noIq4809C0DUey/hwKOJY6scs3pd/UjXQNaoca3i6GAZM+ltI9BqtxGRBUchjk5PTV0/NDTUYerko8pOxmOZ07op3aiOHU1ZU4Sg/xEIL6IQwv5HndQ/e/3E7aXnoovKlLAn9OnLG6mkSjE7O4uI2EMlH8wPzp0/f/3Q0BAdy+UVsfeS74aOlxKWAlcEguV/1Znv4nj4kjXfZ4iFmaM/IJy/cB7gh+koLcJXp6en55qtVsZkafyQdMfdDCI778w1MhwmdJMAu8tuHHBWcmySDxXO/7b6kLQzGw9rtlpMTU3NgfyDVei+HTvGxZid+/fvl3arTXqkn3Y7LU1aP4nFVSrr19kWlrMfWSEnlljcw+j0YDg9i0rbW5kyyYs2abGZLJciptVusX//PjEiO3fcu2M8Vcha+tldu+5TSj1Vq9V6hoeH6a/143nJaYAtySXLGlIrujurUoU7mcrJNhwg5d+EICGU9KUmN2OJn2sHbaanpzh//gIzMzPzIvLA/ffdt/T1skypZwdFeAzUx5SSjYgqWOZPegJLmMaxAJLrsSScoiwcs0YMTj3TIYk4EzkEECNC6oI6roQfCvKPH7///iUvAP7/9X/9+l8UQncgxFqS5wAAAABJRU5ErkJggg==\"\n        width=\"52\"\n        height=\"52\"\n      />\n    );\n  }\n}\n\nexport default PinDialog;\n"
  },
  {
    "path": "examples/macOs/components/box.js",
    "content": "import React, { Component } from 'react';\nimport { Box, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Box label=\"Box\" padding=\"10px 30px\">\n        <Text>Some text...</Text>\n      </Box>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/button.js",
    "content": "import React, { Component } from 'react';\nimport { Button } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Button color=\"blue\" onClick={() => console.log('Clicked!')}>\n        Press me!\n      </Button>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/checkbox.js",
    "content": "import React, { Component } from 'react';\nimport { Checkbox } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Checkbox\n        label=\"Check me!\"\n        onChange={(e) => console.log(e.target.value)}\n        defaultValue=\"I got checked!\"\n        defaultChecked\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/dialog.js",
    "content": "import React, { Component } from 'react';\nimport { Dialog, Button } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Dialog\n        title=\"This is a title\"\n        message=\"This message is inside a dialog component.\"\n        icon={this.renderIcon()}\n        buttons={[\n          <Button onClick={() => console.log('close this dialog')}>Cancel</Button>,\n          <Button color=\"blue\" onClick={() => console.log('submit this dialog')}>Submit</Button>,\n        ]}\n      />\n    );\n  }\n\n  renderIcon() {\n    return (\n      <img\n        src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsSAAALEgHS3X78AAAP8UlEQVRo3u2aa4xd1XXHf3ufcx9z58547jxs7MExGL/w2DwKNNCmAZRQ1MoxFYZEbfOhmJAUlYQWKf1QqWlDWqmiVdNGIYmiBFGaNq1wiJQqkCZgQ5GhCXbB2OM3HhvLD8bznrlzH+ecvfrhnLPPPndMviQf+qHHtnzvPfvsvdZe//Vfj30UznX48OFB4DFgG7ABKPFLvARQv9gULeAo8APgK5s3b57oHGDnHz08ugP4drW7uqyv1ke1u4rW+pepzy98GWNYWFhgenqGxXp9TpCdIyMj31ui0Ojo6A7f95+96uqrVbFQiPdSFKLiPVVIsr0KQVAokPieJFuipHOLLn/lrdRhM0kmEhX/vMSk2SJBGDJ26pSEUXj/yOZMKTV6aHQI5OT6jRt6C17BKoEISqVTKJTEqsR/rVrx/UQQJSoTKBHAjlOCsgLG84tSibzJ5kgyukMZIZtbkptKIIgijh87PoeS9VtGtowDaEE+W+nu7vU9P1EmnkLZvUit4S5ALJAk41S6TLygqPgTikQIsQKKxIJLsklIfC8TVZL78SMiifUT2VSitAAFz6Na7e5F5I9TC2lBttdqtVgwyf6lk0miTKpEKoAFQSpQqnPuHuzb9TZv7Hrbfs8eFnc5u2YOXiLWylYe8jL19fUhoralT/kisqna3Z1MrxL0JDuYuUoOGplY6W65YDeIxFA6/uoYB54/CkDPUJVNt691fDB9RFKXReUcxvUlya3tjqlWuxExG62FMJS058UkYD1LoVQsJg4MM7gIoQhj9TDZgFgtZYEDR3af4NWn37BL731mH6MvnYynE4nhne64Uph3TkG7nUA5xnc6JoMqjtUSOGqNQDGzkMoGOBqRITVd1BkgcHwh4KGDM1xd8bmjv8S6isd1tSL9Gi785DjHvrYXr69CUPDQJn7ute8eQHWV2XzbMGpqivbbBzEnThK8/ApmbIzub34Db2Qk2TwsmSCglANLF5tWSQs5MCm75NDtPtfpN3CqHgEwthgythgC4JUL3KRCGmMLDF+3mpUXZigEEZGnUQi+hPzknw/jP/99Nu7+Gk2pYZRnN86MncbbPBJvXoo4ydbMKeE4qzg3tRhjWSZzcLGTSAKB1KFTGB6YD1hy1VvsDTUvfWSEp3bewemrh1g228gt3BXW+fHEOn468JsUTBtPIns/fOstSz6ZA4j9g2VAsfNZUrEKQcb7rnUsX1q7WvO2ImH3ZAuv7KO8jNYjT1MIImrTiwxMzDMwsUC75CczKERpClGTmdIgYytuQmuFdhQK9uxBWo0MHRnR5ZjUtUpM/cZRyMYBck/lLOaoKgJjTUNY9mlPNzHtCNWRIi1US6x75z1Wn52kXsnSQYVwqXIl1869yfbDTyLGEOhi9uBiC3Py1BLo5y5XSQQDGGeYTgOkDXAqmSj+kET4+HsjiDh0fp5v/fd5Jt44x4WXTtKabOB1F/KLKsUHzk5SbIcYbbHNXGmAq+eO8LGj36TYrtPwqw60QOqa8KXvYsaPIEEzCR/iQD/zbsuAkvch3/2SczyEejviUj3g2HiDF09M819js0zVQ8LFAEQw7YhwoYXSGaEYrSi3Awbnm4S+tqitF3pZEV1i2+l/wg8azJYGc3ADwINwz25YeAHx+vGuuQ296TdQV2xAVQegVMl8wzjMu1Qhl1KUtdC7My22PzW6xOp+pZD4TEjzUp1oMUB5ConiHGtFd4EHH/01jjyxm+mJBloMfRtWsf33bqHr4W8zE3l5ZQSkpaAF0VgBb12A6psiOvA80YHnASg+/Axq5cYst7SxWTAO5rRlMUsGGT43DnWxvFrg/S5d8AjmWkStEK/kx+wkwnoP+nqL3Pqlu6mUPHR3F5/47AiloRrR2k0oMZaIpK6hpdD9Bu/aAP+GFhRBgszqqjoAKzYgiRu4btIZYHxxGMIIICZLeVB86KplPHdoAkTFoVZl45WniBoh20pCeajEj4KIettwLREgKKXY/sW7MFrbrKW9fgv89C1UqYJ3+13oVQpz+N/QPQJd8dyyqCHEPqPW3WpLF8gypsxVOgKrZFSGm8YLcN2qbp47NImO/MQsCvFCWyLokk9lrskjNw7xwIDP/rmQTRXfwrq8rOzm0Xjbt1Fadw3ejTej+nowP3saJqNYiQWHLZ20Ta26NpfY2lCTliGdgdUm0LnsOsbetk01esMeFpafZXLtQZTR6KBkSw3lab7++kXaYUiPVtxRK7Ci5NRDidXTEMDyFeg77oBl3UjYJtz9LWROQwc/ZFteQm+9C5vEusyWzGlchUxWJ8SbriSXHfSUNGu3zjC/4gzNvnGmrjoMCH67nBRzQuhpDpyr23ie0a39BZvJ2wAN5vwhWAx+TpUrqCs3Q7kXcSNsUvBJElZct/Hj0AQdnG3N+52zR9nrv4VuFvDaZRq195hCGD53HcvLNfp6hV9f182agbI1cz6BTDYnLWZjb41LjGVXou/8FHLidViYRBamIGhi6xVjYOIdzKEXYMtvZZm3SwQmL7qfmi9FuXLc6blzp/jc/r1JeRBLVGhUafVOURk8wQsfvSepTJOqKC2eUh9MM2WneorT6Jh2qQ6gP/wgcvvO+P7TDyEXjkMYkeaYmBay+8sor4Bs+mhmYceXJA85tyLNlPnOmeN85o1X4lq+AxNeu4tDrQt85u0XrXXtnK4PugundEs+6kviGPLjv4O5d1GVMqqngq52oXoqKM+DSJAf/Q0cfN6pWnHW7sy2yRYC+PLxt/mTN/fy/pfgBUW+d+pdbn/5Ocabi0uyYKzF8qmLkhQFiWSNGeRf/whG/xMiE8MMAd9DlYtZIQTIS38P+/49nks5hWDehyRPiSKcW1ywAxQQidA2Bl9rPJUvlI/PztM2qR92BGj7f66yslAQBMIAJt9d6r5ZhM/fmh/PmT1OtnMWSukvy66fuP5W/vCakdTn8JSiv1TCV4pmFFEPQ5pRxIZqHwfv/jjDXd1OvZRStbtRGWtmqVYyunsQefBfkIH1YPj51433Irc/koNZhovUQpL/Ie2BfXHkZqq+z+Oj+1lVqXDr0BBzQcB8EHCx0WCoUGbPnffkrJBB2cmKnd/sp5zDCpR74JNfhWcegkvvgn8ZZW75XeS2P3DmdgtRF3K2v6YsY6WLf37jDcy1WuyZukDZ84hEqBWLDFcqlD2fJ078D0OlCr/SO8g11WV0+4W41FBOjyiNb25jMoVzex41dQx1/nXU4gVU7wJmFkwbVNrAlQLccE+sjIDKupUpYeYg5xuXlZJRkrVMeXzrr/KXR/dxsj5DYAxtY1BA2xj2TV8C4IWLZ/iLTbewuaffKaFzUI+7SNKh0swZvFe+kP1WAL1CI+8ZpAVoUBuuw3z4Uxl7dvqkkAOdzmPQ8eQE6wbhUnuRVhTlRkWSf+oDXdUM0al/5BJIpwpO11x2JcrNQtuxEt6QRvmgKwrNmLVArizPJsU4vqfFJA0JpwOaUrCI8NrkRSZaTbS6fH5iUHxkaDXdno8gnG/MMx+2bUB1SQIB06zTnhmPqbvYi1nz26g0g1dAkCh1hUbXFKo+gz67J6N5lbGxkBTWeR9KMejkJo7sR+anlygR2bwMNMIyX/HqxBhvTl/g2MIU21dt5O7l67GJQVL7K4Tg0s8YKOxibmorYffNmN4hKkFA5BczpUysVJq6qUuH4AN3kqZMqYVV6iL58sFkiYnNXLIBJxZmlyhUUoaiMngYCkrYO34c43QHji1G3J1YpnxuJ5GCYPip+H5zGrojeuUgFE4S+W0ivLgYc0p5l8L15FEiC2WSwwFlU618ppDGi844AZxrLnCmMZ+Dl0ao6Ra9qk2XivAw1mIQ95YPL8YzlCb+nLBxAlk8TnHqcRDBC8ah7WPaBUzdoIsaKiUI369+ADV7GmbfzYWCXBy6XE/BNstTrYEer8ifrb+RA3NT7Ju5xMXWIhGatniUVETUkeP5RIxLDWnNMnP6YVabV2hQizdj6vv482forqxAWgknRwYqJXR/lXByHmUEr2AQvxQLXV2JWflBoituQoq9GZlYz0hCwWW7PkltYb8APX6BLT39bO3p5/eH13Ghucg7i/O8PHGayeZEjoE9Iiakj7YU+ULl66w2r9M0g3YuEwkFNYUursBEkvmpArpKKK3Qgz2ElbWYNXcT1TZAz5X55MeWqpmcclmF0uMT4lihckEkm2dluYuVpS6Gij5PvjOZ4RbDnFSpSxdfqjzJbaUXaUWrEyJIYeITRf2ZEukSjTa6rxv9wfXo5V3MyKcp9a+11K+4jDBOd8qFn1UoPWpMtc/VevaEMAu2w6We3M41k8Pyr1T/ls2F12hGazDO6YVSAYpefK+PONg4V2SgXED3FTGLBl1bnijjZNn2KCKreMUp3Fx5teVGl/7c/M7G2GyHKn6Brb3Lc3JpZViQClC0Z0XpZUyA1v34/gBQRPugdBp7VKyUNJhtbMHvquYz8nzajiQhIB+1O3rbIlkEt8o4KXyWXkhyOAwbq4N2kjJxIP3T+ufYHfwOJT2bU0ipEsIMzdYorfZF2s0CSml0KUSXA7QXjw27rs2YjIzB3GwnRYq4kHM21u9MTyy8kwJK5TLjtLsqrCz32Oc29SxnU7WfWnmIjZW/pjU7jJrZRZbRFVFqHpFLBL2fpN39acL5SfzwLLpxjJ7iETyjUOVBp2pOBUtPzF2rqJwW79vbTt3QVS5tE3Q+uKarlwdW38BwVy9DxQpZVIZG7VEKUYCe/48UdICP6f0EYe0xlAjFgSqwBuFDzDQmkfpFdHWY/H6nz6qOn52MZmmmIK0gDEu+72WnZeljSYsyfvUgYxsl4CvNDX1X5BVNGyCiaA9+noIq4809C0DUey/hwKOJY6scs3pd/UjXQNaoca3i6GAZM+ltI9BqtxGRBUchjk5PTV0/NDTUYerko8pOxmOZ07op3aiOHU1ZU4Sg/xEIL6IQwv5HndQ/e/3E7aXnoovKlLAn9OnLG6mkSjE7O4uI2EMlH8wPzp0/f/3Q0BAdy+UVsfeS74aOlxKWAlcEguV/1Znv4nj4kjXfZ4iFmaM/IJy/cB7gh+koLcJXp6en55qtVsZkafyQdMfdDCI778w1MhwmdJMAu8tuHHBWcmySDxXO/7b6kLQzGw9rtlpMTU3NgfyDVei+HTvGxZid+/fvl3arTXqkn3Y7LU1aP4nFVSrr19kWlrMfWSEnlljcw+j0YDg9i0rbW5kyyYs2abGZLJciptVusX//PjEiO3fcu2M8Vcha+tldu+5TSj1Vq9V6hoeH6a/143nJaYAtySXLGlIrujurUoU7mcrJNhwg5d+EICGU9KUmN2OJn2sHbaanpzh//gIzMzPzIvLA/ffdt/T1skypZwdFeAzUx5SSjYgqWOZPegJLmMaxAJLrsSScoiwcs0YMTj3TIYk4EzkEECNC6oI6roQfCvKPH7///iUvAP7/9X/9+l8UQncgxFqS5wAAAABJRU5ErkJggg==\"\n        width=\"52\"\n        height=\"52\"\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/label.js",
    "content": "import React, { Component } from 'react';\nimport { Label } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Label>My Label</Label>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/link.js",
    "content": "import React, { Component } from 'react';\nimport { View, Link } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <View background=\"#efefef\" padding=\"20px\" width=\"300px\" direction=\"row\">\n        <Link color=\"red\">\n          This is a link\n        </Link>\n        <Link marginLeft=\"auto\">\n          This is another link\n        </Link>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/listView.js",
    "content": "import React, { Component } from 'react';\nimport {\n  ListView,\n  ListViewHeader,\n  ListViewFooter,\n  ListViewSection,\n  ListViewSectionHeader,\n  ListViewRow,\n  ListViewSeparator,\n  Text\n} from 'react-desktop/macOs';\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this.state = { selected: null };\n  }\n\n  render() {\n    return (\n      <ListView background=\"#f1f2f4\" width=\"240\" height=\"200\">\n        <ListViewHeader>\n          <Text size=\"11\" color=\"#696969\">Order by name</Text>\n        </ListViewHeader>\n        <ListViewSection header={this.renderSectionHeader('My Section')}>\n          {this.renderItem('Item 1', 'This is the first item.')}\n          {this.renderItem('Item 2', 'This is the second item.')}\n          {this.renderItem('Item 3', 'This is the third item.')}\n        </ListViewSection>\n        <ListViewSeparator/>\n        <ListViewSection header={this.renderSectionHeader('My Section 2')}>\n          {this.renderItem('Item 4', 'This is the fourth item.')}\n          {this.renderItem('Item 5', 'This is the fifth item.')}\n          {this.renderItem('Item 6', 'This is the sixth item.')}\n        </ListViewSection>\n        <ListViewFooter>\n          <Text size=\"11\" color=\"#696969\">Status</Text>\n        </ListViewFooter>\n      </ListView>\n    );\n  }\n\n  renderSectionHeader(title) {\n    return (\n      <ListViewSectionHeader>\n        {title}\n      </ListViewSectionHeader>\n    );\n  }\n\n  renderItem(title, info) {\n    return (\n      <ListViewRow\n        onClick={() => this.setState({ selected: title })}\n        background={this.state.selected === title ? '#d8dadc' : null}\n      >\n        <svg x=\"0px\" y=\"0px\" width=\"18\" height=\"12\" viewBox=\"0 0 18 12\" style={{ marginRight: '6px' }}>\n          <path fill=\"#727476\" d=\"M13.2,0H4.9L0,6.8v3.7C0,11.3,0.7,12,1.5,12h15\n\tc0.8,0,1.5-0.7,1.5-1.5V6.8L13.2,0z M13.8,6.8L12.3,9L5.9,9L4.2,6.8l-3.1,0l4.2-6h7.4l4.2,6L13.8,6.8z\"/>\n          <polygon fill=\"#C9CBCD\" points=\"13.8,6.8 12.3,9 5.9,9 4.2,6.8 1.2,6.7 5.4,0.8 12.8,0.8\n\t17,6.7 \"/>\n        </svg>\n        <Text color=\"#414141\" size=\"13\">{info}</Text>\n      </ListViewRow>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/pin.js",
    "content": "import React, { Component } from 'react';\nimport { Pin, View } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <View background=\"#efeff1\" padding=\"20px\">\n        <Pin\n          onChange={value => console.log(value)}\n          length={4}\n          reveal\n        />\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/progressCircle.js",
    "content": "import React, { Component } from 'react';\nimport { ProgressCircle } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <ProgressCircle size={25}/>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/radio.js",
    "content": "import React, { Component } from 'react';\nimport { View, Radio } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <View horizontalAlignment=\"center\" direction=\"column\">\n          <Radio\n            label=\"Check me!\"\n            name=\"radio1\"\n            onChange={(e) => console.log(e.target.value)}\n            defaultValue=\"I got checked!\"\n            defaultChecked\n          />\n          <Radio\n            label=\"Check me!\"\n            name=\"radio1\"\n            onChange={(e) => console.log(e.target.value)}\n            defaultValue=\"I got checked!\"\n          />\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/searchField.js",
    "content": "import React, { Component } from 'react';\nimport { TitleBar, Toolbar, SearchField } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  handleChange = e => console.log(e.target.value);\n\n  render() {\n    return (\n      <TitleBar inset>\n        <Toolbar height=\"43\" horizontalAlignment=\"right\">\n          <SearchField\n            placeholder=\"Search\"\n            defaultValue=\"\"\n            onChange={this.handleChange}\n          />\n        </Toolbar>\n      </TitleBar>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/segmentedControl.js",
    "content": "import React, { Component } from 'react';\nimport { SegmentedControl, SegmentedControlItem, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this.state = { selected: 1 }\n  }\n\n  render() {\n    return (\n      <SegmentedControl box>\n        {this.renderItems()}\n      </SegmentedControl>\n    );\n  }\n\n  renderItems() {\n    return [\n      this.renderItem(1, 'Tab 1', <Text>Content 1</Text>),\n      this.renderItem(2, 'Tab 2', <Text>Content 2</Text>),\n      this.renderItem(3, 'Tab 3', <Text>Content 3</Text>)\n    ];\n  }\n\n  renderItem(key, title, content) {\n    return (\n      <SegmentedControlItem\n        key={key}\n        title={title}\n        selected={this.state.selected === key}\n        onSelect={() => this.setState({ selected: key })}\n      >\n        {content}\n      </SegmentedControlItem>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/text.js",
    "content": "import React, { Component } from 'react';\nimport { Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Text padding=\"0 100px\" textAlign=\"center\" size=\"16\">\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam justo urna, posuere vitae est et, accumsan\n        bibendum sapien. Suspendisse lobortis mollis finibus. Nunc tincidunt enim est, efficitur semper dolor luctus\n        eget. Donec faucibus dolor id leo tincidunt, condimentum mattis augue finibus. Etiam hendrerit ipsum nisi,\n        vel semper dolor malesuada a. Pellentesque a scelerisque sapien, quis interdum odio. Nulla posuere, velit sit\n        amet lacinia pharetra, sapien arcu convallis dolor, id congue erat lectus nec sem. Praesent pretium a nisi et\n        elementum. Cras lacinia sollicitudin suscipit. Phasellus accumsan felis odio. Pellentesque habitant morbi\n        tristique senectus et netus et malesuada fames ac turpis egestas.\n      </Text>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/textArea.js",
    "content": "import React, { Component } from 'react';\nimport { TextArea } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  handleChange = e => console.log(e.target.value);\n\n  render() {\n    return (\n      <TextArea\n        label=\"My Input\"\n        placeholder=\"My Input\"\n        defaultValue=\"\"\n        rows={5}\n        cols={80}\n        onChange={this.handleChange}\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/textInput.js",
    "content": "import React, { Component } from 'react';\nimport { TextInput } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  handleChange = e => console.log(e.target.value);\n\n  render() {\n    return (\n      <TextInput\n        label=\"My Input\"\n        placeholder=\"My Input\"\n        defaultValue=\"\"\n        onChange={this.handleChange}\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/titleBar.js",
    "content": "import React, { Component } from 'react';\nimport { View, TitleBar } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this.state = { isFullscreen: false };\n  }\n\n  render() {\n    return (\n      <TitleBar\n        title=\"untitled text 5\"\n        controls\n        isFullscreen={this.state.isFullscreen}\n        onCloseClick={() => console.log('Close window')}\n        onMinimizeClick={() => console.log('Minimize window')}\n        onMaximizeClick={() => console.log('Mazimize window')}\n        onResizeClick={() => this.setState({ isFullscreen: !this.state.isFullscreen })}\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/toolbar.js",
    "content": "import React, { Component } from 'react';\nimport { TitleBar, Toolbar, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <TitleBar controls inset>\n        <Toolbar height=\"43\" horizontalAlignment=\"center\"/>\n      </TitleBar>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/toolbarNav.js",
    "content": "import React, { Component } from 'react';\nimport { TitleBar, Toolbar, ToolbarNav, ToolbarNavItem } from 'react-desktop/macOs';\n\nconst circle = (\n  <svg x=\"0px\" y=\"0px\" width=\"25px\" height=\"25px\" viewBox=\"0 0 25 25\">\n    <circle cx=\"12.5\" cy=\"12.5\" r=\"12.5\"/>\n  </svg>\n);\n\nconst star = (\n  <svg x=\"0px\" y=\"0px\" width=\"25px\" height=\"23.8px\" viewBox=\"0 0 25 23.8\">\n    <polygon points=\"12.5,0 16.4,7.8 25,9.1 18.8,15.2 20.2,23.8 12.5,19.7 4.8,23.8 6.2,15.2 0,9.1 8.6,7.8 \"/>\n  </svg>\n);\n\nconst polygon = (\n  <svg x=\"0px\" y=\"0px\" width=\"25px\" height=\"21.7px\" viewBox=\"0 0 25 21.7\">\n    <polygon points=\"6.2,21.7 0,10.8 6.2,0 18.8,0 25,10.8 18.8,21.7 \"/>\n  </svg>\n);\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this.state = { selected: 1 };\n  }\n\n  render() {\n    return (\n      <TitleBar>\n        <Toolbar>\n          <ToolbarNav>\n            <ToolbarNavItem\n              title=\"Item 1\"\n              icon={circle}\n              selected={this.state.selected === 1}\n              onClick={() => this.setState({ selected: 1 })}\n            />\n            <ToolbarNavItem\n              title=\"Item 2\"\n              icon={star}\n              selected={this.state.selected === 2}\n              onClick={() => this.setState({ selected: 2 })}\n            />\n            <ToolbarNavItem\n              title=\"Item 3\"\n              icon={polygon}\n              selected={this.state.selected === 3}\n              onClick={() => this.setState({ selected: 3 })}\n            />\n          </ToolbarNav>\n        </Toolbar>\n      </TitleBar>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/view.js",
    "content": "import React, { Component } from 'react';\nimport { View, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <View\n        background=\"black\"\n        padding=\"20px\"\n        horizontalAlignment=\"center\"\n        verticalAlignment=\"center\"\n        width=\"200px\"\n        height=\"100px\"\n      >\n        <Text color=\"white\">Hello World</Text>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/macOs/components/window.js",
    "content": "import React, { Component } from 'react';\nimport { Window, TitleBar, Text } from 'react-desktop/macOs';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Window\n        chrome\n        height=\"300px\"\n        padding=\"10px\"\n      >\n        <TitleBar title=\"untitled text 5\" controls/>\n        <Text>Hello World</Text>\n      </Window>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/button.js",
    "content": "import React, { Component } from 'react';\nimport { Button } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29'\n  };\n\n  render() {\n    return (\n      <Button push color={this.props.color} onClick={() => console.log('Clicked!')}>\n        Press me!\n      </Button>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/checkbox.js",
    "content": "import React, { Component } from 'react';\nimport { Checkbox } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <Checkbox\n        color={this.props.color}\n        theme={this.props.theme}\n        label=\"Check me!\"\n        onChange={(e) => console.log(e.target.value)}\n        defaultValue=\"I got checked!\"\n        defaultChecked\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/label.js",
    "content": "import React, { Component } from 'react';\nimport { Label } from 'react-desktop/windows';\n\nexport default class extends Component {\n  render() {\n    return (\n      <Label>My Label</Label>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/masterDetailsView.js",
    "content": "import React, { Component } from 'react';\nimport {\n  MasterDetailsView,\n  MasterDetailsViewItem,\n  MasterDetailsViewItemMaster,\n  MasterDetailsViewItemDetails,\n  Text\n} from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <MasterDetailsView color={this.props.color} theme={this.props.theme}>\n        {this.renderItem('Item 1', 'Content 1')}\n        {this.renderItem('Item 2', 'Content 2')}\n        {this.renderItem('Item 3', 'Content 3')}\n      </MasterDetailsView>\n    );\n  }\n\n  renderItem(master, details) {\n    return (\n      <MasterDetailsViewItem>\n        <MasterDetailsViewItemMaster push>\n          {master}\n        </MasterDetailsViewItemMaster>\n        <MasterDetailsViewItemDetails background>\n          <Text padding=\"20px\" color=\"white\">{details}</Text>\n        </MasterDetailsViewItemDetails>\n      </MasterDetailsViewItem>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/navPane.js",
    "content": "import React, { Component } from 'react';\nimport { NavPane, NavPaneItem, Text } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  constructor() {\n    super();\n    this.state = {\n      selected: 'Item 1'\n    }\n  }\n\n  render() {\n    return (\n      <NavPane openLength={200} push color={this.props.color} theme={this.props.theme}>\n        {this.renderItem('Item 1', 'Content 1')}\n        {this.renderItem('Item 2', 'Content 2')}\n        {this.renderItem('Item 3', 'Content 3')}\n      </NavPane>\n    );\n  }\n\n  renderItem(title, content) {\n    return (\n      <NavPaneItem\n        title={title}\n        icon={this.renderIcon(title)}\n        theme=\"light\"\n        background=\"#ffffff\"\n        selected={this.state.selected === title}\n        onSelect={() => this.setState({ selected: title })}\n        padding=\"10px 20px\"\n        push\n      >\n        <Text>{content}</Text>\n      </NavPaneItem>\n    );\n  }\n\n  renderIcon(name) {\n    const fill = this.props.theme === 'dark' ? '#ffffff' : '#000000';\n    switch(name) {\n    case 'Item 1':\n      return (\n        <svg x=\"0px\" y=\"0px\" width=\"16px\" height=\"14.9px\" viewBox=\"0 0 16 14.9\">\n          <polygon fill={fill} points=\"16,5.6 10.6,4.7 8,0 5.4,4.7 0,5.7 3.8,9.6 3.1,14.9 8,12.6 13,14.8 12.3,9.5 \"/>\n        </svg>\n      );\n    case 'Item 2':\n      return (\n        <svg x=\"0px\" y=\"0px\" width=\"16px\" height=\"13.5px\" viewBox=\"0 0 16 13.5\">\n          <path\n            fill={fill}\n            d=\"M16,4.2C16,1.9,14.1,0,11.7,0c-1.4,0-2.6,0.6-3.4,1.6c0,0,0,0,0,0C8.3,1.7,8.1,1.8,8,1.8\n            c-0.2,0-0.3-0.1-0.4-0.2c0,0,0,0,0,0C6.8,0.6,5.6,0,4.3,0C1.9,0,0,1.9,0,4.2c0,0,0,0.1,0,0.1l0,0c0,0,0,0.1,0,0.3\n            C0,4.8,0.1,5,0.1,5.2c0.3,1.4,1.4,4.1,5.1,6.5c2.1,1.4,2.6,1.8,2.8,1.8c0,0,0,0,0,0c0,0,0,0,0,0c0.1,0,0.7-0.4,2.8-1.8\n            c3.5-2.3,4.6-4.8,5-6.3C15.9,5.1,16,4.8,16,4.5C16,4.3,16,4.2,16,4.2L16,4.2C16,4.2,16,4.2,16,4.2z\"\n          />\n        </svg>\n      );\n    case 'Item 3':\n      return (\n        <svg x=\"0px\" y=\"0px\" width=\"16px\" height=\"15.6px\" viewBox=\"0 0 16 15.6\">\n          <path\n            fill={fill}\n            d=\"M14.9,3.2c0.7-0.9,1-1.7,1.1-2.4c0-0.2,0-0.4-0.1-0.5c0,0,0-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1\n            C15.6,0,15.4,0,15.2,0c-0.7,0-1.6,0.4-2.4,1c-0.7,0.5-1.4,1.2-2.4,2.3C10.2,3.5,10,3.6,9.8,3.8L8.3,3.4L7.9,3.3C8,3.2,8.1,3.1,8.1,3\n            c0-0.1,0-0.2-0.1-0.3L7.6,2.3C7.5,2.3,7.4,2.2,7.3,2.2c-0.1,0-0.2,0-0.3,0.1L6.5,2.8L6.2,2.8c0.1-0.1,0.1-0.2,0.1-0.3\n            c0-0.1,0-0.2-0.1-0.3L5.8,1.9C5.7,1.8,5.6,1.8,5.5,1.8c-0.1,0-0.2,0-0.3,0.1L4.7,2.3L2.8,1.8c0,0-0.1,0-0.1,0\n            c-0.1,0-0.3,0.1-0.4,0.1L1.6,2.6C1.5,2.6,1.5,2.7,1.5,2.8c0,0.1,0.1,0.3,0.2,0.3l4.1,2.2c0,0,0.1,0.1,0.1,0.1L7,6.6\n            C6,7.7,5,8.8,4.2,9.7C4.2,9.8,4.1,9.9,4,10L0.9,9.7c0,0,0,0-0.1,0c-0.1,0-0.3,0.1-0.4,0.2l-0.3,0.3C0,10.3,0,10.4,0,10.5\n            c0,0.1,0.1,0.3,0.2,0.3l2.2,1c0,0,0.1,0,0.1,0.1l0.2,0.2c-0.1,0.2-0.1,0.3-0.1,0.4c0,0.2,0.1,0.3,0.2,0.4C2.9,13,3,13.1,3.2,13.1\n            c0.1,0,0.3,0,0.4-0.1l0.2,0.2c0,0,0,0.1,0.1,0.1l1.1,2.2c0.1,0.1,0.2,0.2,0.4,0.2c0.1,0,0.2,0,0.3-0.1l0.3-0.3C6,15.1,6,14.9,6,14.8\n            c0,0-0.3-3.1-0.3-3.1c0.1-0.1,0.2-0.1,0.3-0.2c1-0.7,2.1-1.7,3.2-2.7l1.2,1.1c0,0,0.1,0.1,0.1,0.1l2.3,4c0.1,0.1,0.2,0.2,0.3,0.2\n            c0.1,0,0.2,0,0.3-0.1l0.7-0.7c0.1-0.1,0.1-0.2,0.1-0.3c0,0,0-0.1,0-0.1l-0.5-1.8L13.6,11l0.5-0.4c0.1-0.1,0.1-0.2,0.1-0.3\n            c0-0.1,0-0.2-0.1-0.3l-0.3-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1l-0.1-0.3l0.5-0.5c0.1-0.1,0.1-0.2,0.1-0.3\n            c0-0.1,0-0.2-0.1-0.3l-0.3-0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0.1L12.1,6c0.2-0.2,0.4-0.4,0.6-0.5\n            C13.7,4.5,14.4,3.8,14.9,3.2z\"\n          />\n        </svg>\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/progressCircle.js",
    "content": "import React, { Component } from 'react';\nimport { ProgressCircle } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29'\n  };\n\n  render() {\n    return (\n      <ProgressCircle\n        color={this.props.color}\n        size={100}\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/radio.js",
    "content": "import React, { Component } from 'react';\nimport { View, Radio } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <View horizontalAlignment=\"center\" direction=\"column\" theme={this.props.theme}>\n          <Radio\n            color={this.props.color}\n            label=\"Check me!\"\n            name=\"radio1\"\n            onChange={(e) => console.log(e.target.value)}\n            defaultValue=\"I got checked!\"\n            defaultChecked\n          />\n          <Radio\n            color={this.props.color}\n            label=\"Check me!\"\n            name=\"radio1\"\n            onChange={(e) => console.log(e.target.value)}\n            defaultValue=\"I got checked!\"\n          />\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/text.js",
    "content": "import React, { Component } from 'react';\nimport { Text } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <Text\n        background={this.props.color}\n        theme={this.props.theme}\n        width=\"100%\"\n        horizontalAlignment=\"center\"\n        verticalAlignment=\"center\"\n        padding=\"100px\"\n      >\n        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam justo urna, posuere vitae est et, accumsan\n        bibendum sapien. Suspendisse lobortis mollis finibus. Nunc tincidunt enim est, efficitur semper dolor luctus\n        eget. Donec faucibus dolor id leo tincidunt, condimentum mattis augue finibus. Etiam hendrerit ipsum nisi,\n        vel semper dolor malesuada a. Pellentesque a scelerisque sapien, quis interdum odio. Nulla posuere, velit sit\n        amet lacinia pharetra, sapien arcu convallis dolor, id congue erat lectus nec sem. Praesent pretium a nisi et\n        elementum. Cras lacinia sollicitudin suscipit. Phasellus accumsan felis odio. Pellentesque habitant morbi\n        tristique senectus et netus et malesuada fames ac turpis egestas.\n      </Text>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/textArea.js",
    "content": "import React, { Component } from 'react';\nimport { TextArea } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  handleChange = e => console.log(e.target.value);\n\n  render() {\n    return (\n      <TextArea\n        theme={this.props.theme}\n        color={this.props.color}\n        background\n        label=\"My Input\"\n        placeholder=\"My Input\"\n        rows={5}\n        cols={80}\n        onChange={this.handleChange}\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/textInput.js",
    "content": "import React, { Component } from 'react';\nimport { TextInput } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  handleChange = e => console.log(e.target.value);\n\n  render() {\n    return (\n      <TextInput\n        theme={this.props.theme}\n        color={this.props.color}\n        background\n        label=\"My Input\"\n        placeholder=\"My Input\"\n        onChange={this.handleChange}\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/titleBar.js",
    "content": "import React, { Component } from 'react';\nimport { TitleBar } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  constructor(props) {\n    super(props);\n    this.state = { isMaximized: true };\n  }\n\n  close = () => console.log('close');\n  minimize = () => console.log('minimize');\n  toggleMaximize = () => this.setState({ isMaximized: !this.state.isMaximized });\n\n  render() {\n    return (\n      <TitleBar\n        title=\"My Windows Application\"\n        controls\n        isMaximized={this.state.isMaximized}\n        theme={this.props.theme}\n        background={this.props.color}\n        onCloseClick={this.close}\n        onMinimizeClick={this.minimize}\n        onMaximizeClick={this.toggleMaximize}\n        onRestoreDownClick={this.toggleMaximize}\n      />\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/view.js",
    "content": "import React, { Component } from 'react';\nimport { View, Text } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <View\n        color={this.props.color}\n        background\n        padding=\"20px\"\n        horizontalAlignment=\"center\"\n        verticalAlignment=\"center\"\n        width=\"200px\"\n        height=\"100px\"\n      >\n        <Text color={this.props.theme === 'dark' ? 'white' : '#333'}>Hello World</Text>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "examples/windows/components/window.js",
    "content": "import React, { Component } from 'react';\nimport { Window, TitleBar, Text } from 'react-desktop/windows';\n\nexport default class extends Component {\n  static defaultProps = {\n    color: '#cc7f29',\n    theme: 'light'\n  };\n\n  render() {\n    return (\n      <Window\n        color={this.props.color}\n        theme={this.props.theme}\n        chrome\n        height=\"300px\"\n        padding=\"12px\"\n      >\n        <TitleBar title=\"My Windows Application\" controls/>\n        <Text color={this.props.theme === 'dark' ? 'white' : '#333'}>Hello World</Text>\n      </Window>\n    );\n  }\n}\n"
  },
  {
    "path": "index.js",
    "content": "import { default as whichOs, MACOS } from './src/os';\nimport * as windows from './windows';\nimport * as macOs from './macOs';\n\nconst os = whichOs();\nconst select = (macOs, windows) => os === MACOS ? macOs : windows;\n\nexport { default as os } from './src/os';\n\nexport const Box = macOs.Box;\nexport const Button = select(macOs.Button, windows.Button);\nexport const Checkbox = select(macOs.Checkbox, windows.Checkbox);\n\nexport const Dialog = macOs.Dialog;\nexport const Label = select(macOs.Label, windows.Label);\nexport const Link = macOs.Link;\nexport const ListView = macOs.ListView;\nexport const ListViewFooter = macOs.ListViewFooter;\nexport const ListViewHeader = macOs.ListViewHeader;\nexport const ListViewRow = macOs.ListViewRow;\nexport const ListViewSection = macOs.ListViewSection;\nexport const ListViewSectionHeader = macOs.ListViewSectionHeader;\nexport const ListViewSeparator = macOs.ListViewSeparator;\nexport const MasterDetailsView = windows.MasterDetailsView;\nexport const MasterDetailsViewItem = windows.MasterDetailsViewItem;\nexport const MasterDetailsViewItemMaster = windows.MasterDetailsViewItemMaster;\nexport const MasterDetailsViewItemDetails = windows.MasterDetailsViewItemDetails;\nexport const NavPane = windows.NavPane;\nexport const NavPaneItem = windows.NavPaneItem;\nexport const Pin = macOs.Pin;\nexport const ProgressCircle = select(macOs.ProgressCircle, windows.ProgressCircle);\nexport const Radio = select(macOs.Radio, windows.Radio);\nexport const SearchField = macOs.SearchField;\nexport const SegmentedControl = macOs.SegmentedControl;\nexport const SegmentedControlItem = macOs.SegmentedControlItem;\nexport const Text = select(macOs.Text, windows.Text);\nexport const TextInput = select(macOs.TextInput, windows.TextInput);\nexport const TitleBar = select(macOs.TitleBar, windows.TitleBar);\nexport const Toolbar = macOs.Toolbar;\nexport const ToolbarNav = macOs.ToolbarNav;\nexport const ToolbarNavItem = macOs.ToolbarNavItem;\nexport const View = select(macOs.View, windows.View);\nexport const Window = select(macOs.Window, windows.Window);\n"
  },
  {
    "path": "macOs.js",
    "content": "export { default as Box } from './src/Box/macOs';\nexport { default as Button } from './src/Button/macOs';\nexport { default as Checkbox } from './src/Checkbox/macOs';\nexport { default as Dialog } from './src/Dialog/macOs';\nexport { default as Label } from './src/Label/macOs';\nexport { default as Link } from './src/Link/macOs';\nexport { default as ListView } from './src/ListView/macOs';\nexport { default as ListViewFooter } from './src/ListView/macOs/Footer';\nexport { default as ListViewHeader } from './src/ListView/macOs/Header';\nexport { default as ListViewRow } from './src/ListView/macOs/Row';\nexport { default as ListViewSection } from './src/ListView/macOs/Section';\nexport { default as ListViewSectionHeader } from './src/ListView/macOs/Header';\nexport { default as ListViewSeparator } from './src/ListView/macOs/Separator';\nexport { default as Pin } from './src/Pin/macOs';\nexport { default as ProgressCircle } from './src/ProgressCircle/macOs';\nexport { default as Radio } from './src/Radio/macOs';\nexport { default as SearchField } from './src/SearchField/macOs';\nexport { default as SegmentedControl } from './src/SegmentedControl/macOs';\nexport {\n  default as SegmentedControlItem\n} from './src/SegmentedControl/macOs/Item';\nexport { default as Text } from './src/Text/macOs';\nexport { default as TextInput } from './src/TextInput/macOs';\nexport { default as TextArea } from './src/TextArea/macOs';\nexport { default as TitleBar } from './src/TitleBar/macOs';\nexport { default as Toolbar } from './src/Toolbar/macOs';\nexport { default as ToolbarNav } from './src/Toolbar/macOs/Nav';\nexport { default as ToolbarNavItem } from './src/Toolbar/macOs/Nav/Item';\nexport { default as View } from './src/View/macOs';\nexport { default as Window } from './src/Window/macOs';\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"react-desktop\",\n  \"author\": \"Gabriel Bull\",\n  \"version\": \"0.3.9\",\n  \"description\": \"React UI Components for macOS High Sierra and Windows 10\",\n  \"main\": \"./index.js\",\n  \"keywords\": [\n    \"react\",\n    \"react-component\",\n    \"electron\",\n    \"node-webkit\",\n    \"native\",\n    \"desktop\",\n    \"ui\",\n    \"user\",\n    \"interface\",\n    \"component\",\n    \"os x\",\n    \"macOS\",\n    \"mac\",\n    \"windows\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/gabrielbull/react-desktop.git\"\n  },\n  \"scripts\": {\n    \"test\": \"./node_modules/.bin/mocha test\",\n    \"eslint\": \"./node_modules/.bin/eslint ./src ./test\",\n    \"prebuild\": \"rsync -av -delete . build --exclude build --exclude .git --exclude .idea && npm run eslint && npm run test\",\n    \"build\": \"./node_modules/.bin/babel ./build/src --out-dir ./build/src && ./node_modules/.bin/babel ./build/index.js --out-file ./build/index.js && ./node_modules/.bin/babel ./build/macOs.js --out-file ./build/osx.js && ./node_modules/.bin/babel ./build/macOs.js --out-file ./build/macOs.js && ./node_modules/.bin/babel ./build/windows.js --out-file ./build/windows.js\",\n    \"playground\": \"./node_modules/.bin/webpack-dev-server --config ./playground/webpack.config.js --colors --inline --port 3001\",\n    \"build-publish\": \"npm run build && npm publish ./build\"\n  },\n  \"dependencies\": {\n    \"radium\": \"=0.19.6\"\n  },\n  \"peerDependencies\": {\n    \"prop-types\": \"^15.0 || ^16.0\",\n    \"react\": \"^15.0 || ^16.0\",\n    \"react-dom\": \"^15.0 || ^16.0\"\n  },\n  \"devDependencies\": {\n    \"babel-cli\": \"^6.26.0\",\n    \"babel-core\": \"^6.26.0\",\n    \"babel-eslint\": \"^8.2.2\",\n    \"babel-loader\": \"^7.1.4\",\n    \"babel-plugin-transform-decorators-legacy\": \"^1.3.4\",\n    \"babel-preset-es2015\": \"^6.24.1\",\n    \"babel-preset-react\": \"^6.24.1\",\n    \"babel-preset-stage-0\": \"^6.24.1\",\n    \"chai\": \"^4.1.2\",\n    \"eslint\": \"^4.19.1\",\n    \"eslint-plugin-import\": \"^2.10.0\",\n    \"eslint-plugin-react\": \"^7.7.0\",\n    \"html-webpack-plugin\": \"^3.1.0\",\n    \"jsdom\": \"^11.7.0\",\n    \"mocha\": \"^5.0.5\",\n    \"prop-types\": \"^15.6.1\",\n    \"react\": \"^16.3.0\",\n    \"react-addons-test-utils\": \"^15.6.2\",\n    \"react-color\": \"^2.14.0\",\n    \"react-dom\": \"^16.3.0\",\n    \"react-hot-loader\": \"^4.0.1\",\n    \"webpack\": \"^4.4.1\",\n    \"webpack-cli\": \"^3.1.2\",\n    \"webpack-dev-server\": \"^3.1.1\"\n  }\n}\n"
  },
  {
    "path": "playground/assets/icons.js",
    "content": "import * as React from 'react';\n\nexport const home = (\n  <svg width=\"1792\" height=\"1792\" viewBox=\"0 0 1792 1792\">\n    <path\n      d=\"M1472 992v480q0 26-19 45t-45 19h-384v-384h-256v384h-384q-26 0-45-19t-19-45v-480q0-1 .5-3t.5-3l575-474 575 474q1 2 1 6zm223-69l-62 74q-8 9-21 11h-3q-13 0-21-7l-692-577-692 577q-12 8-24 7-13-2-21-11l-62-74q-8-10-7-23.5t11-21.5l719-599q32-26 76-26t76 26l244 204v-195q0-14 9-23t23-9h192q14 0 23 9t9 23v408l219 182q10 8 11 21.5t-7 23.5z\"\n    />\n  </svg>\n);\n\nexport const form = (\n  <svg width=\"1792\" height=\"1792\" viewBox=\"0 0 1792 1792\">\n    <path d=\"M888 1184l116-116-152-152-116 116v56h96v96h56zm440-720q-16-16-33 1l-350 350q-17 17-1 33t33-1l350-350q17-17 1-33zm80 594v190q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q63 0 117 25 15 7 18 23 3 17-9 29l-49 49q-14 14-32 8-23-6-45-6h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-126q0-13 9-22l64-64q15-15 35-7t20 29zm-96-738l288 288-672 672h-288v-288zm444 132l-92 92-288-288 92-92q28-28 68-28t68 28l152 152q28 28 28 68t-28 68z\"\n    />\n  </svg>\n);\n\nexport const progress = (\n  <svg width=\"1792\" height=\"1792\" viewBox=\"0 0 1792 1792\">\n    <path\n      d=\"M526 1394q0 53-37.5 90.5t-90.5 37.5q-52 0-90-38t-38-90q0-53 37.5-90.5t90.5-37.5 90.5 37.5 37.5 90.5zm498 206q0 53-37.5 90.5t-90.5 37.5-90.5-37.5-37.5-90.5 37.5-90.5 90.5-37.5 90.5 37.5 37.5 90.5zm-704-704q0 53-37.5 90.5t-90.5 37.5-90.5-37.5-37.5-90.5 37.5-90.5 90.5-37.5 90.5 37.5 37.5 90.5zm1202 498q0 52-38 90t-90 38q-53 0-90.5-37.5t-37.5-90.5 37.5-90.5 90.5-37.5 90.5 37.5 37.5 90.5zm-964-996q0 66-47 113t-113 47-113-47-47-113 47-113 113-47 113 47 47 113zm1170 498q0 53-37.5 90.5t-90.5 37.5-90.5-37.5-37.5-90.5 37.5-90.5 90.5-37.5 90.5 37.5 37.5 90.5zm-640-704q0 80-56 136t-136 56-136-56-56-136 56-136 136-56 136 56 56 136zm530 206q0 93-66 158.5t-158 65.5q-93 0-158.5-65.5t-65.5-158.5q0-92 65.5-158t158.5-66q92 0 158 66t66 158z\"\n    />\n  </svg>\n);\n\nexport const listView = (\n  <svg width=\"1792\" height=\"1792\" viewBox=\"0 0 1792 1792\">\n    <path\n      d=\"M512 1248v192q0 40-28 68t-68 28h-320q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h320q40 0 68 28t28 68zm0-512v192q0 40-28 68t-68 28h-320q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h320q40 0 68 28t28 68zm1280 512v192q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h960q40 0 68 28t28 68zm-1280-1024v192q0 40-28 68t-68 28h-320q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h320q40 0 68 28t28 68zm1280 512v192q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h960q40 0 68 28t28 68zm0-512v192q0 40-28 68t-68 28h-960q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h960q40 0 68 28t28 68z\"\n    />\n  </svg>\n);\n"
  },
  {
    "path": "playground/examplesLoader.js",
    "content": "var fs = require('fs');\nvar path = require('path');\n\nfunction scanDir(dir) {\n  var files = fs.readdirSync(dir);\n  var filepath;\n  var subFiles;\n  var returnValue = [];\n  for (var i = 0, len = files.length; i < len; ++i) {\n    if (files[i].charAt(0) !== '.') {\n      filepath = path.resolve(path.join(dir, files[i]));\n      if (fs.lstatSync(filepath).isDirectory()) {\n        subFiles = scanDir(path.join(dir, files[i]));\n        returnValue.push.apply(returnValue, subFiles);\n      } else {\n        returnValue.push({\n          file: path.join(dir, files[i]),\n          filepath: filepath\n        });\n      }\n    }\n  }\n  return returnValue;\n}\n\nmodule.exports = function(source) {\n  var dirname = path.join(__dirname, '..');\n  var files = scanDir(path.join(dirname, 'examples'));\n  var file;\n\n  source = 'let data = {};\\n';\n  for (var i = 0, len = files.length; i < len; ++i) {\n    file = files[i];\n    var filename = file.file.replace(dirname, '').replace(/\\.js$/, '');\n    var key = filename.replace(/[\\/\\-]/g, '_');\n    source += 'import ' + key + ' from \\'.' + filename + '\\';\\n';\n    source += 'data[\\'' + filename + '\\'] = ' + key + ';\\n';\n  }\n\n  source += 'export default data;';\n\n  return source;\n};\n"
  },
  {
    "path": "playground/index.js",
    "content": "import * as React from 'react';\nimport { render } from 'react-dom';\nimport Playground from './playground';\n\ndocument.title = 'React Desktop Playground';\ndocument.documentElement.style.width = '100%';\ndocument.documentElement.style.height = '100%';\ndocument.body.style.background = 'white';\ndocument.body.style.backgroundImage = 'url(assets/background.jpg)';\ndocument.body.style.backgroundSize = 'cover';\ndocument.body.style.margin = '0';\ndocument.body.style.padding = '0';\ndocument.body.style.width = '100%';\ndocument.body.style.height = '100%';\ndocument.body.style.overflow = 'hidden';\n\ndocument.body.innerHTML = `\n  <div id=\"main\" style=\"width: 100%; height: 100%;\"></div>\n`;\n\nrender(<Playground/>, document.getElementById('main'));\n"
  },
  {
    "path": "playground/playground.js",
    "content": "import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport examples from 'examples-loader!examples';\nimport Sidebar from './ui/sidebar/sidebar';\n\nconst styles = {\n  container: {\n    width: '100%',\n    height: '100%',\n    display: 'flex'\n  },\n  sidebar: {\n    width: '200px'\n  },\n  example: {\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    width: '800px',\n    height: '100%',\n    margin: '0 auto'\n  }\n};\n\nclass Playground extends React.Component {\n  static childContextTypes = {\n    playground: PropTypes.object\n  };\n\n  constructor() {\n    super();\n    this.state = {\n      color: '#cc7f29',\n      theme: 'light',\n      example: null\n    };\n    this.loadState(false);\n  }\n\n  loadState(mounted = true) {\n    try {\n      const state = JSON.parse(localStorage['playground']);\n      if (mounted) this.setState(state);\n      else this.state = { ...this.state, ...state };\n    } catch (err) {}\n  }\n\n  persistState() {\n    localStorage['playground'] = JSON.stringify(this.state);\n  }\n\n  getChildContext() {\n    return {\n      playground: this\n    };\n  }\n\n  componentDidUpdate() {\n    this.persistState();\n  }\n\n  showExample = (example) => {\n    this.setState({ example: example });\n  };\n\n  changeColor = (color) => {\n    this.setState({ color: color });\n    this.persistState();\n  };\n\n  changeTheme = (theme) => {\n    this.setState({ theme: theme });\n    this.persistState();\n  };\n\n  render() {\n    let example;\n    if (this.state.example) {\n      const Example = examples['/examples/' + this.state.example];\n      if (Example) {\n        example = <Example color={this.state.color} theme={this.state.theme}/>;\n      }\n    }\n\n    return (\n      <div style={styles.container}>\n        <Sidebar\n          onColorChange={this.changeColor}\n          color={this.state.color}\n          theme={this.state.theme}\n          onThemeChange={this.changeTheme}\n          style={styles.sidebar}\n          defaultExample={this.state.example}\n        />\n        <div style={styles.example}>\n          {example}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default Playground;\n"
  },
  {
    "path": "playground/ui/examples/examples.js",
    "content": "import * as React from 'react';\nimport * as PropTypes from 'prop-types';\n\nconst styles = {\n  list: {\n    margin: '0px',\n    padding: '0px',\n    listStyle: 'none'\n  },\n  title: {\n    display: 'block',\n    color: 'white',\n    fontFamily: 'sans-serif',\n    fontSize: '18px',\n    lineHeight: '1.4em',\n    fontWeight: 'normal',\n    margin: '20px 10px 10px',\n    padding: '0px 0px 10px',\n    borderBottom: '1px solid rgba(255, 255, 255, .2)'\n  },\n  subtitle: {\n    fontSize: '15px',\n    borderBottom: 'none',\n    padding: '0px',\n    margin: '20px 10px 10px',\n  },\n  item: {\n    display: 'block',\n    color: 'white',\n    fontFamily: 'sans-serif',\n    fontSize: '12px',\n    lineHeight: '1.2em',\n    fontWeight: 'normal',\n    margin: 0,\n    padding: '2px 10px',\n    cursor: 'pointer'\n  },\n  itemSelect: {\n    color: '#6FFFFD',\n    fontWeight: 'bold'\n  }\n};\n\nclass Examples extends React.Component {\n  static contextTypes = {\n    playground: PropTypes.object\n  };\n\n  static propTypes = {\n    defaultExample: PropTypes.string,\n    list: PropTypes.object\n  };\n\n  constructor(props, ...args) {\n    super(props, ...args);\n    this.state = {\n      selected: props.defaultExample\n    }\n  };\n\n  click = (category, key) => {\n    key = (category + '/' + key).replace(/^\\//, '');\n    this.context.playground.showExample(key);\n    this.setState({ selected: key });\n  };\n\n  render() {\n    return (\n      <div>\n        {this.renderItem(this.props.list)}\n      </div>\n    );\n  }\n\n  renderItem(item, path = '', subtitle = false) {\n    let finalChildren = [];\n    for (let prop in item) {\n      if (item.hasOwnProperty(prop)) {\n        if (typeof item[prop] === 'object') {\n          let children = this.renderItem(item[prop], path ? path + '/' + prop : prop, true);\n          if (children[0] && children[0].type === 'ul') {\n            finalChildren.push(\n              <ul style={styles.list}  key={prop}>\n                <li style={styles.list}>\n                  <span style={{ ...styles.title, ...(subtitle ? styles.subtitle : {}) }}>{prop}</span>\n                  {children}\n                </li>\n              </ul>\n            );\n          } else {\n            finalChildren.push(\n              <ul style={styles.list}  key={prop}>\n                <li style={styles.list}>\n                  <span style={{ ...styles.title, ...(subtitle ? styles.subtitle : {}) }}>{prop}</span>\n                  <ul style={styles.list}>\n                    {children}\n                  </ul>\n                </li>\n              </ul>\n            );\n          }\n        } else {\n          const selected = path + '/' + prop === this.state.selected;\n          finalChildren.push(\n            <li style={styles.list} key={prop}>\n              <a\n                key={path + '/' + prop}\n                style={{ ...styles.item, ...(selected ? styles.itemSelect : {}) }}\n                onClick={() => this.click(path, prop)}\n              >\n                {prop}\n              </a>\n            </li>\n          );\n        }\n      }\n    }\n    return finalChildren;\n  }\n}\n\nexport default Examples;\n"
  },
  {
    "path": "playground/ui/sidebar/logo.js",
    "content": "import * as React from 'react';\n\nclass Logo extends React.Component {\n  render() {\n    return (\n      <svg x=\"0px\" y=\"0px\" viewBox=\"0 0 302.6 49.2\" width=\"116\" height=\"20\" style={{ padding: '10px 10px 0 10px' }}>\n        <g>\n          <path\n            fill=\"#ffffff\" d=\"M85.3,37.9c-5-9.4-5.8-10.8-7.1-11.2h-4.4v11.2h-3.6V11.9c2.5-0.1,5.3-0.2,8-0.2c5,0,8.1,2.8,8.1,6.8\n\t\tc0,4.1-2.9,6.2-4.6,7c1.5,0.8,2.4,2.1,7.9,12.5H85.3z M76.6,14.6h-2.8v9.2h5.7c1.7-0.7,3.1-2.6,3.1-4.6\n\t\tC82.6,16.3,80.5,14.6,76.6,14.6z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M107,28.7H94.4c0,3.6,2,6.7,6,6.7c2.2,0,4.2-0.5,6.3-1.5l-0.2,2.9c-2,1-4.1,1.5-6.8,1.5\n\t\tc-5.4,0-8.6-4.2-8.6-9.7c0-6.2,3.9-10.3,8.8-10.3c4.7,0,7.3,3.4,7.3,7.7C107.2,26.8,107.1,28.1,107,28.7z M99.4,21.1\n\t\tc-2.7,0-4.4,2.6-4.8,5.1h9.4C104,23.3,102.2,21.1,99.4,21.1z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M126.1,37.9c-0.5,0.2-1.3,0.3-2,0.3c-1.5,0-2.6-0.7-2.9-2.3H121c-1.3,1.3-3.2,2.4-5.8,2.4\n\t\tc-3,0-5.3-2-5.3-4.9c0-3.5,3-6.7,11-7.1V24c0-1.7-1-2.8-2.8-2.8c-1.9,0-4.4,0.9-6.5,2.3l-0.3-2.6c2.1-1.5,4.8-2.5,7.9-2.5\n\t\tc3.1,0,5.2,1.8,5.2,4.9c0,1.2-0.1,8.9-0.1,9.7c0,1.5,0.7,2.3,2.2,2.4L126.1,37.9z M120.8,28.8c-6.2,0.3-7.6,2.6-7.6,4.1\n\t\tc0,1.6,1.1,2.7,3.3,2.7c1.7,0,3.4-0.8,4.4-1.7V28.8z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M143,22.7c-1.3-0.7-3.2-1.4-5.1-1.4c-3.4,0-5.8,3.1-5.8,6.8c0,4.1,2.1,7.2,6,7.2c2,0,3.7-0.6,5.3-1.3\n\t\tl-0.2,3c-1.8,0.9-3.8,1.3-5.9,1.3c-5.5,0-8.7-4.1-8.7-9.6c0-6,3.9-10.3,9.5-10.3c2.2,0,3.9,0.6,5.3,1.4L143,22.7z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M152.5,38.3c-3.1,0-5-2-5-4.8c0-1.2,0-6.7,0-10.3v-1.6h-1.7v-1.4l4.6-5.1h0.4v3.7h6.1v2.8h-6.1\n\t\tc0,0,0,7.4,0,10.7c0,2,1,3,3,3c1,0,2.1-0.1,3.3-0.5v2.5C155.8,37.9,154.2,38.3,152.5,38.3z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M177.4,38c-2.4,0-5.4,0-7.7-0.1V11.9c2.6-0.1,6-0.2,8.6-0.2c8,0,14.2,4.6,14.2,12.3\n\t\tC192.5,33.2,186.2,38,177.4,38z M177.3,14.6h-4V35h4.7c6.1,0,10.8-3.5,10.8-10.2C188.8,18.1,184.3,14.6,177.3,14.6z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M211.6,28.7H199c0,3.6,2,6.7,6,6.7c2.2,0,4.2-0.5,6.3-1.5l-0.2,2.9c-2,1-4.1,1.5-6.8,1.5\n\t\tc-5.4,0-8.6-4.2-8.6-9.7c0-6.2,3.9-10.3,8.8-10.3c4.7,0,7.3,3.4,7.3,7.7C211.8,26.8,211.7,28.1,211.6,28.7z M204,21.1\n\t\tc-2.7,0-4.4,2.6-4.8,5.1h9.4C208.6,23.3,206.8,21.1,204,21.1z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M219.7,38.3c-2.2,0-3.9-0.5-5.3-1.5l0.5-2.9c1.3,1,3.3,1.6,5.2,1.6c1.7,0,3.6-0.7,3.6-2.6\n\t\tc0-3.8-8.6-3-8.6-8.9c0-3.7,3.3-5.6,6.9-5.6c1.7,0,3.4,0.5,4.6,1.1l-0.5,2.8c-1.3-0.6-3-1.1-4.6-1.1c-1.6,0-3.1,0.8-3.1,2.3\n\t\tc0,3.8,8.7,3,8.7,8.8C227.2,36.5,223.5,38.3,219.7,38.3z\"\n          />\n          <path\n            fill=\"#ffffff\"\n            d=\"M243.1,37.9l-7.1-9.7h-0.8v9.7h-3.4V8h3.4v18.9c1.2-1.2,7.4-8,7.4-8h4.6l-8.4,8l8.4,11.1H243.1z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M255.5,38.3c-3.1,0-5-2-5-4.8c0-1.2,0-6.7,0-10.3v-1.6h-1.7v-1.4l4.6-5.1h0.4v3.7h6.1v2.8h-6.1\n\t\tc0,0,0,7.4,0,10.7c0,2,1,3,3,3c1,0,2.1-0.1,3.3-0.5v2.5C258.9,37.9,257.3,38.3,255.5,38.3z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M270.8,38.3c-5.3,0-8.7-4.3-8.7-9.7c0-5.8,3.8-10.2,9.5-10.2c5.3,0,8.7,4.3,8.7,9.7\n\t\tC280.3,33.9,276.6,38.3,270.8,38.3z M271.2,21.2c-3.4,0-5.6,3.1-5.6,6.9c0,3.9,2.2,7.4,5.7,7.4c3.4,0,5.6-3.1,5.6-7\n\t\tC276.9,24.7,274.8,21.2,271.2,21.2z\"\n          />\n          <path\n            fill=\"#ffffff\" d=\"M291.3,38.2c-1.2,0-2.5-0.3-3.3-0.7v10.2h-3.4V19l3.3-0.3l-0.1,2.1h0.2c1.3-1.4,3.3-2.4,5.3-2.4\n\t\tc4.9,0,7.9,4.1,7.9,9.6C301.2,34,297.3,38.2,291.3,38.2z M292.2,21.3c-1.6,0-3.1,0.5-4.1,1.3v11.7c1,0.7,2.5,1.1,3.8,1.1\n\t\tc3.6,0,5.9-3,5.9-6.9C297.7,24.1,295.7,21.3,292.2,21.3z\"\n          />\n        </g>\n        <g>\n          <rect\n            x=\"19.3\" y=\"2.2\" transform=\"matrix(0.7071 0.7071 -0.7071 0.7071 12.5509 -15.1816)\" fill=\"#9B61A8\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"10.7\" y=\"4.5\" transform=\"matrix(0.9659 0.2588 -0.2588 0.9659 3.0954 -3.8265)\" fill=\"#38C4E8\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"4.5\" y=\"10.7\" transform=\"matrix(0.9659 -0.2588 0.2588 0.9659 -3.8265 3.0954)\" fill=\"#2083C6\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"2.2\" y=\"19.3\" transform=\"matrix(0.7071 -0.7071 0.7071 0.7071 -15.1816 12.5509)\" fill=\"#0CA796\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"4.5\" y=\"27.8\" transform=\"matrix(0.2588 -0.9659 0.9659 0.2588 -24.6983 34.0568)\" fill=\"#4BBFAE\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"10.7\" y=\"34\" transform=\"matrix(-0.2588 -0.9659 0.9659 -0.2588 -17.7764 65.0793)\" fill=\"#5EC2A7\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"19.3\" y=\"36.3\" transform=\"matrix(-0.7071 -0.7071 0.7071 -0.7071 12.5509 88.4847)\" fill=\"#F6CE2D\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"27.8\" y=\"34\" transform=\"matrix(-0.9659 -0.2588 0.2588 -0.9659 54.9285 85.9511)\" fill=\"#9B61A8\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"27.8\" y=\"34\" transform=\"matrix(-0.9659 -0.2588 0.2588 -0.9659 54.9285 85.9511)\" fill=\"#FDD463\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"34\" y=\"27.8\" transform=\"matrix(-0.9659 0.2588 -0.2588 -0.9659 85.9511 54.9285)\" fill=\"#F99E3E\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"36.3\" y=\"19.3\" transform=\"matrix(-0.7071 0.7071 -0.7071 -0.7071 88.4847 12.5509)\" fill=\"#F6873C\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <rect\n            x=\"34\" y=\"10.7\" transform=\"matrix(-0.2588 0.9659 -0.9659 -0.2588 65.0793 -17.7764)\" fill=\"#F47931\"\n            width=\"10.7\" height=\"10.7\"\n          />\n          <polygon fill=\"#EF383A\" points=\"36.9,3.3 26.6,6.1 29.8,5.2 32.2,7.6 28.1,11.6 29.3,16.4 39.7,13.6 \t\"/>\n        </g>\n      </svg>\n    );\n  }\n}\n\nexport default Logo;\n"
  },
  {
    "path": "playground/ui/sidebar/sidebar.js",
    "content": "import * as React from 'react';\nimport ColorPicker from 'react-color';\nimport examples from 'examples-loader!examples';\nimport Examples from '../examples/examples';\nimport Logo from './logo';\n\nconst styles = {\n  sidebar: {\n    backgroundColor: 'rgba(0,0,0,.8)',\n    height: '100vh',\n    overflow: 'scroll',\n    userSelect: 'none',\n    WebkitUserSelect: 'none',\n    cursor: 'default'\n  }\n};\n\nclass Sidebar extends React.Component {\n  constructor(...args) {\n    super(...args);\n    this.state = {\n      example: null,\n      color: this.props.color,\n      displayColorPicker: false,\n      theme: this.props.theme\n    };\n  }\n\n  handleClick = () => {\n    this.setState({ displayColorPicker: !this.state.displayColorPicker });\n  };\n\n  changeColor = (color) => {\n    this.setState({ color: color.hex });\n    this.props.onColorChange(color.hex);\n  };\n\n  changeTheme = () => {\n    this.state.theme = this.state.theme === 'light' ? 'dark' : 'light';\n    this.props.onThemeChange(this.state.theme);\n  };\n\n  render() {\n    const isChecked = this.state.theme === 'dark';\n\n    let colorPicker;\n    if (this.state.displayColorPicker) {\n      console.log(this.state.color);\n      colorPicker = (\n        <div style={{ position: 'absolute', top: '140px', left: '10px' }}>\n          <ColorPicker\n            onChangeComplete={this.changeColor}\n            color={this.state.color}\n            type=\"sketch\"\n          />\n        </div>\n      )\n    }\n\n    return (\n      <div style={{ ...styles.sidebar, ...this.props.style }}>\n        <Logo/>\n\n        <h1\n          style={{\n            margin: 0,\n            padding: '10px',\n            fontFamily: 'sans-serif',\n            color: 'white',\n            fontSize: '16px',\n            letterSpacing: '0.7px',\n            textTransform: 'uppercase',\n            fontWeight: 'normal'\n          }}\n        >\n          Playground\n        </h1>\n\n        <br/>\n\n        <label style={{ margin: '10px', fontFamily: 'sans-serif', color: 'white', fontSize: '11px', clear: 'both' }}>\n          <input type=\"checkbox\" onChange={this.changeTheme.bind(this)} defaultChecked={isChecked}/>\n          Dark Theme\n        </label>\n\n        <div style={{ margin: '10px' }}>\n          <a\n            style={{\n              height: '16px',\n              width: '16px',\n              display: 'block',\n              border: '2px solid rgba(255, 255, 255, 1)',\n              borderRadius: '3px',\n              backgroundColor: this.state.color,\n              float: 'left'\n            }}\n            onClick={this.handleClick}\n          />\n          <span style={{ margin: '10px', fontFamily: 'sans-serif', color: 'white', fontSize: '11px' }}>\n            Color\n          </span>\n          {colorPicker}\n        </div>\n\n        {this.renderExamples()}\n      </div>\n    );\n  }\n\n  renderExamples() {\n    let list = {};\n    for (var prop in examples) {\n      if (examples.hasOwnProperty(prop)) {\n        let path = prop.replace(/^\\/examples\\//, '').split('/');\n        let currentList = list;\n        path.forEach((item, index) => {\n          if (index === path.length - 1) currentList[item] = examples[prop];\n          else if (typeof currentList[item] === 'undefined') currentList[item] = {};\n          currentList = currentList[item];\n        });\n      }\n    }\n\n    return <Examples defaultExample={this.props.defaultExample} list={list}/>;\n  }\n}\n\nexport default Sidebar;\n"
  },
  {
    "path": "playground/webpack.config.js",
    "content": "var path = require('path');\nvar HtmlWebpackPlugin = require('html-webpack-plugin');\n\nmodule.exports = {\n  entry: path.join(__dirname, 'index.js'),\n\n  output: {\n    path: path.join(__dirname),\n    filename: 'bundle.js',\n    publicPath: '/'\n  },\n\n  devServer: {\n    filename: 'index.js',\n    contentBase: './playground'\n  },\n\n  devtool: 'source-map',\n\n  resolveLoader: {\n    alias: {\n      'examples-loader': path.join(__dirname, 'examplesLoader')\n    }\n  },\n\n  resolve: {\n    alias: {\n      'react-desktop': path.join(__dirname, '..'),\n      'examples': path.join(__dirname, '..', 'index.js'),\n    }\n  },\n\n  module: {\n    rules: [\n      {\n        test: /\\.(js)$/,\n        exclude: /node_modules/,\n        use: 'babel-loader'\n      }\n    ]\n  },\n\n  plugins: [\n    new HtmlWebpackPlugin()\n  ]\n};\n"
  },
  {
    "path": "src/Box/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './styles/10.11';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Padding, { paddingPropTypes } from '../../style/padding';\nimport Alignment, { alignmentPropTypes } from '../../style/alignment';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport { backgroundPropTypes } from '../../style/background/macOs';\nimport { convertColor, darkenColor } from '../../color';\nimport Text from '../../Text/macOs';\n\n@Dimension()\n@Margin()\n@Padding()\n@Alignment()\n@Hidden()\nclass Box extends Component {\n  static propTypes = {\n    ...backgroundPropTypes,\n    ...dimensionPropTypes,\n    ...marginPropTypes,\n    ...paddingPropTypes,\n    ...alignmentPropTypes,\n    ...hiddenPropTypes,\n    label: PropTypes.string\n  };\n\n  static styleRefs = {\n    padding: 'box',\n    dimension: 'box'\n  };\n\n  render() {\n    let { children, style, background, label, ...props } = this.props;\n    const hasSegmentedControls = false;\n\n    let componentStyle = { ...styles.box, ...style };\n    if (hasSegmentedControls) {\n      componentStyle = { ...styles.segmentedControls };\n    }\n\n    if (background) {\n      background = convertColor(background);\n      componentStyle = {\n        ...componentStyle,\n        backgroundColor: background,\n        borderTopColor: darkenColor(background, 0.3),\n        borderLeftColor: darkenColor(background, 0.24),\n        borderRightColor: darkenColor(background, 0.24),\n        borderBottomColor: darkenColor(background, 0.19)\n      };\n    }\n\n    if (label) {\n      return (\n        <div style={styles.wrapper} {...props}>\n          <Text margin=\"0 0 1px 7px\" size={11}>\n            {label}\n          </Text>\n          <div ref=\"box\" style={componentStyle}>\n            {children}\n          </div>\n        </div>\n      );\n    }\n    componentStyle = { ...styles.wrapper, ...componentStyle };\n    return (\n      <div ref=\"box\" style={componentStyle} {...props}>\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default Box;\n"
  },
  {
    "path": "src/Box/macOs/styles/10.11.js",
    "content": "export default {\n  wrapper: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    flex: '1'\n  },\n\n  box: {\n    backgroundColor: 'rgba(0, 0, 0, .04)',\n    borderWidth: '1px',\n    borderStyle: 'solid',\n    borderTopColor: 'rgba(0, 0, 0, .07)',\n    borderLeftColor: 'rgba(0, 0, 0, .037)',\n    borderRightColor: 'rgba(0, 0, 0, .037)',\n    borderBottomColor: 'rgba(0, 0, 0, .026)',\n    borderRadius: '4px',\n    position: 'relative',\n    padding: '23px 18px 22px 18px'\n  },\n\n  segmentedControls: {\n    marginTop: '10px',\n    paddingTop: '33px'\n  }\n};\n"
  },
  {
    "path": "src/Button/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport WindowFocus from '../../windowFocus';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport FontSize, { fontSizePropTypes } from '../../style/fontSize';\nimport Padding, { paddingPropTypes, removeDuplicatePaddingProps } from '../../style/padding';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport styles from './styles/10.11';\nimport Radium from 'radium';\n\n@WindowFocus()\n@Padding()\n@Margin()\n@Hidden()\n@FontSize()\n@Radium\nclass Button extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...fontSizePropTypes,\n    ...paddingPropTypes,\n    ...marginPropTypes,\n    type: PropTypes.string,\n    color: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n    onClick: PropTypes.func,\n    onEnter: PropTypes.func,\n    disabled: PropTypes.bool\n  };\n\n  componentDidMount() {\n    if (window && this.props.onEnter) {\n      window.addEventListener('keyup', this.handleKeyUp);\n    }\n  }\n\n  componentWillUnmount() {\n    if (window && this.props.onEnter) {\n      window.removeEventListener('keyup', this.handleKeyUp);\n    }\n  }\n\n  handleKeyUp = e => {\n    if (e.keyCode === 13) {\n      if (this.props.onEnter && !this.props.disabled) this.props.onEnter(e);\n    }\n  };\n\n  render() {\n    let { style, type, children, color, onClick, isWindowFocused, disabled, ...props } = this.props;\n    delete props.onEnter;\n\n    let componentStyle = { ...styles.button };\n    if (!disabled && color === 'blue' && isWindowFocused) {\n      componentStyle = { ...componentStyle, ...styles.blue };\n    } else if (disabled) {\n      componentStyle = { ...componentStyle, opacity: '.5' };\n    }\n\n    componentStyle = { ...componentStyle, ...style };\n\n    return (\n      <button\n        ref=\"element\"\n        type={type || 'button'}\n        onClick={onClick}\n        style={removeDuplicatePaddingProps(componentStyle, this.props)}\n        disabled={disabled}\n        {...props}\n      >\n        {children}\n      </button>\n    );\n  }\n}\n\nexport default Button;\n"
  },
  {
    "path": "src/Button/macOs/styles/10.11.js",
    "content": "export default {\n  button: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    backgroundColor: '#ffffff',\n    outline: 'none',\n    borderWidth: '1px',\n    borderStyle: 'solid',\n    borderRadius: '5px',\n    borderTopColor: '#c8c8c8',\n    borderBottomColor: '#acacac',\n    borderLeftColor: '#c2c2c2',\n    borderRightColor: '#c2c2c2',\n    boxShadow: '0 1px rgba(0, 0, 0, .039)',\n    paddingTop: 0,\n    paddingBottom: 0,\n    paddingLeft: '13px',\n    paddingRight: '13px',\n    lineHeight: '19px',\n    fontFamily: '-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '13px',\n\n    ':active': {\n      backgroundImage: '-webkit-linear-gradient(top, #4c98fe 0%, #0564e3 100%)',\n      borderTopColor: '#247fff',\n      borderBottomColor: '#003ddb',\n      borderLeftColor: '#125eed',\n      borderRightColor: '#125eed',\n      color: 'rgba(255, 255, 255, .9  )'\n    }\n  },\n\n  blue: {\n    backgroundImage: '-webkit-linear-gradient(top, #6cb3fa 0%, #087eff 100%)',\n    borderTopColor: '#4ca2f9',\n    borderBottomColor: '#015cff',\n    borderLeftColor: '#267ffc',\n    borderRightColor: '#267ffc',\n    color: 'rgba(255, 255, 255, .9)',\n\n    ':active': {\n      backgroundImage: '-webkit-linear-gradient(top, #4c98fe 0%, #0564e3 100%)',\n      borderTopColor: '#247fff',\n      borderBottomColor: '#003ddb',\n      borderLeftColor: '#125eed',\n      borderRightColor: '#125eed',\n      color: 'rgba(255, 255, 255, .9  )'\n    }\n  }\n};\n"
  },
  {
    "path": "src/Button/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { colorPropTypes, colorContextTypes } from '../../style/color/windows';\nimport { ThemeContext, themePropTypes } from '../../style/theme/windows';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Radium from 'radium';\nimport { darkenColor } from '../../color';\nimport styles from './styles/windows10';\n\n@Hidden()\n@ThemeContext()\n@Radium\nclass Button extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...colorPropTypes,\n    ...themePropTypes,\n    type: PropTypes.string,\n    push: PropTypes.bool,\n    onClick: PropTypes.func\n  };\n\n  static contextTypes = {\n    ...colorContextTypes\n  };\n\n  render() {\n    let { style, type, children, color, push, onClick, ...props } = this.props;\n\n    let componentStyle = { ...styles.button, ...style };\n\n    if (color) {\n      color = color === true ? this.context.color : color;\n      styles.colorButton = {\n        ...styles.colorButton,\n        borderColor: color,\n        backgroundColor: color,\n        ':hover': {\n          ...styles.colorButton[':hover'],\n          borderColor: darkenColor(color, .35)\n        },\n\n        ':active': {\n          ...styles.colorButton[':active'],\n          borderColor: darkenColor(color, .35),\n          backgroundColor: darkenColor(color, .35)\n        }\n      };\n      componentStyle = { ...componentStyle, ...styles.colorButton };\n    }\n\n    if (push) {\n      componentStyle[':active'] = { ...componentStyle[':active'], ...styles.pushTransform };\n    }\n\n    return (\n      <button\n        ref=\"element\"\n        type={type || 'button'}\n        onClick={onClick}\n        style={componentStyle}\n        {...props}\n      >\n        {children}\n      </button>\n    );\n  }\n}\n\nexport default Button;\n"
  },
  {
    "path": "src/Button/windows/styles/windows10.js",
    "content": "export default {\n  button: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    backgroundColor: '#cccccc',\n    outline: 'none',\n    borderWidth: '2px',\n    borderStyle: 'solid',\n    borderColor: '#cccccc',\n    paddingTop: 0,\n    paddingBottom: 0,\n    paddingLeft: '32px',\n    paddingRight: '32px',\n    lineHeight: '28px',\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '15px',\n    color: '#000000',\n\n    ':hover': {\n      color: '#000000',\n      borderColor: '#7a7a7a'\n    },\n\n    ':active': {\n      color: '#000000',\n      borderColor: '#999999',\n      backgroundColor: '#999999'\n    }\n  },\n\n  colorButton: {\n    color: '#ffffff',\n    borderColor: '#0078d7',\n    backgroundColor: '#0078d7',\n\n    ':hover': {\n      borderColor: '#004e8c'\n    },\n\n    ':active': {\n      borderColor: '#004e8c',\n      backgroundColor: '#004e8c'\n    }\n  },\n\n  pushTransform: {\n    transform: 'scale(0.97)',\n    transition: 'transform .1s ease-in'\n  }\n};\n"
  },
  {
    "path": "src/Checkbox/macOs/Checkmark.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Radium from 'radium';\nimport styles from './styles/10.11';\n\n@Radium\nclass Checkmark extends Component {\n  static propTypes = {\n    show: PropTypes.bool,\n    color: PropTypes.string,\n    shadowColor: PropTypes.string\n  };\n\n  static defaultProps = {\n    color: '#FFFFFF'\n  };\n\n  render() {\n    const { color, shadowColor } = this.props;\n    let style = { ...styles.checkmark };\n    style.opacity = '0';\n    style.transform = 'scale(0)';\n    style.transition = 'all 0.5s';\n\n    if (this.props.show) {\n      style.opacity = '1';\n      style.transform = 'scale(1)';\n    }\n\n    return (\n      <div style={style}>\n        <svg viewBox=\"0 0 285 283.4\" style={styles.svg}>\n          <path\n            fill={color}\n            d=\"M101.2,215.7L227.5,20.6c0,0,20.7-31.9,44.4-16.2c25.4,16.8,6.1,41,6.1,41L134.5,271.9c0,0-8.8,11.5-23.9,11.5\n  s-29.2-13.3-29.2-13.3L2.7,175.4c0,0-9.4-17.3,6.8-27.4c19.7-12.3,34.6,2.8,34.6,2.8L101.2,215.7z\"\n          />\n        </svg>\n        <svg viewBox=\"0 0 285 283.4\" style={styles.svgShadow}>\n          <path\n            fill={shadowColor}\n            d=\"M101.2,215.7L227.5,20.6c0,0,20.7-31.9,44.4-16.2c25.4,16.8,6.1,41,6.1,41L134.5,271.9c0,0-8.8,11.5-23.9,11.5\n  s-29.2-13.3-29.2-13.3L2.7,175.4c0,0-9.4-17.3,6.8-27.4c19.7-12.3,34.6,2.8,34.6,2.8L101.2,215.7z\"\n          />\n        </svg>\n      </div>\n    );\n  }\n}\n\nexport default Checkmark;\n"
  },
  {
    "path": "src/Checkbox/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport WindowFocus from '../../windowFocus';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Radium, { getState } from 'radium';\nimport styles from './styles/10.11';\nimport Checkmark from './Checkmark';\nimport Text from '../../Text/macOs';\nimport ValueRef from '../../ValueRef';\n\n@ValueRef()\n@WindowFocus()\n@Hidden()\n@Radium\nclass Checkbox extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    label: PropTypes.string,\n    onChange: PropTypes.func\n  };\n\n  constructor(props) {\n    super();\n    this.state = {\n      checked: !!props.defaultChecked === true,\n      transition: true\n    };\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (nextProps.isWindowFocused !== this.props.isWindowFocused) {\n      this.setState({ transition: false });\n    }\n  }\n\n  componentDidUpdate() {\n    if (!this.state.transition) {\n      setTimeout(() => this.setState({ transition: true }), 0);\n    }\n  }\n\n  onChange = event => {\n    this.setState({ checked: event.target.checked });\n    if (this.props.onChange) {\n      this.props.onChange(event);\n    }\n  };\n\n  render() {\n    let { style, label, isWindowFocused, ...props } = this.props;\n    const { transition } = this.state;\n    let componentStyle = { ...styles.checkbox, ...style };\n    let labelStyle = styles.label;\n    let checkMarkColor = '#FFFFFF';\n    let shadowColor = '#0050a5';\n\n    if (this.state.checked) {\n      if (isWindowFocused) {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['checkbox:checked']\n        };\n        if (!transition) componentStyle.transition = 'none';\n      } else {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['checkbox:checked:unfocused']\n        };\n        checkMarkColor = '#404040';\n        shadowColor = '#FFFFFF';\n      }\n    }\n\n    if (getState(this.state, null, ':active')) {\n      if (this.state.checked) {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['checkbox:checked:active']\n        };\n        shadowColor = '#001d99';\n      } else {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['checkbox:active']\n        };\n      }\n    }\n\n    return (\n      <div style={styles.container}>\n        <label style={labelStyle}>\n          <div style={styles.inputWrapper}>\n            <input\n              ref=\"element\"\n              type=\"checkbox\"\n              {...props}\n              style={componentStyle}\n              onChange={this.onChange}\n            />\n            <Checkmark\n              show={this.state.checked}\n              color={checkMarkColor}\n              shadowColor={shadowColor}\n            />\n          </div>\n          <Text style={{ display: 'inline' }}>{label}</Text>\n        </label>\n      </div>\n    );\n  }\n}\n\nexport default Checkbox;\n"
  },
  {
    "path": "src/Checkbox/macOs/styles/10.11.js",
    "content": "export default {\n  container: {\n    display: 'flex'\n  },\n\n  label: {\n    display: 'flex',\n    height: '20px',\n    position: 'relative',\n\n    ':hover': {},\n    ':active': {}\n  },\n\n  inputWrapper: {\n    position: 'relative',\n    marginRight: '3px',\n    paddingTop: '1px'\n  },\n\n  checkbox: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppearance: 'none',\n    appearance: 'none',\n    borderWidth: '1px',\n    borderStyle: 'solid',\n    borderColor: '#b8b8b8',\n    borderRadius: '3px',\n    backgroundColor: '#ffffff',\n    padding: '6px',\n    margin: '0 1px',\n    boxShadow: 'inset 0 1px 0 0 rgba(224, 224, 224, .4)',\n    transition: 'all 0.4s',\n\n    ':focus': {\n      outline: 'none'\n    }\n  },\n\n  'checkbox:active': {\n    borderColor: '#a4a4a4',\n    backgroundColor: '#f0f0f0',\n    boxShadow: 'inset 0 0 0 1px rgba(117, 117, 117, .35)',\n    transition: 'all 0.4s'\n  },\n\n  'checkbox:checked': {\n    backgroundColor: '#3b99fc',\n    boxShadow: 'none',\n    borderColor: '#2c91fc',\n    transition: 'all 0.4s'\n  },\n\n  'checkbox:checked:unfocused': {\n    backgroundColor: '#ffffff',\n    boxShadow: 'none',\n    borderColor: '#b8b8b8',\n    transition: 'none'\n  },\n\n  'checkbox:checked:active': {\n    backgroundColor: '#0080f6',\n    borderColor: '#006adc',\n    boxShadow: 'inset 0 0 0 1px rgba(19, 68, 119, .22)',\n    transition: 'all 0.4s'\n  },\n\n  checkmark: {\n    position: 'absolute',\n    top: '4px',\n    left: '4px',\n    width: '8px',\n    height: '8px'\n  },\n\n  svg: {\n    zIndex: '2',\n    position: 'absolute',\n    top: '0px',\n    left: '0px',\n    height: '8px'\n  },\n\n  svgShadow: {\n    zIndex: '1',\n    position: 'absolute',\n    top: '1.5px',\n    left: '0px',\n    opacity: '.37',\n    height: '8px',\n    filter: 'blur(.5px)'\n  }\n};\n"
  },
  {
    "path": "src/Checkbox/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { ColorContext, colorPropTypes, colorContextTypes } from '../../style/color/windows';\nimport { ThemeContext, themePropTypes, themeContextTypes } from '../../style/theme/windows';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Radium, { getState } from 'radium';\nimport styles from './styles/windows10';\nimport ValueRef from '../../ValueRef';\n\n@ValueRef()\n@Hidden()\n@ColorContext()\n@ThemeContext()\n@Radium\nclass Checkbox extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...colorPropTypes,\n    ...themePropTypes,\n    label: PropTypes.string,\n    onChange: PropTypes.func\n  };\n\n  static contextTypes = {\n    ...colorContextTypes,\n    ...themeContextTypes\n  };\n\n  constructor(props) {\n    super();\n    this.state = {\n      checked: !!props.defaultChecked === true\n    };\n  }\n\n  handleChange = event => {\n    this.setState({ checked: event.target.checked });\n    if (this.props.onChange) {\n      this.props.onChange(event);\n    }\n  };\n\n  render() {\n    let { style, label, color, ...props } = this.props;\n    let componentStyle = { ...styles.checkbox };\n    let checkedStyle = { display: 'none' };\n    let textStyle = { ...styles.text };\n\n    if (this.context.theme === 'dark') {\n      componentStyle = { ...componentStyle, ...styles.checkboxDark };\n      textStyle = { ...textStyle, ...styles.textDark };\n    }\n\n    if (this.state.checked) {\n      checkedStyle = styles.svg;\n      componentStyle = {\n        ...componentStyle,\n        ...(this.context.theme === 'dark' ? styles['checkboxDark:checked'] : styles['checkbox:checked'])\n      };\n\n      color = color ? color : this.context.color;\n      componentStyle = {\n        ...componentStyle,\n        backgroundColor: color,\n        borderColor: color\n      };\n    }\n\n    if (getState(this.state, null, ':active')) {\n      componentStyle = {\n        ...componentStyle,\n        ...(this.context.theme === 'dark' ? styles['checkboxDark:active'] : styles['checkbox:active'])\n      };\n    } else if (getState(this.state, null, ':hover')) {\n      componentStyle = {\n        ...componentStyle,\n        ...(this.context.theme === 'dark' ? styles['checkboxDark:hover'] : styles['checkbox:hover'])\n      };\n    }\n\n    return (\n      <div style={{ ...styles.container, ...style }}>\n        <label style={styles.label}>\n          <div style={styles.inputWrapper}>\n            <input\n              ref=\"element\"\n              type=\"checkbox\"\n              {...props}\n              style={componentStyle}\n              onChange={this.handleChange}\n            />\n            <svg x=\"0px\" y=\"0px\" viewBox=\"0 0 6.4 6.4\" style={checkedStyle}>\n              <polygon fill=\"#fff\" points=\"0,3.3 2.2,5.5 6.4,1.23 6.1,0.9 2.2,4.8 0.3,2.9 \"/>\n            </svg>\n          </div>\n          <span style={textStyle}>\n            {label}\n          </span>\n        </label>\n      </div>\n    );\n  }\n}\n\nexport default Checkbox;\n"
  },
  {
    "path": "src/Checkbox/windows/styles/windows10.js",
    "content": "export default {\n  container: {\n    display: 'flex',\n    marginBottom: '22px'\n  },\n\n  label: {\n    display: 'flex',\n    alignItems: 'center',\n    position: 'relative',\n\n    ':hover': {},\n    ':active': {}\n  },\n\n  text: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '15px',\n    marginTop: '1px',\n    color: '#000000'\n  },\n\n  textDark: {\n    color: '#ffffff'\n  },\n\n  inputWrapper: {\n    position: 'relative',\n    marginRight: '3px',\n    paddingTop: '1px'\n  },\n\n  checkbox: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppearance: 'none',\n    appearance: 'none',\n    outline: 'none',\n    borderWidth: '2px',\n    borderStyle: 'solid',\n    borderColor: 'rgba(0, 0, 0, .8)',\n    padding: '8px',\n    color: '#fff',\n    verticalAlign: 'bottom',\n    marginRight: '6px',\n\n    ':focus': {\n      outline: 'none'\n    }\n  },\n\n  checkboxDark: {\n    borderColor: 'rgba(255, 255, 255, .82)',\n  },\n\n  'checkbox:active': {\n    borderColor: 'rgba(0, 0, 0, 0)',\n    backgroundColor: 'rgba(0, 0, 0, .57)'\n  },\n\n  'checkbox:hover': {\n    borderColor: 'rgba(0, 0, 0, 1)'\n  },\n\n  'checkbox:checked': {\n    backgroundColor: '#007CD1',\n    borderColor: '#007CD1'\n  },\n\n  'checkboxDark:active': {\n    borderColor: 'rgba(255, 255, 255, 0)',\n    backgroundColor: 'rgba(255, 255, 255, .63)'\n  },\n\n  'checkboxDark:hover': {\n    borderColor: 'rgba(255, 255, 255, 1)'\n  },\n\n  'checkboxDark:checked': {\n    backgroundColor: '#007CD1',\n    borderColor: '#007CD1'\n  },\n\n  svg: {\n    position: 'absolute',\n    top: '6px',\n    left: '5px',\n    color: '#fff',\n    height: '16px'\n  }\n};\n"
  },
  {
    "path": "src/Dialog/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Alignment, {\n  alignmentPropTypes,\n  removeAlignmentProps\n} from '../../style/alignment';\nimport Text from '../../Text/macOs';\nimport styles from './style/10.11';\n\n@Margin({\n  marginTop: '17px',\n  marginBottom: '19px',\n  marginLeft: '20px',\n  marginRight: '20px'\n})\nclass Dialog extends Component {\n  static propTypes = {\n    ...marginPropTypes,\n    ...alignmentPropTypes,\n    icon: PropTypes.element,\n    title: PropTypes.string,\n    message: PropTypes.string,\n    children: PropTypes.oneOfType([PropTypes.element, PropTypes.array]),\n    buttons: PropTypes.array\n  };\n\n  isLast(...next) {\n    let isLast = false;\n    for (let i = 0, len = next.length; i < len; ++i) {\n      if (next[i]) isLast = false;\n    }\n    return isLast;\n  }\n\n  render() {\n    let {\n      icon,\n      style,\n      title,\n      message,\n      children,\n      buttons,\n      ...props\n    } = this.props;\n\n    props = removeAlignmentProps(props);\n\n    return (\n      <div style={{ ...styles.container, ...style }} {...props}>\n        {this.renderIcon(icon)}\n        <div style={styles.contentContainer}>\n          {this.renderTitle(title, this.isLast(message, children, buttons))}\n          {this.renderMessage(message, this.isLast(children, buttons))}\n          {this.renderChildren(children, this.isLast(buttons))}\n          {this.renderButtons(buttons)}\n        </div>\n      </div>\n    );\n  }\n\n  renderIcon(icon) {\n    if (icon) {\n      return (\n        <div style={styles.icon} onMouseDown={e => e.preventDefault()}>\n          {icon}\n        </div>\n      );\n    }\n    return null;\n  }\n\n  renderTitle(title, isLast) {\n    const style = styles.title;\n    if (isLast) delete style.marginBottom;\n    if (title)\n      return (\n        <Text bold style={style}>\n          {title}\n        </Text>\n      );\n    return null;\n  }\n\n  renderMessage(message, isLast) {\n    const style = styles.message;\n    if (isLast) delete style.marginBottom;\n    if (message) return <Text style={style}>{message}</Text>;\n    return null;\n  }\n\n  renderChildren(children, isLast) {\n    const style = styles.content;\n    if (isLast) delete style.marginBottom;\n    if (children)\n      return Alignment(<div style={style}>{children}</div>, {\n        ...this.props,\n        layout: 'vertical'\n      });\n    return null;\n  }\n\n  renderButtons(buttons) {\n    if (buttons) {\n      return (\n        <div style={styles.buttons}>\n          {buttons.map((button, index) => (\n            <div style={styles.buttonContainer} key={index}>\n              {button}\n            </div>\n          ))}\n        </div>\n      );\n    }\n    return null;\n  }\n}\n\nexport default Dialog;\n"
  },
  {
    "path": "src/Dialog/macOs/style/10.11.js",
    "content": "export default {\n  container: {\n    MozUserSelect: 'none',\n    WebkitUserSelect: 'none',\n    MsUserSelect: 'none',\n    userSelect: 'none',\n    WebkitUserDrag: 'none',\n    userDrag: 'none',\n    WebkitTouchCallout: 'none',\n    display: 'flex',\n    position: 'relative'\n  },\n  icon: {\n    width: '67px',\n    marginRight: '20px',\n    display: 'flex',\n    justifyContent: 'center',\n  },\n  contentContainer: {\n    flex: 1\n  },\n  title: {\n    marginBottom: '5px'\n  },\n  message: {\n    marginBottom: '16px'\n  },\n  content: {\n    display: 'flex',\n    flexDirection: 'column',\n    marginBottom: '16px',\n    position: 'relative'\n  },\n  buttons: {\n    display: 'flex',\n    justifyContent: 'flex-end'\n  },\n  buttonContainer: {\n    marginLeft: '14px'\n  }\n};\n"
  },
  {
    "path": "src/Label/macOs/index.js",
    "content": "import Label from '../../Text/macOs';\n\nexport default Label;\n"
  },
  {
    "path": "src/Label/windows/index.js",
    "content": "import Label from '../../Text/windows';\n\nexport default Label;\n"
  },
  {
    "path": "src/Link/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Padding, { paddingPropTypes } from '../../style/padding';\nimport FontSize, { fontSizePropTypes } from '../../style/fontSize';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport TextAlign, { textAlignPropTypes } from '../../style/textAlign';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\n\nconst componentStyle = {\n  display: 'inline-block',\n  WebkitUserSelect: 'none',\n  userSelect: 'none',\n  cursor: 'default',\n  fontFamily: '-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif',\n  fontSize: '11px',\n  textDecoration: 'none'\n};\n\n@Margin()\n@Padding()\n@FontSize()\n@Dimension()\n@TextAlign()\n@Hidden()\nclass Link extends Component {\n  static propTypes = {\n    ...marginPropTypes,\n    ...paddingPropTypes,\n    ...fontSizePropTypes,\n    ...dimensionPropTypes,\n    ...textAlignPropTypes,\n    ...hiddenPropTypes,\n    color: PropTypes.string\n  };\n\n  static defaultProps = {\n    color: '#009df0'\n  };\n\n  render() {\n    const { color, children, style, ...props } = this.props;\n\n    return (\n      <a style={{ ...componentStyle, color, ...style }} {...props}>\n        {children}\n      </a>\n    );\n  }\n}\n\nexport default Link;\n"
  },
  {
    "path": "src/ListView/macOs/Footer/index.js",
    "content": "import React, { Component } from 'react';\nimport Background, { backgroundPropTypes } from '../../../style/background/macOs';\nimport Dimension, { dimensionPropTypes } from '../../../style/dimension';\nimport Padding, { paddingPropTypes } from '../../../style/padding';\nimport styles from './style/10.11';\n\n@Background({ background: '#f0f0f0' })\n@Dimension()\n@Padding({ paddingLeft: '10px', paddingRight: '10px', paddingTop: '2px', paddingBottom: '2px' })\nclass Footer extends Component {\n  static propTypes = {\n    ...backgroundPropTypes,\n    ...dimensionPropTypes,\n    ...paddingPropTypes\n  };\n\n  render() {\n    const { children, style, ...props } = this.props;\n\n    return (\n      <footer style={{ ...styles.header, ...style }} {...props}>\n        {children}\n      </footer>\n    );\n  }\n}\n\nexport default Footer;\n"
  },
  {
    "path": "src/ListView/macOs/Footer/style/10.11.js",
    "content": "export default {\n  header: {\n    top: '0px',\n    left: '0px',\n    width: '100%',\n    borderTopWidth: '1px',\n    borderTopStyle: 'solid',\n    borderTopColor: '#c9c9c9',\n    boxSizing: 'border-box'\n  }\n};\n"
  },
  {
    "path": "src/ListView/macOs/Header/index.js",
    "content": "import React, { Component } from 'react';\nimport Background, { backgroundPropTypes } from '../../../style/background/macOs';\nimport Dimension, { dimensionPropTypes } from '../../../style/dimension';\nimport Padding, { paddingPropTypes } from '../../../style/padding';\nimport styles from './style/10.11';\n\n@Background({ background: '#f0f0f0' })\n@Dimension()\n@Padding({ paddingLeft: '10px', paddingRight: '10px', paddingTop: '2px', paddingBottom: '2px' })\nclass Header extends Component {\n  static propTypes = {\n    ...backgroundPropTypes,\n    ...dimensionPropTypes,\n    ...paddingPropTypes\n  };\n\n  render() {\n    const { children, style, ...props } = this.props;\n\n    return (\n      <header style={{ ...styles.header, ...style }} {...props}>\n        {children}\n      </header>\n    );\n  }\n}\n\nexport default Header;\n"
  },
  {
    "path": "src/ListView/macOs/Header/style/10.11.js",
    "content": "export default {\n  header: {\n    top: '0px',\n    left: '0px',\n    width: '100%',\n    borderBottomWidth: '1px',\n    borderBottomStyle: 'solid',\n    borderBottomColor: '#c9c9c9',\n    boxSizing: 'border-box'\n  }\n};\n"
  },
  {
    "path": "src/ListView/macOs/Row/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Background, { backgroundPropTypes } from '../../../style/background/macOs';\nimport Alignment, { alignmentPropTypes } from '../../../style/alignment';\nimport Dimension, { dimensionPropTypes } from '../../../style/dimension';\nimport Hidden, { hiddenPropTypes } from '../../../style/hidden';\nimport Margin, { marginPropTypes } from '../../../style/margin';\nimport Padding, { paddingPropTypes } from '../../../style/padding';\nimport styles from './style/10.11';\n\n@Background()\n@Alignment()\n@Dimension()\n@Hidden()\n@Margin({ marginTop: '4px', marginBottom: '4px' })\n@Padding({ paddingLeft: '18px', paddingRight: '18px', paddingTop: '5px', paddingBottom: '5px' })\nclass Row extends Component {\n  static propTypes = {\n    ...backgroundPropTypes,\n    ...alignmentPropTypes,\n    ...dimensionPropTypes,\n    ...hiddenPropTypes,\n    ...marginPropTypes,\n    ...paddingPropTypes,\n    layout: PropTypes.string\n  };\n\n  static defaultProps = {\n    layout: 'horizontal'\n  };\n\n  render() {\n    const { horizontalAlignment, children, style, layout, ...props } = this.props;\n\n    let componentStyle = { ...styles.row };\n\n    if (layout === 'vertical') {\n      componentStyle.flexDirection = 'column';\n      if (horizontalAlignment) {\n        switch(horizontalAlignment) {\n        case 'center': componentStyle.alignItems = 'center'; break;\n        case 'left': componentStyle.alignItems = 'flex-start'; break;\n        case 'right': componentStyle.alignItems = 'flex-end'; break;\n        }\n      }\n    } else {\n      if (horizontalAlignment) {\n        switch(horizontalAlignment) {\n        case 'center': componentStyle.justifyContent = 'center'; break;\n        case 'left': componentStyle.justifyContent = 'flex-start'; break;\n        case 'right': componentStyle.justifyContent = 'flex-end'; break;\n        }\n      }\n    }\n\n    return (\n      <li style={{ ...styles.row, ...style }} {...props}>\n        {children}\n      </li>\n    );\n  }\n}\n\nexport default Row;\n"
  },
  {
    "path": "src/ListView/macOs/Row/style/10.11.js",
    "content": "export default {\n  row: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    display: 'flex',\n    position: 'relative'\n  }\n};\n"
  },
  {
    "path": "src/ListView/macOs/Section/Header/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './style/10.11';\nimport Text from '../../../../Text/macOs';\nimport Margin, {\n  marginPropTypes,\n  removeMarginProps\n} from '../../../../style/margin';\nimport Padding, {\n  paddingPropTypes,\n  removePaddingProps\n} from '../../../../style/padding';\nimport { fontSizePropTypes } from '../../../../style/fontSize';\nimport mapStyles from '../../../../utils/mapStyles';\n\nclass Header extends Component {\n  static propTypes = {\n    ...marginPropTypes,\n    ...paddingPropTypes,\n    ...fontSizePropTypes,\n    color: PropTypes.string,\n    bold: PropTypes.oneOfType([\n      PropTypes.bool,\n      PropTypes.number,\n      PropTypes.string\n    ])\n  };\n\n  static defaultProps = {\n    color: '#5a5b5c',\n    bold: true,\n    size: '10'\n  };\n\n  static mapStyles = {\n    text: ['color', 'fontSize', 'fontWeight', 'lineHeight', 'fontFamily']\n  };\n\n  render() {\n    let { color, bold, size, children, style, ...props } = this.props;\n\n    props = removePaddingProps(removeMarginProps(props));\n\n    let [headerStyle, textStyle] = mapStyles(style, Header.mapStyles);\n\n    return (\n      <header {...props} style={headerStyle}>\n        {Padding(\n          Margin(\n            <h2 style={styles.title}>\n              <Text color={color} size={size} bold={bold} style={textStyle}>\n                {children}\n              </Text>\n            </h2>,\n            this.props\n          ),\n          this.props\n        )}\n      </header>\n    );\n  }\n}\n\nexport default Header;\n"
  },
  {
    "path": "src/ListView/macOs/Section/Header/style/10.11.js",
    "content": "export default {\n  title: {\n    margin: '9px 0px',\n    padding: '0px 10px',\n    fontWeight: 'normal'\n  }\n};\n"
  },
  {
    "path": "src/ListView/macOs/Section/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Header from './Header';\nimport styles from './style/10.11';\n\nclass Section extends Component {\n  static propTypes = {\n    header: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.element,\n      PropTypes.array\n    ])\n  };\n\n  render() {\n    let { children, header, ...props } = this.props;\n\n    if (typeof header === 'string') {\n      header = <Header>{header}</Header>;\n    }\n\n    return (\n      <section {...props}>\n        {header}\n        <ul style={styles.list}>{children}</ul>\n      </section>\n    );\n  }\n}\n\nexport default Section;\n"
  },
  {
    "path": "src/ListView/macOs/Section/style/10.11.js",
    "content": "export default {\n  list: {\n    listStyle: 'none',\n    padding: '0px',\n    margin: '0px'\n  }\n};\n"
  },
  {
    "path": "src/ListView/macOs/Separator/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Dimension, { dimensionPropTypes } from '../../../style/dimension';\nimport Hidden, { hiddenPropTypes } from '../../../style/hidden';\nimport Margin, { marginPropTypes } from '../../../style/margin';\nimport Padding, { paddingPropTypes } from '../../../style/padding';\nimport styles from './style/10.11';\n\n@Dimension()\n@Hidden()\n@Margin({ marginLeft: '10px', marginRight: '10px', marginTop: '4px', marginBottom: '4px' })\n@Padding()\nclass Separator extends Component {\n  static propTypes = {\n    ...dimensionPropTypes,\n    ...hiddenPropTypes,\n    ...marginPropTypes,\n    ...paddingPropTypes,\n    color: PropTypes.string,\n  };\n\n  static defaultProps = {\n    color: '#e5e5e5'\n  };\n\n  render() {\n    const { style, ...props } = this.props;\n\n    return (\n      <hr style={{ ...styles.separator, ...style }} {...props}/>\n    );\n  }\n}\n\nexport default Separator;\n"
  },
  {
    "path": "src/ListView/macOs/Separator/style/10.11.js",
    "content": "export default {\n  separator: {\n    height: '1px',\n    margin: '0px',\n    padding: '0px',\n    border: 'none'\n  }\n};\n"
  },
  {
    "path": "src/ListView/macOs/index.js",
    "content": "import React, { Component, Children } from 'react';\nimport styles from './style/10.11';\nimport Background, { backgroundPropTypes } from '../../style/background/macOs';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Padding, { paddingPropTypes } from '../../style/padding';\nimport Header from './Header';\nimport Footer from './Footer';\nimport Row from './Row';\n\n@Background()\n@Dimension()\n@Hidden()\n@Margin()\n@Padding()\nclass ListView extends Component {\n  static propTypes = {\n    ...backgroundPropTypes,\n    ...dimensionPropTypes,\n    ...hiddenPropTypes,\n    ...marginPropTypes,\n    ...paddingPropTypes\n  };\n\n  mapChildren(children) {\n    let hasDirectRows = false;\n    let header = null,\n      items = null,\n      footer = null;\n    Children.map(children, child => {\n      const HeaderEl = <Header />;\n      const FooterEl = <Footer />;\n      const RowEl = <Row />;\n\n      if (child.type === HeaderEl.type) return (header = child);\n      else if (child.type === FooterEl.type) return (footer = child);\n      else if (child.type === RowEl.type) hasDirectRows = true;\n\n      if (!items) items = [];\n      items.push(child);\n    });\n\n    if (hasDirectRows) {\n      items = <ul style={styles.list}>{items}</ul>;\n    }\n\n    return { header, items, footer };\n  }\n\n  render() {\n    const { children, style, ...props } = this.props;\n\n    const { header, items, footer } = this.mapChildren(children);\n\n    return (\n      <section style={{ ...styles.container, ...style }} {...props}>\n        {header}\n        <div ref=\"scrollable\" style={{ ...styles.scrollable }}>\n          {items}\n        </div>\n        {footer}\n      </section>\n    );\n  }\n}\n\nexport default ListView;\n"
  },
  {
    "path": "src/ListView/macOs/style/10.11.js",
    "content": "export default {\n  container: {\n    position: 'relative',\n    display: 'flex',\n    flex: 1,\n    height: '100%',\n    flexDirection: 'column'\n  },\n\n  scrollable: {\n    overflow: 'scroll',\n    width: '100%',\n    display: 'flex',\n    flex: 1,\n    flexDirection: 'column'\n  },\n\n  list: {\n    listStyle: 'none',\n    padding: '0px',\n    margin: '0px',\n  }\n};\n"
  },
  {
    "path": "src/MasterDetailsView/windows/Details/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { convertColor } from '../../../color';\nimport { ColorContext, colorPropTypes, colorContextTypes } from '../../../style/color/windows';\nimport { ThemeContext, themePropTypes } from '../../../style/theme/windows';\n\nconst styles = {\n  details: {\n    display: 'flex',\n    flexWrap: 'nowrap',\n    position: 'relative',\n    flex: '1'\n  }\n};\n\n@ColorContext()\n@ThemeContext()\nclass Details extends Component {\n  static propTypes = {\n    ...colorPropTypes,\n    ...themePropTypes,\n    background: PropTypes.oneOfType([PropTypes.string, PropTypes.bool])\n  };\n\n  static childContextTypes = {\n    background: PropTypes.string\n  };\n\n  static contextTypes = {\n    ...colorContextTypes\n  };\n\n  getChildContext() {\n    return {\n      background: typeof this.props.background === 'string' ? this.props.background : this.context.color\n    };\n  }\n\n  render() {\n    const { children, style, background, ...props } = this.props;\n    delete props.index;\n    let componentStyle = { ...styles.details, ...style };\n\n    if (background === true) {\n      componentStyle.backgroundColor = convertColor(this.context.color);\n    } else if (typeof background === 'string') {\n      componentStyle.backgroundColor = convertColor(background);\n    }\n\n    return (\n      <div\n        style={componentStyle}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default Details;\n"
  },
  {
    "path": "src/MasterDetailsView/windows/Item/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Master from '../Master';\nimport Details from '../Details';\nimport { ColorContext, colorPropTypes } from '../../../style/color/windows';\nimport { ThemeContext, themePropTypes } from '../../../style/theme/windows';\n\nconst styles = {\n  display: 'flex',\n  flexWrap: 'nowrap',\n  position: 'relative',\n  flex: '1'\n};\n\nlet warnOnceMaster = false;\nlet warnOnceDetails = false;\nfunction applyChildenClasses() {\n  return function(ComposedComponent) {\n    const nextMaster = Master;\n    ComposedComponent.prototype.Master = ComposedComponent.Master = function(\n      ...args\n    ) {\n      if (!warnOnceMaster) {\n        warnOnceMaster = true;\n        console.warn(\n          'React Desktop: Using MasterDetailsView.Item.Master is deprecated, import MasterDetailsViewItemMaster instead.'\n        );\n      }\n      return new nextMaster(...args);\n    };\n    const nextDetails = Details;\n    ComposedComponent.prototype.Details = ComposedComponent.Details = function(\n      ...args\n    ) {\n      if (!warnOnceDetails) {\n        warnOnceDetails = true;\n        console.warn(\n          'React Desktop: Using MasterDetailsView.Item.Details is deprecated, import MasterDetailsViewItemDetails instead.'\n        );\n      }\n      return new nextDetails(...args);\n    };\n    return ComposedComponent;\n  };\n}\n\n@applyChildenClasses()\n@ColorContext()\n@ThemeContext()\nclass Item extends Component {\n  static propTypes = {\n    ...colorPropTypes,\n    ...themePropTypes,\n    selected: PropTypes.bool\n  };\n\n  constructor(props, context, updater) {\n    super(props, context, updater);\n    this.state = {\n      selected: props.selected ? props.selected : false\n    };\n  }\n\n  render() {\n    const { children, style, ...props } = this.props;\n\n    return (\n      <div style={{ ...styles, ...style }} {...props}>\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default Item;\n"
  },
  {
    "path": "src/MasterDetailsView/windows/Master/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { parseDimension } from '../../../styleHelper';\nimport { convertColor, hexToRgb } from '../../../color';\nimport { ColorContext, colorPropTypes, colorContextTypes } from '../../../style/color/windows';\nimport { ThemeContext, themePropTypes, themeContextTypes } from '../../../style/theme/windows';\nimport Radium from 'radium';\n\nconst styles = {\n  master: {\n    display: 'flex',\n    flexWrap: 'nowrap',\n    position: 'relative',\n    width: '320px',\n    boxSizing: 'border-box',\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    ':hover': {\n      backgroundColor: 'rgba(0, 0, 0, .1)'\n    },\n    ':active': {\n      backgroundColor: 'rgba(0, 0, 0, .2)'\n    }\n  },\n\n  masterDark: {\n    ':hover': {\n      backgroundColor: 'rgba(255, 255, 255, .1)'\n    },\n    ':active': {\n      backgroundColor: 'rgba(255, 255, 255, .2)'\n    }\n  },\n\n  masterSpan: {\n    padding: '0 12px',\n    lineHeight: '50px',\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '18px',\n    color: '#000000',\n    width: '320px',\n    boxSizing: 'border-box',\n\n    transition: 'transform .1s ease-in',\n    ':hover': {\n      transition: 'transform .1s ease-in'\n    }\n  },\n\n  masterSpanDark: {\n    color: 'white'\n  },\n\n  masterSpanWithPush: {\n    ':active': {\n      transform: 'scale(0.97)',\n      transition: 'transform 0s ease-in'\n    }\n  }\n};\n\n@ColorContext()\n@ThemeContext()\n@Radium\nclass Master extends Component {\n  static propTypes = {\n    ...colorPropTypes,\n    ...themePropTypes,\n    selected: PropTypes.bool,\n    width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    push: PropTypes.bool\n  };\n\n  static contextTypes = {\n    ...colorContextTypes,\n    ...themeContextTypes,\n    id: PropTypes.string,\n    width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    push: PropTypes.bool,\n    masterDetails: PropTypes.object\n  };\n\n  select = () => {\n    this.context.masterDetails.select(this.props.index);\n  };\n\n  render() {\n    const { children, style, selected, push, ...props } = this.props;\n    delete props.index;\n    let componentStyle = { ...styles.master, ...style };\n    let spanStyle = { ...styles.masterSpan };\n\n    if (this.context.theme === 'dark') {\n      componentStyle = { ...componentStyle, ...styles.masterDark };\n      spanStyle = { ...spanStyle, ...styles.masterSpanDark };\n    }\n\n    if (this.props.width) {\n      componentStyle.width = parseDimension(this.props.width);\n      spanStyle.width = parseDimension(this.props.width);\n    }\n\n    if (push) {\n      spanStyle[':active'] = {\n        ...spanStyle[':active'],\n        ...styles.masterSpanWithPush[':active']\n      }\n    }\n\n    if (selected) {\n      const c = hexToRgb(convertColor(this.context.color));\n      componentStyle = {\n        ...componentStyle,\n        backgroundColor: `rgba(${c.r}, ${c.g}, ${c.b}, .4)`,\n        ':hover': {\n          ...componentStyle[':hover'],\n          backgroundColor: `rgba(${c.r}, ${c.g}, ${c.b}, .6)`\n        },\n        ':active': {\n          ...componentStyle[':active'],\n          backgroundColor: `rgba(${c.r}, ${c.g}, ${c.b}, .7)`\n        }\n      };\n    }\n\n    return (\n      <div\n        style={componentStyle}\n        onClick={this.select}\n        {...props}\n      >\n        <span key=\"span\" style={spanStyle}>\n          {children}\n        </span>\n      </div>\n    );\n  }\n}\n\nexport default Master;\n"
  },
  {
    "path": "src/MasterDetailsView/windows/Pane.js",
    "content": "import React, { Component } from 'react';\nimport { parseDimension } from '../../styleHelper';\nimport { ThemeContext, themeContextTypes } from '../../style/theme/windows';\n\nconst styles = {\n  pane: {\n    display: 'flex',\n    flexDirection: 'column',\n    flexWrap: 'nowrap',\n    position: 'relative',\n    flex: '0 0 320px',\n    width: '320px'\n  },\n\n  paneDark: {\n  }\n};\n\n@ThemeContext()\nclass Pane extends Component {\n  static contextTypes = {\n    ...themeContextTypes\n  };\n\n  render() {\n    const { children, style, ...props } = this.props;\n\n    let componentStyle = { ...styles.pane, ...style };\n\n    if (this.props.width) {\n      componentStyle.width = parseDimension(this.props.width);\n      componentStyle.flex = '0 0 ' + parseDimension(this.props.width);\n    }\n\n    if (this.context.theme === 'dark') {\n      componentStyle = { ...componentStyle, ...styles.paneDark };\n    }\n\n    return (\n      <div\n        style={componentStyle}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default Pane;\n"
  },
  {
    "path": "src/MasterDetailsView/windows/index.js",
    "content": "import React, { Component, Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport Master from './Master';\nimport Details from './Details';\nimport Pane from './Pane';\nimport Item from './Item';\nimport { ColorContext, colorPropTypes } from '../../style/color/windows';\nimport {\n  ThemeContext,\n  themePropTypes,\n  themeContextTypes\n} from '../../style/theme/windows';\n\nconst styles = {\n  container: {\n    display: 'flex',\n    flexWrap: 'nowrap',\n    position: 'relative',\n    flex: '1',\n    background: 'white',\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default'\n  },\n\n  containerDark: {\n    background: '#171717'\n  }\n};\n\nlet warnOnce = false;\nfunction applyChildenClasses() {\n  return function(ComposedComponent) {\n    const nextItem = Item;\n    const item = function(...args) {\n      if (!warnOnce) {\n        warnOnce = true;\n        console.warn(\n          'React Desktop: Using MasterDetailsView.Item is deprecated, import MasterDetailsViewItem instead.'\n        );\n      }\n      return new nextItem(...args);\n    };\n\n    item.prototype.Master = item.Master = Master;\n    item.prototype.Details = item.Details = Details;\n    ComposedComponent.prototype.Item = ComposedComponent.Item = item;\n    return ComposedComponent;\n  };\n}\n\n@applyChildenClasses()\n@ColorContext()\n@ThemeContext()\nclass MasterDetailsView extends Component {\n  static propTypes = {\n    ...colorPropTypes,\n    ...themePropTypes\n  };\n\n  static childContextTypes = {\n    masterDetails: PropTypes.object\n  };\n\n  static contextTypes = {\n    ...themeContextTypes\n  };\n\n  masters = [];\n  details = [];\n\n  maxWidth;\n\n  constructor(props, context, updater) {\n    super(props, context, updater);\n    this.state = {\n      selected: 0\n    };\n    this.filterChildren(props.children);\n  }\n\n  getChildContext() {\n    return {\n      masterDetails: this\n    };\n  }\n\n  select(index) {\n    this.setState({ selected: index });\n  }\n\n  filterChildren(children) {\n    this.maxWidth = null;\n    Children.map(children, (item, key) => {\n      Children.map(item.props.children, child => {\n        const MasterEl = <Master />;\n        const DetailsEl = <Details />;\n        if (child.type === MasterEl.type) {\n          if (\n            child.props.width !== undefined &&\n            child.props.width > this.maxWidth\n          ) {\n            this.maxWidth = child.props.width;\n          }\n          this.masters = [\n            ...this.masters,\n            cloneElement(child, { key: key, index: key })\n          ];\n        } else if (child.type === DetailsEl.type) {\n          this.details = [\n            ...this.details,\n            cloneElement(child, { key: key, index: key })\n          ];\n        }\n      });\n    });\n  }\n\n  render() {\n    const { style, ...props } = this.props;\n    let componentStyle = { ...styles.container, ...style };\n\n    if (this.context.theme === 'dark') {\n      componentStyle = { ...componentStyle, ...styles.containerDark, ...style };\n    }\n\n    return (\n      <div style={componentStyle} {...props}>\n        <Pane width={this.maxWidth}>{this.renderMasters()}</Pane>\n        {this.renderDetail()}\n      </div>\n    );\n  }\n\n  renderMasters() {\n    let children = [];\n    this.masters.forEach((item, index) => {\n      children.push(\n        index === this.state.selected\n          ? cloneElement(item, { selected: true })\n          : item\n      );\n    });\n    return children;\n  }\n\n  renderDetail() {\n    let children = null;\n    this.details.forEach((item, index) => {\n      if (index === this.state.selected) children = item;\n    });\n    return children;\n  }\n}\n\nexport default MasterDetailsView;\n"
  },
  {
    "path": "src/NavPane/windows/Item/Content/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Padding, { paddingPropTypes } from '../../../../style/padding';\nimport Margin, { marginPropTypes } from '../../../../style/margin';\nimport Background, { backgroundPropTypes } from '../../../../style/background/windows';\nimport Alignment, { alignmentPropTypes } from '../../../../style/alignment';\nimport styles from '../../style/windows10';\n\n@Padding()\n@Margin()\n@Background()\n@Alignment()\nclass Content extends Component {\n  static propTypes = {\n    ...paddingPropTypes,\n    ...marginPropTypes,\n    ...backgroundPropTypes,\n    ...alignmentPropTypes,\n    content: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.array])\n  };\n\n  render() {\n    const { content, style, ...props } = this.props;\n\n    return (\n      <div\n        style={{ ...styles.content, ...style }}\n        {...props}\n      >\n        {content}\n      </div>\n    );\n  }\n}\n\nexport default Content;\n"
  },
  {
    "path": "src/NavPane/windows/Item/Title/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Radium, { keyframes } from 'radium';\nimport styles from '../../style/windows10';\n\nvar appear = keyframes({\n  '0%': {\n    opacity: 0\n  },\n  '29%': {\n    opacity: 0,\n    transform: 'translateY(9px)'\n  },\n  '30%': {\n    opacity: .35,\n    transform: 'translateY(9px)'\n  },\n  '100%': {\n    opacity: 1,\n    transform: 'translateY(0)'\n  }\n}, 'Title');\n\nvar fadeOut = keyframes({\n  '0%': {\n    opacity: 1\n  },\n  '100%': {\n    opacity: 0\n  }\n}, 'span');\n\n\nstyles.titleAnimation = {\n  animation: 'x 300ms forwards',\n  animationName: appear\n};\n\nstyles.fadeSpanStyle = {\n  position: 'absolute',\n  top: '0px',\n  left: '0px',\n  animation: 'x 100ms forwards',\n  animationName: fadeOut\n};\n\n@Radium\nclass Title extends Component {\n  static propTypes = {\n    theme: PropTypes.string,\n    title: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.array])\n  };\n\n  render() {\n    const { title, prevTitle } = this.props;\n\n    let componentStyle = { ...styles.title };\n    let fadeSpanStyle = { ...styles.title };\n    let titleStyle = {};\n\n    if (this.props.theme === 'dark') {\n      componentStyle = { ...componentStyle, ...styles.titleDark };\n      fadeSpanStyle = { ...fadeSpanStyle, ...styles.titleDark };\n    }\n\n    if (prevTitle && prevTitle !== title) {\n      fadeSpanStyle = { ...fadeSpanStyle, ...styles.fadeSpanStyle };\n      titleStyle = { ...titleStyle, opacity: 0, ...styles.titleAnimation }\n    }\n\n    let fadeSpan;\n    if (prevTitle) {\n      fadeSpan = (\n        <span style={fadeSpanStyle}>\n          {prevTitle}\n        </span>\n      );\n    }\n\n    return (\n      <div\n        style={componentStyle}\n      >\n        {fadeSpan}\n        <span style={titleStyle}>\n          {title}\n        </span>\n      </div>\n    );\n  }\n}\n\nexport default Title;\n"
  },
  {
    "path": "src/NavPane/windows/Item/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Padding, { paddingPropTypes } from '../../../style/padding';\nimport Margin, { marginPropTypes } from '../../../style/margin';\nimport Background, {\n  backgroundPropTypes\n} from '../../../style/background/windows';\nimport Alignment, { alignmentPropTypes } from '../../../style/alignment';\nimport Title from './Title';\nimport Content from './Content';\nimport styles from '../style/windows10';\nimport { StyleRoot } from 'radium';\nimport { ColorContext, colorPropTypes } from '../../../style/color/windows';\nimport { ThemeContext, themePropTypes } from '../../../style/theme/windows';\n\n@Padding()\n@Margin()\n@Background()\n@Alignment()\n@ColorContext()\n@ThemeContext()\nclass Item extends Component {\n  static propTypes = {\n    ...colorPropTypes,\n    ...themePropTypes,\n    ...paddingPropTypes,\n    ...marginPropTypes,\n    ...backgroundPropTypes,\n    ...alignmentPropTypes,\n    title: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.element,\n      PropTypes.array\n    ]),\n    icon: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.element,\n      PropTypes.array\n    ]),\n    push: PropTypes.bool,\n    onSelect: PropTypes.func,\n    selected: PropTypes.bool,\n    paneTheme: PropTypes.string\n  };\n\n  constructor() {\n    super();\n    this.state = {\n      prevTitle: null\n    };\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.props.title !== nextProps.title) {\n      this.setState({ prevTitle: this.props.title });\n    }\n  }\n\n  render() {\n    const { children, title, paneTheme, ...props } = this.props;\n\n    delete props.icon;\n    delete props.push;\n    delete props.onSelect;\n    delete props.selected;\n\n    return (\n      <div style={styles.navPaneItem}>\n        <div style={styles.contentWrapper}>\n          <StyleRoot>\n            <Title\n              key={title}\n              title={title}\n              theme={paneTheme}\n              prevTitle={this.state.prevTitle}\n            />\n          </StyleRoot>\n          <Content content={children} {...props} />\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default Item;\n"
  },
  {
    "path": "src/NavPane/windows/Pane/Button/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Radium, { getState } from 'radium';\nimport { transparentize } from '../../../../color';\nimport { ColorContext, colorContextTypes } from '../../../../style/color/windows';\nimport { ThemeContext, themeContextTypes } from '../../../../style/theme/windows';\n\nconst styles = {\n  svg: {\n    ':hover': {},\n    ':active': {}\n  }\n};\n\n@ColorContext()\n@ThemeContext()\n@Radium\nclass Button extends Component {\n  static propTypes = {\n    onClick: PropTypes.func\n  };\n\n  static contextTypes = {\n    ...colorContextTypes,\n    ...themeContextTypes\n  };\n\n  render() {\n    let fill = this.context.theme === 'dark' ? '#ffffff' : '#000000';\n\n    if (getState(this.state, null, ':active')) {\n      fill = transparentize(this.context.color, .1);\n    } else if (getState(this.state, null, ':hover')) {\n      fill = transparentize(this.context.color, .2);\n    }\n\n    return (\n      <svg\n        x=\"0px\" y=\"0px\" viewBox=\"0 0 20 12.5\"\n        onClick={this.props.onClick}\n        style={{ ...styles.svg, ...this.props.style }}\n      >\n        <path\n          fill={fill}\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M0,12.5h20V11H0V12.5z M0,7h20V5.5H0V7z M0,0v1.5h20V0H0z\"\n        />\n      </svg>\n    );\n  }\n}\n\nexport default Button;\n"
  },
  {
    "path": "src/NavPane/windows/Pane/Item/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styles from '../style/windows10';\nimport { transparentize } from '../../../../color';\nimport { ColorContext, colorContextTypes } from '../../../../style/color/windows';\nimport { ThemeContext, themeContextTypes } from '../../../../style/theme/windows';\nimport Radium from 'radium';\n\n@ColorContext()\n@ThemeContext()\n@Radium\nclass Item extends Component {\n  static propTypes = {\n    isPaneExpanded: PropTypes.bool.isRequired,\n    title: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.array]),\n    icon: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.array]),\n    push: PropTypes.bool,\n    onSelect: PropTypes.func,\n    selected: PropTypes.bool\n  };\n\n  static contextTypes = {\n    ...colorContextTypes,\n    ...themeContextTypes\n  };\n\n  render() {\n    const { title, icon, selected, onSelect, push, isPaneExpanded } = this.props;\n\n    let componentStyle = styles.anchor;\n    let spanStyle = styles.span;\n\n    if (this.context.theme === 'dark') {\n      componentStyle = { ...componentStyle, ...styles.anchorDark };\n      spanStyle = { ...spanStyle, ...styles.spanDark };\n    }\n\n    if (selected) {\n      componentStyle = {\n        ...componentStyle,\n        backgroundColor: transparentize(this.context.color, .4),\n        ':hover': {\n          ...componentStyle[':hover'],\n          backgroundColor: transparentize(this.context.color, .2)\n        },\n        ':active': {\n          ...componentStyle[':active'],\n          backgroundColor: transparentize(this.context.color, .1)\n        }\n      };\n    }\n\n    if (push) {\n      spanStyle[':hover'] = {\n        ...spanStyle[':hover'],\n        ...styles.pushTransformHover\n      };\n      spanStyle[':active'] = {\n        ...spanStyle[':active'],\n        ...styles.pushTransformActive\n      };\n    }\n\n    return (\n      <a\n        onClick={onSelect}\n        style={componentStyle}\n      >\n        <span\n          ref=\"span\"\n          style={spanStyle}\n        >\n          {icon ? <i style={styles.anchorIcon}>{icon}</i> : null}\n          {isPaneExpanded ? <span style={styles.anchorTitle}>{title}</span> : null}\n        </span>\n      </a>\n    );\n  }\n}\n\nexport default Item;\n"
  },
  {
    "path": "src/NavPane/windows/Pane/index.js",
    "content": "import React, { Component, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport Item from './Item';\nimport Button from './Button';\nimport styles from './style/windows10';\n\nclass Pane extends Component {\n  static Item = Item;\n\n  static propTypes = {\n    items: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.element,\n      PropTypes.array\n    ]),\n    canPaneToggle: PropTypes.bool,\n    onPaneToggle: PropTypes.func,\n    defaultIsPaneExpanded: PropTypes.bool,\n    paneCompactedLength: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]),\n    paneExpandedLength: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ])\n  };\n\n  static defaultProps = {\n    canPaneToggle: true,\n    defaultIsPaneExpanded: true,\n    paneCompactedLength: '48px',\n    paneExpandedLength: '200px'\n  };\n\n  constructor(props, ...args) {\n    super(props, ...args);\n    this.state = {\n      isPaneExpanded: props.defaultIsPaneExpanded\n    };\n  }\n\n  toggleOpen = () => {\n    if (this.props.onPaneToggle)\n      this.props.onPaneToggle(!this.state.isPaneExpanded);\n    this.setState({ isPaneExpanded: !this.state.isPaneExpanded });\n  };\n\n  render() {\n    const {\n      canPaneToggle,\n      paneCompactedLength,\n      paneExpandedLength\n    } = this.props;\n\n    const button = !canPaneToggle ? null : (\n      <Button style={styles.buttonStyle} onClick={this.toggleOpen} />\n    );\n\n    let componentStyle = { ...styles.pane };\n\n    if (canPaneToggle) {\n      if (this.state.isPaneExpanded) componentStyle.width = paneExpandedLength;\n      else componentStyle.width = paneCompactedLength;\n    } else {\n      componentStyle.width = paneExpandedLength;\n    }\n\n    return (\n      <div style={componentStyle}>\n        <div style={styles.padding} />\n        {button}\n        {this.renderItems()}\n      </div>\n    );\n  }\n\n  renderItems() {\n    return Children.map(this.props.items, (item, index) => (\n      <Item\n        key={index}\n        isPaneExpanded={this.state.isPaneExpanded}\n        title={item.props.title}\n        icon={item.props.icon}\n        push={item.props.push}\n        onSelect={item.props.onSelect}\n        selected={item.props.selected}\n      />\n    ));\n  }\n}\n\nexport default Pane;\n"
  },
  {
    "path": "src/NavPane/windows/Pane/style/windows10.js",
    "content": "export default {\n  pane: {\n    cursor: 'default',\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    display: 'flex',\n    position: 'relative',\n    flexGrow: '0',\n    flexShrink: '0',\n    flexDirection: 'column',\n    overflow: 'hidden'\n  },\n\n  padding: {\n    height: '48px'\n  },\n\n  buttonStyle: {\n    position: 'absolute',\n    padding: '8px 10px',\n    top: '7px',\n    left: '4px',\n    width: '20px',\n    height: '20px',\n    boxSizing: 'content-box'\n  },\n\n  anchor: {\n    display: 'flex',\n    alignItems: 'center',\n    height: '44px',\n\n    ':hover': {\n      backgroundColor: 'rgba(0, 0, 0, .1)',\n    },\n    ':active': {\n      backgroundColor: 'rgba(0, 0, 0, .2)',\n    }\n  },\n\n  anchorDark: {\n    ':hover': {\n      backgroundColor: 'rgba(255, 255, 255, .1)',\n    },\n    ':active': {\n      backgroundColor: 'rgba(255, 255, 255, .2)',\n    }\n  },\n\n  anchorTitle: {\n\n  },\n\n  anchorIcon: {\n    marginRight: '8px',\n    height: '44px',\n    display: 'flex',\n    alignItems: 'center'\n  },\n\n  span: {\n    display: 'flex',\n    alignItems: 'center',\n    color: '#000000',\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '15px',\n    letterSpacing: '0.4pt',\n    padding: '0 16px',\n    transition: 'transform .1s ease-in',\n    userSelect: 'none'\n  },\n\n  spanDark: {\n    color: '#ffffff',\n  },\n\n  pushTransformHover: {\n    transition: 'transform .1s ease-in'\n  },\n\n  pushTransformActive: {\n    transform: 'scale(0.97)',\n    transition: 'transform 0s ease-in'\n  }\n};\n"
  },
  {
    "path": "src/NavPane/windows/index.js",
    "content": "import React, { Component, Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport Pane from './Pane';\nimport Item from './Item';\nimport styles from './style/windows10';\nimport { ColorContext, colorPropTypes } from '../../style/color/windows';\nimport {\n  ThemeContext,\n  themePropTypes,\n  themeContextTypes\n} from '../../style/theme/windows';\n\nlet warnOnce = false;\nfunction applyChildenClasses() {\n  return function(ComposedComponent) {\n    const nextItem = Item;\n    ComposedComponent.prototype.Item = ComposedComponent.Item = function(\n      ...args\n    ) {\n      if (!warnOnce) {\n        warnOnce = true;\n        console.warn(\n          'React Desktop: Using NavPane.Item is deprecated, import NavPaneItem instead.'\n        );\n      }\n      return new nextItem(...args);\n    };\n    return ComposedComponent;\n  };\n}\n\n@applyChildenClasses()\n@ColorContext()\n@ThemeContext()\nclass NavPane extends Component {\n  static propTypes = {\n    ...colorPropTypes,\n    ...themePropTypes,\n    canPaneToggle: PropTypes.bool,\n    onPaneToggle: PropTypes.func,\n    defaultIsPaneExpanded: PropTypes.bool,\n    paneCompactedLength: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ]),\n    paneExpandedLength: PropTypes.oneOfType([\n      PropTypes.string,\n      PropTypes.number\n    ])\n  };\n\n  static contextTypes = {\n    ...themeContextTypes\n  };\n\n  render() {\n    return (\n      <div style={styles.navPane}>\n        <Pane\n          items={this.props.children}\n          canPaneToggle={this.props.canPaneToggle}\n          onPaneToggle={this.props.onPaneToggle}\n          defaultIsPaneExpanded={this.props.defaultIsPaneExpanded}\n          paneCompactedLength={this.props.paneCompactedLength}\n          paneExpandedLength={this.props.paneExpandedLength}\n        />\n        {this.renderContent()}\n      </div>\n    );\n  }\n\n  renderContent() {\n    let content = null;\n    Children.map(this.props.children, child => {\n      if (child.props.selected) content = child;\n    });\n    return content\n      ? cloneElement(content, {\n        ...content.props,\n        paneTheme: this.context.theme\n      })\n      : null;\n  }\n}\n\nexport default NavPane;\n"
  },
  {
    "path": "src/NavPane/windows/style/windows10.js",
    "content": "export default {\n  navPane: {\n    display: 'flex',\n    flexWrap: 'nowrap',\n    position: 'relative',\n    flex: '1'\n  },\n\n  navPaneItem: {\n    position: 'relative',\n    flexGrow: '1',\n    flexShrink: '0',\n    display: 'flex'\n  },\n\n  contentWrapper: {\n    display: 'flex',\n    flex: '1',\n    flexDirection: 'column'\n  },\n\n  content: {\n    display: 'flex',\n    flex: '1',\n    flexDirection: 'column'\n  },\n\n  title: {\n    position: 'relative',\n    color: '#000000',\n    height: '48px',\n    display: 'flex',\n    alignItems: 'center',\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '15px',\n    textTransform: 'uppercase',\n    padding: '0 24px',\n    overflow: 'hidden',\n    cursor: 'default',\n    userSelect: 'none'\n  },\n\n  titleDark: {\n    color: '#ffffff'\n  }\n};\n"
  },
  {
    "path": "src/Pin/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport TextInput from '../../TextInput/macOs';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Margin, { marginPropTypes, removeMarginProps } from '../../style/margin';\n\n@Hidden()\n@Margin()\nclass Pin extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...marginPropTypes,\n    reveal: PropTypes.bool,\n    length: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n      .isRequired,\n    onChange: PropTypes.func\n  };\n\n  constructor(props, ...args) {\n    super(props, ...args);\n    const lenght = parseInt(props.length);\n    this.state = {\n      current: 0,\n      pin: new Array(lenght)\n    };\n  }\n\n  componentDidMount() {\n    this.handleBlur();\n  }\n\n  handleBlur = (e, index) => {\n    if (e && index === this.state.current) {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n    if (this.state.current !== null) {\n      this.selectInput(this.state.current);\n    }\n  };\n\n  selectInput = index => {\n    if (this.refs[index]) {\n      const el = ReactDOM.findDOMNode(this.refs[index]).getElementsByTagName(\n        'INPUT'\n      )[0];\n      el.focus();\n    }\n  };\n\n  setValue = (index, value) => {\n    if (this.refs[index]) {\n      const el = ReactDOM.findDOMNode(this.refs[index]).getElementsByTagName(\n        'INPUT'\n      )[0];\n      // Use execCommand instead of direct assignment to keep the browser's undo stack\n      // This currently only handles delete, add conditions if use for other purposes\n      el.focus();\n      document.execCommand('delete', false);\n      const pin = [\n        ...this.state.pin.slice(0, index),\n        value,\n        ...this.state.pin.slice(index + 1)\n      ];\n      this.setState({ pin });\n      if (this.props.onChange) this.props.onChange(pin.join(''));\n    }\n  };\n\n  handleChange = (e, index) => {\n    if (e.target.value || this.state.current === index + 1) {\n      // In case of undoing insert, switch back to previous pin\n      let nextIndex = (index === this.props.length - 1 || !e.target.value) ? index : index + 1;\n      const pin = [\n        ...this.state.pin.slice(0, index),\n        e.target.value,\n        ...this.state.pin.slice(index + 1)\n      ];\n      this.setState({ current: nextIndex, pin });\n      setTimeout(() => this.selectInput(nextIndex));\n      if (this.props.onChange) this.props.onChange(pin.join(''));\n    }\n  };\n\n  handleKeyDown = e => {\n    if (e.keyCode === 8) {\n      if (e.target.value) {\n        this.setValue(this.state.current, '');\n      } else {\n        const nextIndex = this.state.current - 1;\n        this.setState({ current: nextIndex });\n        setTimeout(() => {\n          this.selectInput(nextIndex);\n          this.setValue(nextIndex, '');\n        });\n      }\n    }\n  };\n\n  handleKeyPress = e => {\n    if (e.charCode >= 48 && e.charCode <= 57) {\n      return true;\n    }\n    e.preventDefault();\n    e.stopPropagation();\n  };\n\n  render() {\n    const { length, reveal, style, ...props } = this.props;\n    delete props.onChange;\n\n    const children = [];\n    for (let i = 0, len = parseInt(length); i < len; ++i) {\n      children.push(\n        <TextInput\n          ref={i}\n          key={i}\n          rounded\n          type={reveal ? 'tel' : 'password'}\n          width=\"36px\"\n          maxLength=\"1\"\n          marginRight=\"8px\"\n          onChange={e => this.handleChange(e, i)}\n          onBlur={e => this.handleBlur(e, i)}\n          onKeyDown={this.handleKeyDown}\n          onKeyPress={this.handleKeyPress}\n          style={{\n            fontSize: '32px',\n            lineHeight: '32px',\n            textAlign: 'center',\n            paddingTop: '3px',\n            paddingBottom: '4px',\n            color: '#464646'\n          }}\n          {...removeMarginProps(props)}\n        />\n      );\n    }\n\n    return <div style={{ display: 'flex', ...style }}>{children}</div>;\n  }\n}\n\nexport default Pin;\n"
  },
  {
    "path": "src/Pin/macOs/style/10.11.js",
    "content": ""
  },
  {
    "path": "src/ProgressCircle/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { hiddenPropTypes } from '../../style/hidden';\nimport styles from './styles/10.11';\nimport { startAnimation, stopAnimation } from './progressCircleAnimation';\n\nclass ProgressCircle extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    absolute: PropTypes.bool,\n    color: PropTypes.string,\n    size: PropTypes.number\n  };\n\n  componentDidMount() {\n    let elements = [];\n    for (let prop in this.refs) {\n      if (this.refs.hasOwnProperty(prop) && prop.match(/\\d/g)) elements.push(this.refs[prop]);\n    }\n\n    this.animation = startAnimation(...elements);\n  }\n\n  componentWillUnmount() {\n    stopAnimation(this.animation);\n  }\n\n  render() {\n    const { size, color, style, absolute, hidden, ...props } = this.props;\n\n    let containerStyle = { ...styles.container };\n    let componentStyle = {\n      ...styles.progress,\n      ...style,\n      visibility: !hidden ? 'visible' : 'hidden',\n      display: !hidden ? 'block' : 'none'\n    };\n\n    if (absolute) {\n      componentStyle = { ...componentStyle, ...styles.absolute };\n    }\n\n    let componentColor = color;\n    if (!componentColor) {\n      componentColor = '#000000';\n    }\n\n    if (size) {\n      componentStyle = {\n        ...componentStyle,\n        width: size + 'px',\n        height: size + 'px'\n      };\n      containerStyle = {\n        ...containerStyle,\n        height: size + 'px'\n      };\n    }\n\n    const svg = (\n      <svg\n        ref=\"element\"\n        x=\"0px\"\n        y=\"0px\"\n        viewBox=\"0 0 32.3 32.3\"\n        style={componentStyle}\n        {...props}\n      >\n        <path\n          ref=\"0\"\n          fill={componentColor}\n          d=\"M16.1,9.4L16.1,9.4c-0.9,0-1.6-0.7-1.6-1.6V1.6c0-0.9,0.7-1.6,1.6-1.6h0c0.9,0,1.6,0.7,1.6,1.6v6.3\n\tC17.7,8.7,17,9.4,16.1,9.4z\"\n        />\n        <path\n          ref=\"1\"\n          fill={componentColor}\n          d=\"M19.4,10.3L19.4,10.3c-0.8-0.4-1-1.4-0.6-2.2L22,2.7c0.4-0.8,1.4-1,2.2-0.6l0,0c0.8,0.4,1,1.4,0.6,2.2\n\tl-3.1,5.4C21.2,10.5,20.2,10.7,19.4,10.3z\"\n        />\n        <path\n          ref=\"2\"\n          fill={componentColor}\n          d=\"M21.9,12.7L21.9,12.7c-0.4-0.8-0.2-1.7,0.6-2.2l5.4-3.1C28.7,7,29.6,7.3,30.1,8l0,0c0.4,0.8,0.2,1.7-0.6,2.2\n\tl-5.4,3.1C23.3,13.7,22.3,13.5,21.9,12.7z\"\n        />\n        <path\n          ref=\"3\"\n          fill={componentColor}\n          d=\"M22.8,16.1L22.8,16.1c0-0.9,0.7-1.6,1.6-1.6h6.3c0.9,0,1.6,0.7,1.6,1.6v0c0,0.9-0.7,1.6-1.6,1.6h-6.3\n\tC23.5,17.7,22.8,17,22.8,16.1z\"\n        />\n        <path\n          ref=\"4\"\n          fill={componentColor}\n          d=\"M22,19.4L22,19.4c0.4-0.8,1.4-1,2.2-0.6l5.4,3.1c0.8,0.4,1,1.4,0.6,2.2l0,0c-0.4,0.8-1.4,1-2.2,0.6l-5.4-3.1\n\tC21.8,21.2,21.5,20.2,22,19.4z\"\n        />\n        <path\n          ref=\"5\"\n          fill={componentColor}\n          d=\"M19.5,21.9L19.5,21.9c0.8-0.4,1.7-0.2,2.2,0.6l3.1,5.4c0.4,0.8,0.2,1.7-0.6,2.2l0,0\n\tc-0.8,0.4-1.7,0.2-2.2-0.6l-3.1-5.4C18.5,23.3,18.8,22.3,19.5,21.9z\"\n        />\n        <path\n          ref=\"6\"\n          fill={componentColor}\n          d=\"M16.2,22.8L16.2,22.8c0.9,0,1.6,0.7,1.6,1.6v6.3c0,0.9-0.7,1.6-1.6,1.6h0c-0.9,0-1.6-0.7-1.6-1.6v-6.3\n\tC14.6,23.5,15.3,22.8,16.2,22.8z\"\n        />\n        <path\n          ref=\"7\"\n          fill={componentColor}\n          d=\"M12.8,22L12.8,22c0.8,0.4,1,1.4,0.6,2.2l-3.1,5.4c-0.4,0.8-1.4,1-2.2,0.6l0,0c-0.8-0.4-1-1.4-0.6-2.2\n\tl3.1-5.4C11.1,21.8,12.1,21.5,12.8,22z\"\n        />\n        <path\n          ref=\"8\"\n          fill={componentColor}\n          d=\"M10.3,19.5L10.3,19.5c0.4,0.8,0.2,1.7-0.6,2.2l-5.4,3.1c-0.8,0.4-1.7,0.2-2.2-0.6l0,0\n\tc-0.4-0.8-0.2-1.7,0.6-2.2l5.4-3.1C8.9,18.5,9.9,18.8,10.3,19.5z\"\n        />\n        <path\n          ref=\"9\"\n          fill={componentColor}\n          d=\"M9.4,16.2L9.4,16.2c0,0.9-0.7,1.6-1.6,1.6H1.6C0.7,17.8,0,17,0,16.2v0c0-0.9,0.7-1.6,1.6-1.6h6.3\n\tC8.7,14.6,9.4,15.3,9.4,16.2z\"\n        />\n        <path\n          ref=\"10\"\n          fill={componentColor}\n          d=\"M10.3,12.8L10.3,12.8c-0.4,0.8-1.4,1-2.2,0.6l-5.4-3.1C2,9.8,1.7,8.9,2.1,8.1l0,0c0.4-0.8,1.4-1,2.2-0.6\n\tl5.4,3.1C10.5,11.1,10.7,12.1,10.3,12.8z\"\n        />\n        <path\n          ref=\"11\"\n          fill={componentColor}\n          d=\"M12.7,10.3L12.7,10.3c-0.8,0.4-1.7,0.2-2.2-0.6L7.4,4.3C7,3.6,7.3,2.6,8,2.2l0,0C8.8,1.7,9.8,2,10.2,2.8\n\tl3.1,5.4C13.7,8.9,13.5,9.9,12.7,10.3z\"\n        />\n      </svg>\n    );\n\n    let content = svg;\n    if (absolute) {\n      content = (\n        <div style={containerStyle}>\n          {svg}\n        </div>\n      );\n    }\n\n    return content;\n  }\n}\n\nexport default ProgressCircle;\n"
  },
  {
    "path": "src/ProgressCircle/macOs/progressCircleAnimation.js",
    "content": "let ids = [];\nlet animations = {};\n\nconst framerate = 60;\nconst duration = 1900;\n\nfunction animate(elements) {\n  this.currentStep = 0;\n  this.steps = duration / framerate;\n  this.increment = 1 / this.steps;\n  animateStep.apply(this, [elements]);\n  animations[this.id] = setInterval(() => animateStep.apply(this, [elements]), 1000 / framerate);\n}\n\nfunction animateStep(elements) {\n  this.currentStep++;\n  if (this.currentStep > this.steps) {\n    this.currentStep = 1;\n  }\n\n  for (let i = 0, len = 12; i < len; ++i) {\n    elements[11-i].style.opacity = this.increment * findStep.apply(this, [i]);\n  }\n}\n\nfunction findStep(index) {\n  let step = this.currentStep + (this.steps / 12 * index);\n  if (step > this.steps) {\n    step = -this.steps + step;\n  }\n  return this.steps - step;\n}\n\nexport function startAnimation(...elements) {\n  let id = 0;\n  if (ids.length) id = ids[ids.length - 1] + 1;\n  ids.push(id);\n  animate.apply({ id }, [elements]);\n  return id;\n}\n\nexport function stopAnimation(animation) {\n  window.clearInterval(animations[animation]);\n}\n"
  },
  {
    "path": "src/ProgressCircle/macOs/styles/10.11.js",
    "content": "export default {\n  progress: {\n    width: '16px',\n    height: '16px'\n  },\n\n  container: {\n    position: 'relative',\n    height: '16px'\n  },\n\n  absolute: {\n    position: 'absolute',\n    top: 0,\n    left: 0\n  }\n};\n"
  },
  {
    "path": "src/ProgressCircle/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { hiddenPropTypes } from '../../style/hidden';\nimport { ColorContext, colorPropTypes, colorContextTypes } from '../../style/color/windows';\nimport { startAnimation, stopAnimation } from './progressCircleAnimation';\nimport styles from './styles/windows10';\n\n@ColorContext()\nclass ProgressCircle extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...colorPropTypes,\n    absolute: PropTypes.bool,\n    size: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n  };\n\n  static contextTypes = {\n    ...colorContextTypes\n  };\n\n  componentDidMount() {\n    this.animation = startAnimation(\n      this.refs[0],\n      this.refs[1],\n      this.refs[2],\n      this.refs[3],\n      this.refs[4],\n      this.refs[5]\n    );\n  }\n\n  componentWillUnmount() {\n    stopAnimation(this.animation);\n  }\n\n  render() {\n    const { size, style, absolute, hidden, ...props } = this.props;\n\n    let containerStyle = { ...styles.container };\n    let componentStyle = {\n      ...styles.progress,\n      ...style,\n      visibility: !hidden ? 'visible' : 'hidden',\n      display: !hidden ? 'block' : 'none'\n    };\n\n    if (absolute) {\n      componentStyle = { ...componentStyle, ...styles.absolute };\n    }\n\n    let componentColor = this.context.color;\n    if (size) {\n      componentStyle = {\n        ...componentStyle,\n        width: size + 'px',\n        height: size + 'px'\n      };\n      containerStyle = {\n        ...containerStyle,\n        height: size + 'px'\n      };\n    }\n\n    const svg = (\n      <svg\n        id=\"field\"\n        ref=\"element\"\n        x=\"0px\"\n        y=\"0px\"\n        viewBox=\"0 0 150 150\"\n        style={componentStyle}\n        {...props}\n      >\n        <circle ref=\"0\" fill={componentColor} fillOpacity=\"0\" cx=\"75\" cy=\"75\" r=\"7.3\"/>\n        <circle ref=\"1\" fill={componentColor} fillOpacity=\"0\" cx=\"75\" cy=\"75\" r=\"7.3\"/>\n        <circle ref=\"2\" fill={componentColor} fillOpacity=\"0\" cx=\"75\" cy=\"75\" r=\"7.3\"/>\n        <circle ref=\"3\" fill={componentColor} fillOpacity=\"0\" cx=\"75\" cy=\"75\" r=\"7.3\"/>\n        <circle ref=\"4\" fill={componentColor} fillOpacity=\"0\" cx=\"75\" cy=\"75\" r=\"7.3\"/>\n        <circle ref=\"5\" fill={componentColor} fillOpacity=\"0\" cx=\"75\" cy=\"75\" r=\"7.3\"/>\n      </svg>\n    );\n\n    let content = svg;\n    if (absolute) {\n      content = (\n        <div style={containerStyle}>\n          {svg}\n        </div>\n      );\n    }\n\n    return content;\n  }\n}\n\nexport default ProgressCircle;\n"
  },
  {
    "path": "src/ProgressCircle/windows/progressCircleAnimation.js",
    "content": "import BezierEasing from '../../animation/bezierEasing';\n\nlet requestAnimationFrame;\nif (typeof window !== 'undefined') {\n  requestAnimationFrame = window.requestAnimationFrame ||\n    window.mozRequestAnimationFrame ||\n    window.webkitRequestAnimationFrame ||\n    window.msRequestAnimationFrame;\n}\n\nconst totalIterations = 95;\nconst circlesInterval = 14;\nconst restartInterval = 250;\nconst stopRotationAt = totalIterations * 2 / 1.02;\nconst easing = BezierEasing(0, 0.47, 0.9, .25);\nconst bounding = 68;\n\nlet ids = [];\nlet animations = {};\n\nfunction rotateCircle(circles) {\n  let lastFrame = false;\n  for (var i = 0, len = circles.length; i < len; ++i) {\n    if (this.iteration >= circlesInterval * i) {\n      let iteration = this.iteration - circlesInterval * i;\n      const revolution = Math.floor(iteration / totalIterations);\n      iteration = iteration - (revolution * totalIterations);\n      if (iteration < 0) {\n        iteration = totalIterations - iteration;\n      } else if (iteration > totalIterations) {\n        iteration = iteration - totalIterations;\n      }\n      if (iteration + (revolution * totalIterations) > stopRotationAt) {\n        circles[i].setAttributeNS('', 'fill-opacity', '0');\n        if (i === circles.length-1) {\n          lastFrame = true;\n        }\n      } else {\n        const value = easing.get(1 / totalIterations * iteration) * 2 * Math.PI * -1;\n        circles[i].setAttributeNS('', 'fill-opacity', '1');\n        circles[i].setAttributeNS('', 'cx', 75 + (bounding * Math.sin(value)) + '');\n        circles[i].setAttributeNS('', 'cy', 75 + (bounding * Math.cos(value)) + '');\n      }\n    }\n  }\n\n  this.iteration++;\n  if (!lastFrame) {\n    animations[this.id] = ['animationFrame', requestAnimationFrame(rotateCircle.bind(this, circles))];\n  } else {\n    animations[this.id] = ['timeout', window.setTimeout(startAnimation.bind(null, ...circles), restartInterval)];\n  }\n}\n\nexport function startAnimation(...elements) {\n  let id = 0;\n  if (ids.length) id = ids[ids.length - 1] + 1;\n  ids.push(id);\n  if (requestAnimationFrame) {\n    rotateCircle.apply({ iteration: 0, currentIteration: 0, id }, [elements]);\n  }\n  return id;\n}\n\nexport function stopAnimation(animation) {\n  if (animations[animation][0] === 'timeout') {\n    window.clearTimeout(animations[animation][1]);\n  } else {\n    window.cancelAnimationFrame(animations[animation][1]);\n  }\n}\n"
  },
  {
    "path": "src/ProgressCircle/windows/styles/windows10.js",
    "content": "export default {\n  progress: {\n    width: '20px',\n    height: '20px',\n    position: 'relative'\n  },\n\n  container: {\n    position: 'relative',\n    height: '20px'\n  },\n\n  absolute: {\n    position: 'absolute',\n    top: 0,\n    left: 0\n  }\n};\n"
  },
  {
    "path": "src/Radio/macOs/Circle.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Radium from 'radium';\nimport styles from './styles/10.11';\n\n@Radium\nclass Circle extends Component {\n  static propTypes = {\n    show: PropTypes.bool,\n    color: PropTypes.string,\n    shadowColor: PropTypes.string\n  };\n\n  static defaultProps = {\n    color: '#FFFFFF'\n  };\n\n  render() {\n    const { color, shadowColor } = this.props;\n    let style = { ...styles.checkmark };\n    style.opacity = '0';\n    style.transform = 'scale(2)';\n    style.transition = 'opacity 0s, transform 0.2s';\n\n    if (this.props.show) {\n      style.opacity = '1';\n      style.transform = 'scale(1)';\n    }\n\n    return (\n      <div style={style}>\n        <svg viewBox=\"0 0 285 285\" style={styles.svg}>\n          <circle fill={color} cx=\"142.5\" cy=\"142.5\" r=\"142.5\"/>\n        </svg>\n        <svg viewBox=\"0 0 285 285\" style={styles.svgShadow}>\n          <circle fill={shadowColor} cx=\"142.5\" cy=\"142.5\" r=\"142.5\"/>\n        </svg>\n      </div>\n    );\n  }\n}\n\nexport default Circle;\n"
  },
  {
    "path": "src/Radio/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Radium, { getState } from 'radium';\nimport styles from './styles/10.11';\nimport Text from '../../Text/macOs';\nimport Circle from './Circle';\nimport ValueRef from '../../ValueRef';\nimport WindowFocus from '../../windowFocus';\n\n@ValueRef()\n@WindowFocus()\n@Hidden()\n@Radium\nclass Radio extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    label: PropTypes.string,\n    onChange: PropTypes.func\n  };\n\n  constructor(props) {\n    super();\n    this.state = {\n      checked: !!props.defaultChecked === true,\n      transition: true\n    };\n  }\n\n  componentDidMount() {\n    document.addEventListener('change', this.onSiblingChange);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('change', this.onSiblingChange);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (nextProps.isWindowFocused !== this.props.isWindowFocused) {\n      this.setState({ transition: false });\n    }\n  }\n\n  componentDidUpdate() {\n    if (!this.state.transition) {\n      setTimeout(() => this.setState({ transition: true }), 0);\n    }\n  }\n\n  onSiblingChange = () => {\n    if (this.refs.element.checked !== this.state.checked) {\n      this.setState({ checked: this.refs.element.checked });\n    }\n  };\n\n  handleChange = event => {\n    this.setState({ checked: event.target.checked });\n    if (this.props.onChange) {\n      this.props.onChange(event);\n    }\n  };\n\n  render() {\n    let { style, label, isWindowFocused, ...props } = this.props;\n    const { transition } = this.state;\n    let componentStyle = { ...styles.radio, ...style };\n    let labelStyle = styles.label;\n    let circleColor = '#FFFFFF';\n    let shadowColor = '#0050a5';\n\n    if (this.state.checked) {\n      if (isWindowFocused) {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['radio:checked']\n        };\n        if (!transition) componentStyle.transition = 'none';\n      } else {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['radio:checked:unfocused']\n        };\n        circleColor = '#404040';\n        shadowColor = '#FFFFFF';\n      }\n    }\n\n    if (getState(this.state, null, ':active')) {\n      if (this.state.checked) {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['radio:checked:active']\n        };\n        shadowColor = '#001d99';\n      } else {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['radio:active']\n        };\n      }\n    }\n\n    return (\n      <div style={styles.container}>\n        <label style={labelStyle}>\n          <div style={styles.inputWrapper}>\n            <input\n              ref=\"element\"\n              type=\"radio\"\n              {...props}\n              style={componentStyle}\n              onChange={this.handleChange}\n            />\n            <Circle\n              show={this.state.checked}\n              color={circleColor}\n              shadowColor={shadowColor}\n            />\n          </div>\n          <Text style={{ display: 'inline' }}>{label}</Text>\n        </label>\n      </div>\n    );\n  }\n}\n\nexport default Radio;\n"
  },
  {
    "path": "src/Radio/macOs/styles/10.11.js",
    "content": "export default {\n  container: {\n    display: 'flex'\n  },\n\n  label: {\n    display: 'flex',\n    height: '20px',\n    position: 'relative',\n\n    ':hover': {},\n    ':active': {}\n  },\n\n  inputWrapper: {\n    position: 'relative',\n    marginRight: '3px',\n    paddingTop: '2px'\n  },\n\n  radio: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppearance: 'none',\n    appearance: 'none',\n    borderWidth: '1px',\n    borderStyle: 'solid',\n    borderColor: '#b8b8b8',\n    borderRadius: '50%',\n    backgroundColor: '#ffffff',\n    padding: '7px',\n    margin: '0px',\n    boxShadow: 'inset 0 1px 0 0 rgba(224, 224, 224, .4)',\n    transition: 'all 0.4s',\n\n    ':focus': {\n      outline: 'none'\n    }\n  },\n\n  'radio:active': {\n    borderColor: '#a4a4a4',\n    backgroundColor: '#f0f0f0',\n    boxShadow: 'inset 0 0 0 1px rgba(117, 117, 117, .35)',\n    transition: 'all 0.4s'\n  },\n\n  'radio:checked': {\n    backgroundColor: '#3b99fc',\n    boxShadow: 'none',\n    borderColor: '#2c91fc',\n    transition: 'all 0s'\n  },\n\n  'radio:checked:unfocused': {\n    backgroundColor: '#FFFFFF',\n    boxShadow: 'none',\n    borderColor: '#b8b8b8',\n    transition: 'none'\n  },\n\n  'radio:checked:active': {\n    backgroundColor: '#0080f6',\n    borderColor: '#006adc',\n    boxShadow: 'inset 0 0 0 1px rgba(19, 68, 119, .22)',\n    transition: 'all 0.4s'\n  },\n\n  checkmark: {\n    position: 'absolute',\n    top: '7px',\n    left: '5px',\n    width: '6px',\n    height: '6px'\n  },\n\n  svg: {\n    zIndex: '2',\n    position: 'absolute',\n    top: '0px',\n    left: '0px',\n    height: '6px'\n  },\n\n  svgShadow: {\n    zIndex: '1',\n    position: 'absolute',\n    top: '1.5px',\n    left: '0px',\n    opacity: '.37',\n    height: '6px',\n    filter: 'blur(.5px)'\n  }\n};\n"
  },
  {
    "path": "src/Radio/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Radium, { getState } from 'radium';\nimport styles from './styles/windows';\nimport Text from '../../Text/windows';\nimport {\n  ThemeContext,\n  themePropTypes,\n  themeContextTypes\n} from '../../style/theme/windows';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport {\n  ColorContext,\n  colorPropTypes,\n  colorContextTypes\n} from '../../style/color/windows';\nimport ValueRef from '../../ValueRef';\n\n@ValueRef()\n@Hidden()\n@ColorContext()\n@ThemeContext()\n@Radium\nclass Radio extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...colorPropTypes,\n    ...themePropTypes,\n    label: PropTypes.string,\n    onChange: PropTypes.func\n  };\n\n  static contextTypes = {\n    ...themeContextTypes,\n    ...colorContextTypes\n  };\n\n  constructor(props) {\n    super();\n    this.state = {\n      checked: !!props.defaultChecked === true\n    };\n  }\n\n  componentDidMount() {\n    document.addEventListener('change', this.onSiblingChange);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('change', this.onSiblingChange);\n  }\n\n  onSiblingChange = () => {\n    if (this.refs.element.checked !== this.state.checked) {\n      this.setState({ checked: this.refs.element.checked });\n    }\n  };\n\n  handleChange = event => {\n    this.setState({ checked: event.target.checked });\n    if (this.props.onChange) {\n      this.props.onChange(event);\n    }\n  };\n\n  render() {\n    let { style, label, color, ...props } = this.props;\n    let componentStyle = {\n      ...styles.radio,\n      ...(this.context.theme === 'dark' ? styles['radioDark'] : {})\n    };\n    let labelStyle = styles.label;\n    let circleStyle = {\n      ...styles.circle,\n      ...(this.context.theme === 'dark' ? styles['circleDark'] : {})\n    };\n\n    if (this.state.checked) {\n      componentStyle = {\n        ...componentStyle,\n        borderColor: color || this.context.color\n      };\n    }\n\n    if (getState(this.state, null, ':active')) {\n      if (this.state.checked) {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['radio:checked:active'],\n          ...(this.context.theme === 'dark'\n            ? styles['radioDark:checked:active']\n            : {})\n        };\n        circleStyle = {\n          ...circleStyle,\n          ...styles['circle:active'],\n          ...(this.context.theme === 'dark' ? styles['circleDark:active'] : {})\n        };\n      } else {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['radio:active'],\n          ...(this.context.theme === 'dark' ? styles['radioDark:active'] : {})\n        };\n      }\n    } else if (getState(this.state, null, ':hover')) {\n      if (this.state.checked) {\n        circleStyle = {\n          ...circleStyle,\n          ...styles['circle:hover'],\n          ...(this.context.theme === 'dark' ? styles['circleDark:hover'] : {})\n        };\n      } else {\n        componentStyle = {\n          ...componentStyle,\n          ...styles['radio:hover'],\n          ...(this.context.theme === 'dark' ? styles['radioDark:hover'] : {})\n        };\n      }\n    }\n\n    componentStyle = { ...componentStyle, ...style };\n\n    return (\n      <div style={styles.container}>\n        <label style={labelStyle}>\n          <div style={styles.inputWrapper}>\n            <input\n              ref=\"element\"\n              type=\"radio\"\n              {...props}\n              style={componentStyle}\n              onChange={this.handleChange}\n            />\n            {this.state.checked ? <div style={circleStyle} /> : null}\n          </div>\n          <Text\n            style={{\n              ...styles.text,\n              ...(this.context.theme === 'dark' ? styles.textDark : {})\n            }}\n          >\n            {label}\n          </Text>\n        </label>\n      </div>\n    );\n  }\n}\n\nexport default Radio;\n"
  },
  {
    "path": "src/Radio/windows/styles/windows.js",
    "content": "export default {\n  container: {\n    display: 'flex',\n    marginBottom: '21px'\n  },\n\n  label: {\n    display: 'flex',\n    position: 'relative',\n    ':hover': {},\n    ':active': {}\n  },\n\n  text: {\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '15px',\n    color: '#000000',\n    display: 'inline'\n  },\n\n  textDark: {\n    color: '#ffffff'\n  },\n\n  inputWrapper: {\n    position: 'relative',\n    marginRight: '7px',\n    paddingTop: '2px'\n  },\n\n  radio: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppearance: 'none',\n    appearance: 'none',\n    borderWidth: '2px',\n    borderStyle: 'solid',\n    borderColor: '#333333',\n    borderRadius: '50%',\n    backgroundColor: 'transparent',\n    padding: '8px',\n    margin: '0px',\n\n    ':focus': {\n      outline: 'none'\n    }\n  },\n\n  'radio:hover': {\n    borderColor: '#000000'\n  },\n\n  'radio:active': {\n    borderColor: '#666666'\n  },\n\n  'radio:checked:active': {\n    borderColor: '#666666'\n  },\n\n  radioDark: {\n    borderColor: '#cccccc'\n  },\n\n  'radioDark:hover': {\n    borderColor: '#ffffff'\n  },\n\n  'radioDark:active': {\n    borderColor: '#999999'\n  },\n\n  'radioDark:checked:active': {\n    borderColor: '#999999'\n  },\n\n  circle: {\n    position: 'absolute',\n    top: '7px',\n    left: '5px',\n    width: '10px',\n    height: '10px',\n    borderRadius: '50%',\n    background: '#333333'\n  },\n\n  'circle:hover': {\n    background: '#000000'\n  },\n\n  'circle:active': {\n    background: '#666666'\n  },\n\n  circleDark: {\n    background: '#cccccc'\n  },\n\n  'circleDark:hover': {\n    background: '#ffffff'\n  },\n\n  'circleDark:active': {\n    background: '#999999'\n  }\n};\n"
  },
  {
    "path": "src/SearchField/macOs/cancelAnimation.js",
    "content": "let requestAnimationFrame;\nif (typeof window !== 'undefined') {\n  requestAnimationFrame = window.requestAnimationFrame ||\n    window.mozRequestAnimationFrame ||\n    window.webkitRequestAnimationFrame ||\n    window.msRequestAnimationFrame;\n}\n\nlet startTimestamp;\nconst duration = 150;\n\nfunction animateCancelIcon(timestamp, element) {\n  if (!startTimestamp) startTimestamp = timestamp;\n  let progress = (timestamp - startTimestamp) / duration;\n  if (progress > 1) progress = 1;\n\n  element.style.height = (14 * progress) + 'px';\n  element.style.width = (14 * progress) + 'px';\n  element.style.opacity = progress;\n\n  if (progress !== 1) {\n    requestAnimationFrame(timestamp => animateCancelIcon(timestamp, element));\n  }\n}\n\nexport default function(element) {\n  if (requestAnimationFrame) {\n    startTimestamp = null;\n    const icon = element.getElementsByTagName('svg')[0];\n    requestAnimationFrame(timestamp => animateCancelIcon(timestamp, icon));\n  }\n}\n"
  },
  {
    "path": "src/SearchField/macOs/icons.js",
    "content": "import React from 'react';\n\nexport const searchIcon1x = (\n  <svg x=\"0px\" y=\"0px\" width=\"12px\" height=\"12px\" viewBox=\"0 0 12 12\">\n    <path fill=\"none\" stroke=\"#686868\" strokeWidth=\"1.1\" strokeMiterlimit=\"10\" d=\"M4.5,0.5c2.3,0,3.9,1.1,4.3,4.1C8.5,7.4,7.6,8.3,4.5,8.7c-2.8-0.3-4-2-4-4.3C0.5,1.6,2.6,0.5,4.5,0.5z\"/>\n    <line fill=\"none\" stroke=\"#686868\" strokeWidth=\"1.1\" strokeMiterlimit=\"10\" x1=\"7.9\" y1=\"7.9\" x2=\"11.1\" y2=\"11.1\"/>\n  </svg>\n);\n\nexport const searchIcon2x = (\n  <svg x=\"0px\" y=\"0px\" width=\"12px\" height=\"12px\" viewBox=\"0 0 25 24\">\n    <path fill=\"none\" stroke=\"#686868\" strokeWidth=\"1.8\" strokeMiterlimit=\"10\" d=\"M1.7,10.1c0-4.6,3.7-8.4,8.3-8.4s8.4,3.7,8.4,8.3s-3.8,8.5-8.4,8.5S1.7,14.7,1.7,10.1z\"/>\n    <line fill=\"none\" stroke=\"#686868\" strokeWidth=\"1.8\" strokeMiterlimit=\"10\" x1=\"17\" y1=\"16\" x2=\"24.3\" y2=\"23.3\"/>\n  </svg>\n);\n\nexport const cancelIcon1x = (\n  <svg x=\"0px\" y=\"0px\" width=\"14px\" height=\"14px\" viewBox=\"0 0 14 14\">\n    <circle fill=\"#7B7B7B\" cx=\"7\" cy=\"7\" r=\"6.6\"/>\n    <line fill=\"none\" stroke=\"#FFFFFF\" strokeWidth=\"1.1\" strokeMiterlimit=\"10\" x1=\"4\" y1=\"4\" x2=\"10\" y2=\"10\"/>\n    <line fill=\"none\" stroke=\"#FFFFFF\" strokeWidth=\"1.1\" strokeMiterlimit=\"10\" x1=\"4\" y1=\"10\" x2=\"10\" y2=\"4\"/>\n  </svg>\n);\n\nexport const cancelIcon2x = (\n  <svg x=\"0px\" y=\"0px\" width=\"14px\" height=\"14px\" viewBox=\"0 0 28 28\">\n    <circle fill=\"#7B7B7B\" cx=\"14\" cy=\"14\" r=\"13.6\"/>\n    <line fill=\"none\" stroke=\"#FFFFFF\" strokeWidth=\"2.5\" strokeMiterlimit=\"10\" x1=\"8\" y1=\"8\" x2=\"19.7\" y2=\"19.6\"/>\n    <line fill=\"none\" stroke=\"#FFFFFF\" strokeWidth=\"2.5\" strokeMiterlimit=\"10\" x1=\"8\" y1=\"19.7\" x2=\"19.7\" y2=\"8\"/>\n  </svg>\n);\n"
  },
  {
    "path": "src/SearchField/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport TextInput from '../../TextInput/macOs';\nimport * as icon from './icons';\nimport styles from './styles/10.11';\nimport cancelAnimation from './cancelAnimation';\nimport ValueRef from '../../ValueRef';\n\n@ValueRef()\nclass SearchInput extends Component {\n  static propTypes = {\n    onCancel: PropTypes.func,\n    cancel: PropTypes.bool\n  };\n\n  static defaultProps = {\n    cancel: true\n  };\n\n  constructor() {\n    super();\n    this.state = {\n      showCancel: false\n    };\n  }\n\n  get searchIcon() {\n    return window && window.devicePixelRatio > 1.5\n      ? icon.searchIcon2x\n      : icon.searchIcon1x;\n  }\n\n  get cancelIcon() {\n    return window && window.devicePixelRatio > 1.5\n      ? icon.cancelIcon2x\n      : icon.cancelIcon1x;\n  }\n\n  handleCancelMouseDown = e => {\n    e.preventDefault();\n    e.stopPropagation();\n  };\n\n  handleCancelClick = () => {\n    const element = ReactDOM.findDOMNode(this.refs.input).getElementsByTagName(\n      'INPUT'\n    )[0];\n    element.setSelectionRange(0, element.value.length);\n    setTimeout(() => {\n      element.value = '';\n      let event = document.createEvent('HTMLEvents');\n      event.initEvent('change', false, true);\n      element.dispatchEvent(event);\n      event = new Event('input', { bubbles: true });\n      element.dispatchEvent(event);\n      element.blur();\n      if (this.props.onCancel) {\n        this.props.onCancel();\n      }\n    }, 200);\n  };\n\n  handleChange = e => {\n    if (this.props.cancel) {\n      if (e.target.value && !this.state.showCancel) {\n        this.setState({ showCancel: true });\n      } else if (!e.target.value && this.state.showCancel) {\n        this.setState({ showCancel: false });\n      }\n    }\n\n    if (typeof this.props.onChange === 'function') this.props.onChange(e);\n  };\n\n  handleKeyDown = e => {\n    if (e.keyCode === 27) {\n      const element = ReactDOM.findDOMNode(\n        this.refs.input\n      ).getElementsByTagName('INPUT')[0];\n      element.value = '';\n      let event = document.createEvent('HTMLEvents');\n      event.initEvent('change', false, true);\n      element.dispatchEvent(event);\n      event = new Event('input', { bubbles: true });\n      element.dispatchEvent(event);\n      setTimeout(() => element.blur(), 10);\n    }\n    if (typeof this.props.onKeyDown === 'function') this.props.onKeyDown(e);\n  };\n\n  componentDidUpdate(prevProps, prevState) {\n    if (!prevState.showCancel && this.state.showCancel) {\n      cancelAnimation(ReactDOM.findDOMNode(this.refs.cancel));\n    }\n  }\n\n  render() {\n    const { cancel, ...props } = this.props;\n    delete props.onCancel;\n\n    return (\n      <div style={styles.container}>\n        <TextInput\n          ref=\"input\"\n          icon={this.searchIcon}\n          rounded\n          centerPlaceholder\n          style={{\n            paddingRight: '19px'\n          }}\n          {...props}\n          onKeyDown={this.handleKeyDown}\n          onChange={this.handleChange}\n        />\n        {cancel && this.state.showCancel ? (\n          <a\n            ref=\"cancel\"\n            onMouseDown={this.handleCancelMouseDown}\n            onClick={this.handleCancelClick}\n            style={styles.cancel}\n          >\n            {this.cancelIcon}\n          </a>\n        ) : null}\n      </div>\n    );\n  }\n}\n\nexport default SearchInput;\n"
  },
  {
    "path": "src/SearchField/macOs/styles/10.11.js",
    "content": "export default {\n  container: {\n    position: 'relative'\n  },\n\n  cancel: {\n    position: 'absolute',\n    zIndex: 4,\n    top: '0px',\n    right: '0px',\n    width: '14px',\n    height: '100%',\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    marginRight: '4px',\n    marginLeft: '4px'\n  }\n};\n"
  },
  {
    "path": "src/SegmentedControl/macOs/Item/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass Item extends Component {\n  static propTypes = {\n    title: PropTypes.string,\n    selected: PropTypes.bool,\n    onSelect: PropTypes.func\n  };\n\n  render() {\n    let { children, ...props } = this.props;\n\n    delete props.title;\n    delete props.selected;\n    delete props.onSelect;\n\n    return (\n      <div\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default Item;\n"
  },
  {
    "path": "src/SegmentedControl/macOs/Tabs/Tab.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styles from '../style/10.11';\nimport WindowFocus from '../../../windowFocus';\nimport Radium from 'radium';\n\n@WindowFocus()\n@Radium\nclass Tab extends Component {\n  static propTypes = {\n    selected: PropTypes.bool,\n    prevSelected: PropTypes.bool,\n    afterSelected: PropTypes.bool,\n    firstChild: PropTypes.bool,\n    lastChild: PropTypes.bool,\n    onSelect: PropTypes.func\n  };\n\n  render() {\n    let { children, style, onSelect, afterSelected, prevSelected, lastChild, firstChild, isWindowFocused } = this.props;\n\n    let componentStyle = { ...styles.tab, ...style };\n\n    if (firstChild) componentStyle = { ...componentStyle, ...styles.firstChild };\n    if (lastChild) componentStyle = { ...componentStyle, ...styles.lastChild };\n\n    if (prevSelected) componentStyle = { ...componentStyle, ...styles.prevSelected };\n    if (afterSelected) componentStyle = { ...componentStyle, ...styles.afterSelected };\n\n    if (this.props.selected) {\n      componentStyle = { ...componentStyle, ...styles.selected };\n      if (!isWindowFocused) componentStyle = { ...componentStyle, ...styles.selectedUnfocused };\n      if (firstChild) componentStyle = { ...componentStyle, ...styles.firstChildSelected };\n      if (lastChild) componentStyle = { ...componentStyle, ...styles.lastChildSelected };\n    }\n\n    return (\n      <div\n        onClick={onSelect}\n        style={componentStyle}\n      >\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default Tab;\n"
  },
  {
    "path": "src/SegmentedControl/macOs/Tabs/index.js",
    "content": "import React, { Component } from 'react';\nimport Tab from './Tab';\nimport styles from '../style/10.11';\n\nclass Tabs extends Component {\n  select(item) {\n    this.refs[item.props.tabId].setState({ selected: true });\n  }\n\n  unselect(item) {\n    this.refs[item.props.tabId].setState({ selected: false });\n  }\n\n  render() {\n    const { style } = this.props;\n\n    let children;\n    // todo: use Children.map\n    if (!this.props.children) {\n      return null;\n    } else if (\n      Object.prototype.toString.call(this.props.children) !== '[object Array]'\n    ) {\n      children = [this.props.children];\n    } else {\n      children = [...this.props.children];\n    }\n\n    let tabs = [];\n    let hasSelected = false;\n    for (let i = 0, len = children.length; i < len; ++i) {\n      let props = children[i].props;\n      if (props.selected) hasSelected = true;\n      if (i === 0) props = { ...props, firstChild: true };\n      if (i === len - 1) props = { ...props, lastChild: true };\n\n      if (\n        children[i + 1] &&\n        children[i + 1].props &&\n        children[i + 1].props.selected\n      ) {\n        props = { ...props, nextSelected: true };\n      }\n\n      tabs = [...tabs, props];\n    }\n\n    if (!hasSelected && tabs[0]) tabs[0].selected = true;\n    let prevSelectedIndex = null;\n    let afterSelected = false;\n    for (let i = 0, len = tabs.length; i < len; ++i) {\n      if (afterSelected) {\n        tabs[i] = { ...tabs[i], afterSelected: true };\n        afterSelected = false;\n      }\n      if (tabs[i].selected) {\n        afterSelected = true;\n        prevSelectedIndex = i - 1;\n      }\n    }\n    if (prevSelectedIndex >= 0 && tabs[prevSelectedIndex])\n      tabs[prevSelectedIndex] = {\n        ...tabs[prevSelectedIndex],\n        prevSelected: true\n      };\n\n    return (\n      <div style={{ ...styles.tabs, ...style }}>{this.renderTabs(tabs)}</div>\n    );\n  }\n\n  renderTabs(tabs) {\n    const children = [];\n    for (let i = 0, len = tabs.length; i < len; ++i) {\n      children.push(\n        <Tab key={i} {...tabs[i]}>\n          {tabs[i].title}\n        </Tab>\n      );\n    }\n    return children;\n  }\n}\n\nexport default Tabs;\n"
  },
  {
    "path": "src/SegmentedControl/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Item from './Item';\nimport Tabs from './Tabs';\nimport styles from './style/10.11';\nimport Box from '../../Box/macOs';\n\nlet warnOnce = false;\nfunction applyItem() {\n  return function(ComposedComponent) {\n    const nextItem = Item;\n    ComposedComponent.prototype.Item = ComposedComponent.Item = function(\n      ...args\n    ) {\n      if (!warnOnce) {\n        warnOnce = true;\n        console.warn(\n          'React Desktop: Using SegmentedControl.Item is deprecated, import SegmentedControlItem instead.'\n        );\n      }\n      return new nextItem(...args);\n    };\n    return ComposedComponent;\n  };\n}\n\n@applyItem()\n@Dimension()\n@Margin()\n@Hidden()\nclass SegmentedControl extends Component {\n  static propTypes = {\n    ...dimensionPropTypes,\n    ...marginPropTypes,\n    ...hiddenPropTypes,\n    box: PropTypes.bool\n  };\n\n  select(item) {\n    this.refs.tabs.select(item);\n  }\n\n  unselect(item) {\n    this.refs.tabs.unselect(item);\n  }\n\n  render() {\n    let { children, box, ...props } = this.props;\n\n    let content;\n    if (box) {\n      content = (\n        <Box style={{ marginTop: '-11px', zIndex: 0 }}>{this.renderItem()}</Box>\n      );\n    } else {\n      content = <div>{this.renderItem()}</div>;\n    }\n\n    return (\n      <div style={styles.sergmentedControl} {...props}>\n        <Tabs style={{ position: 'relative', zIndex: 1 }}>{children}</Tabs>\n        {content}\n      </div>\n    );\n  }\n\n  renderItem() {\n    let child = null;\n    let children;\n    // todo: use Children.map\n    if (!this.props.children) {\n      return null;\n    } else if (\n      Object.prototype.toString.call(this.props.children) !== '[object Array]'\n    ) {\n      children = [this.props.children];\n    } else {\n      children = [...this.props.children];\n    }\n    for (let i = 0, len = children.length; i < len; ++i) {\n      if (children[i].props.selected) child = children[i];\n    }\n    return child;\n  }\n}\n\nexport default SegmentedControl;\n"
  },
  {
    "path": "src/SegmentedControl/macOs/style/10.11.js",
    "content": "export default {\n  sergmentedControl: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    flex: '1'\n  },\n\n  tabs: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    width: '100%',\n    display: 'flex',\n    justifyContent: 'center'\n  },\n\n  tab: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    background: '#ffffff',\n    borderTopWidth: '1px',\n    borderTopStyle: 'solid',\n    borderTopColor: '#c7c7c7',\n    borderBottomWidth: '1px',\n    borderBottomStyle: 'solid',\n    borderBottomColor: '#a6a6a6',\n    borderRightWidth: '1px',\n    borderRightStyle: 'solid',\n    borderRightColor: '#d8d8d8',\n    paddingTop: '1px',\n    paddingBottom: '2px',\n    paddingLeft: '12px',\n    paddingRight: '12px',\n    lineHeight: '16px',\n    fontFamily: '-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '13px',\n    boxShadow: '0 1px rgba(0, 0, 0, .039), 0 0 .5px rgba(0, 0, 0, .1)',\n\n    ':active': {\n      background: '#f0f0f0'\n    }\n  },\n\n  firstChild: {\n    borderLeftWidth: '1px',\n    borderLeftStyle: 'solid',\n    borderLeftColor: '#b8b8b8',\n    borderTopLeftRadius: '4px',\n    borderBottomLeftRadius: '4px'\n  },\n\n  lastChild: {\n    borderRightColor: '#b8b8b8',\n    borderTopRightRadius: '4px',\n    borderBottomRightRadius: '4px'\n  },\n\n  selected: {\n    background: '-webkit-linear-gradient(top, #5ab2f6 0%, #0082fa 100%)',\n    borderTopColor: '#30a0f5',\n    borderBottomColor: '#0060fa',\n    borderLeftColor: '#0080f7',\n    borderRightColor: '#0080f7',\n    color: 'white',\n    borderRightWidth: '0px',\n    paddingRight: '13px',\n    paddingLeft: '13px',\n\n    ':active': {\n      background: '-webkit-linear-gradient(top, #3397f9 0%, #0068df 100%)',\n      borderTopColor: '#007ff9',\n      borderBottomColor: '#0040d8',\n      borderLeftColor: '#0061e9',\n      borderRightColor: '#0061e9',\n      color: 'white'\n    }\n  },\n\n  firstChildSelected: {\n    paddingLeft: '12px'\n  },\n\n  lastChildSelected: {\n    borderRightWidth: '1px',\n    paddingRight: '12px'\n  },\n\n  prevSelected: {\n    borderRightWidth: '0px',\n    paddingRight: '12px'\n  },\n\n  afterSelected: {\n  },\n\n  selectedUnfocused: {\n    background: '#e5e5e5',\n    borderTopColor: '#c7c7c7',\n    borderBottomColor: '#a6a6a6',\n    borderLeftColor: '#b7b7b7',\n    borderRightColor: '#b7b7b7',\n    color: '#000000'\n  }\n};\n"
  },
  {
    "path": "src/Text/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Padding, { paddingPropTypes } from '../../style/padding';\nimport FontSize, { fontSizePropTypes } from '../../style/fontSize';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport TextAlign, { textAlignPropTypes } from '../../style/textAlign';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Alignment, { alignmentPropTypes } from '../../style/alignment';\nimport Background, { backgroundPropTypes } from '../../style/background/macOs';\nimport styles from './styles/10.11';\n\n@Background()\n@Alignment()\n@Margin()\n@Padding()\n@FontSize()\n@Dimension()\n@TextAlign()\n@Hidden()\nclass Text extends Component {\n  static propTypes = {\n    ...paddingPropTypes,\n    ...alignmentPropTypes,\n    ...backgroundPropTypes,\n    ...hiddenPropTypes,\n    ...textAlignPropTypes,\n    ...marginPropTypes,\n    ...fontSizePropTypes,\n    ...dimensionPropTypes,\n    color: PropTypes.string,\n    bold: PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string]),\n  };\n\n  static defaultProps = {\n    color: '#000000'\n  };\n\n  render() {\n    const { color, children, style, bold, ...props } = this.props;\n\n    let componentStyle = { ...styles.text, color };\n    if (bold && bold === true) {\n      componentStyle = { ...componentStyle, fontWeight: 'bold' };\n    } else if (bold) {\n      componentStyle = { ...componentStyle, fontWeight: bold };\n    }\n\n    return (\n      <span style={{ ...componentStyle, ...style }} {...props}>\n        {children}\n      </span>\n    );\n\n  }\n}\n\nexport default Text;\n"
  },
  {
    "path": "src/Text/macOs/styles/10.11.js",
    "content": "export default {\n  text: {\n    display: 'block',\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    fontFamily: '-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '13px'\n  }\n};\n"
  },
  {
    "path": "src/Text/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Padding, { paddingPropTypes } from '../../style/padding';\nimport Alignment, { alignmentPropTypes } from '../../style/alignment';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Background, { backgroundPropTypes } from '../../style/background/windows';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport { colorContextTypes } from '../../style/color/windows';\nimport { ThemeContext, themePropTypes, themeContextTypes } from '../../style/theme/windows';\nimport styles from './styles/windows10';\n\n@Margin()\n@Padding()\n@Alignment()\n@Hidden()\n@Background()\n@Dimension()\n@ThemeContext()\nclass Text extends Component {\n  static propTypes = {\n    ...themePropTypes,\n    ...marginPropTypes,\n    ...paddingPropTypes,\n    ...alignmentPropTypes,\n    ...hiddenPropTypes,\n    ...backgroundPropTypes,\n    ...dimensionPropTypes,\n    color: PropTypes.oneOfType([PropTypes.string, PropTypes.bool])\n  };\n\n  static contextTypes = {\n    ...colorContextTypes,\n    ...themeContextTypes\n  };\n\n  render() {\n    let { children, style, color, ...props } = this.props;\n    let componentStyle = { ...styles.text };\n\n    color = color === true ? this.context.color : color ? color : '#000000';\n    if (color) componentStyle = { ...componentStyle, color: color };\n    else if (this.context.theme === 'dark') componentStyle = { ...componentStyle, color: '#ffffff' };\n\n    if (props.horizontalAlignment) {\n      componentStyle.textAlign = props.horizontalAlignment;\n    }\n\n    componentStyle = { ...componentStyle, ...style };\n\n    return (\n      <div\n        style={componentStyle}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default Text;\n"
  },
  {
    "path": "src/Text/windows/styles/windows10.js",
    "content": "export default {\n  text: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    lineHeight: '25.96px',\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '14px',\n    display: 'flex'\n  }\n};\n"
  },
  {
    "path": "src/TextArea/macOs/centerPlaceholderAnimation.js",
    "content": "import BezierEasing from '../../animation/bezierEasing';\n\nlet requestAnimationFrame;\nif (typeof window !== 'undefined') {\n  requestAnimationFrame = window.requestAnimationFrame ||\n    window.mozRequestAnimationFrame ||\n    window.webkitRequestAnimationFrame ||\n    window.msRequestAnimationFrame;\n}\n\nlet startTimestamp;\nconst duration = 350;\nconst easing = BezierEasing(.3,.14,0,1);\n\nfunction moveLabel(timestamp, label, start, current, end, cb) {\n  if (start === end) return null;\n  if (!startTimestamp) startTimestamp = timestamp;\n  let progress = 1 - (timestamp - startTimestamp) / duration;\n  if (progress < 0) progress = 0;\n  progress = 1 - (easing.get(1 - progress));\n  if (start > end) {\n    current = progress * start;\n  } else {\n    current = (1 - progress) * end + start;\n  }\n\n  label.style.left = current + 'px';\n  if (start > end && current > end || start < end && current < end) {\n    requestAnimationFrame(timestamp => moveLabel(timestamp, label, start, current, end));\n  } else {\n    label.style.left = end + 'px';\n    if (cb) cb();\n  }\n}\n\nfunction animateLabel(label, start, end) {\n  return new Promise(resolve => {\n    if (requestAnimationFrame) {\n      requestAnimationFrame(timestamp => moveLabel(timestamp, label, start, start, end, resolve));\n    }\n  });\n}\n\nexport function pullLeft(input, label) {\n  startTimestamp = null;\n  const start = label.offsetLeft;\n  input.style.color = 'transparent';\n  label.style.position = 'absolute';\n  setTimeout(() => {\n    animateLabel(label, start, 2);\n    setTimeout(() => input.style.color = null, 300);\n  }, 10);\n}\n\nexport function pushCenter(input, label) {\n  startTimestamp = null;\n  label.style.position = 'relative';\n  const end = label.offsetLeft;\n  label.style.position = 'absolute';\n\n  setTimeout(() => {\n    animateLabel(label, 2, end)\n      .then(() => label.style.position = 'relative');\n  }, 10);\n}\n"
  },
  {
    "path": "src/TextArea/macOs/focusRingAnimation.js",
    "content": "import { keyframes } from 'radium';\n\nexport default function (borderRadius) {\n  return keyframes(\n    {\n      '0%': {\n        opacity: '0',\n        borderWidth: '34px',\n        top: '-34px',\n        left: '-34px'\n      },\n      '32%': {\n        opacity: '0',\n        borderRadius: '10px',\n        borderWidth: '30px',\n        top: '-30px',\n        left: '-30px'\n      },\n      '50%': {\n        opacity: '.2',\n        borderWidth: '15px',\n        top: '-15px',\n        left: '-15px'\n      },\n      '80%': {\n        opacity: '.4',\n        borderWidth: '9px',\n        top: '-9px',\n        left: '-9px'\n      },\n      '90%': {\n        opacity: '.9',\n        borderWidth: '6px',\n        top: '-6px',\n        left: '-6px'\n      },\n      '100%': {\n        opacity: '1',\n        ...(\n          borderRadius ? {\n            top: '-2px',\n            left: '-2px',\n            borderRadius: (parseInt(borderRadius) + 2) + 'px',\n            borderWidth: '2px',\n            boxShadow: '0 0 1px 0px rgba(125, 195, 242, .7)'\n          } : {\n            top: '-3px',\n            left: '-3px',\n            borderRadius: '4px',\n            borderWidth: '3px'\n          }\n        )\n      }\n    },\n    'text-input-focus'\n  );\n}\n"
  },
  {
    "path": "src/TextArea/macOs/index.js",
    "content": "import React, { Component, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport Radium, { StyleRoot } from 'radium';\nimport styles from './styles/10.11';\nimport Text from '../../Text/macOs';\nimport Label from '../../Label/macOs';\nimport Hidden, { hiddenPropTypes, removeHiddenProps } from '../../style/hidden';\nimport Margin, { marginPropTypes, removeMarginProps } from '../../style/margin';\nimport Dimension, {\n  dimensionPropTypes,\n  removeDimensionProps\n} from '../../style/dimension';\nimport FontSize, {\n  fontSizePropTypes,\n  removeFontSizeProps\n} from '../../style/fontSize';\nimport PlaceholderStyle from '../../placeholderStyle';\nimport mapStyles from '../../utils/mapStyles';\nimport { parseDimension } from '../../styleHelper';\nimport focusRingAnimation from './focusRingAnimation';\nimport { pullLeft, pushCenter } from './centerPlaceholderAnimation';\nimport ValueRef from '../../ValueRef';\n\n@ValueRef()\n@Hidden()\n@Dimension()\n@Radium\nclass TextAreaOSX extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...marginPropTypes,\n    ...dimensionPropTypes,\n    ...fontSizePropTypes,\n    label: PropTypes.string,\n    rounded: PropTypes.oneOfType([\n      PropTypes.bool,\n      PropTypes.number,\n      PropTypes.string\n    ]),\n    rows: PropTypes.number,\n    cols: PropTypes.number,\n    focusRing: PropTypes.bool,\n    onEnter: PropTypes.func,\n    centerPlaceholder: PropTypes.bool,\n    icon: PropTypes.oneOfType([PropTypes.element, PropTypes.array]),\n    placeholder: PropTypes.string\n  };\n\n  static defaultProps = {\n    focusRing: true\n  };\n\n  static mapStyles = {\n    container: ['margin', 'width', 'height', 'display']\n  };\n\n  static contextTypes = {\n    titlebarChild: PropTypes.bool\n  };\n\n  constructor() {\n    super();\n    this.state = {\n      isFocused: false,\n      showPlaceholder: true,\n      iconPadding: null\n    };\n  }\n\n  componentDidMount() {\n    const el = ReactDOM.findDOMNode(this).getElementsByTagName('TEXTAREA')[0];\n    el.addEventListener('blur', this.handleBlur);\n    el.addEventListener('focus', this.handleFocus);\n    el.addEventListener('keypress', this.handleKeypress);\n    el.addEventListener('keydown', this.handleKeydown);\n    el.addEventListener('keyup', this.handleChange);\n    el.addEventListener('change', this.handleChange);\n\n    if (this.props.icon) {\n      setTimeout(() =>\n        this.setState({\n          iconPadding: ReactDOM.findDOMNode(\n            this.refs.icon\n          ).getBoundingClientRect().width\n        })\n      );\n    }\n  }\n\n  componentWillUnmount() {\n    const el = ReactDOM.findDOMNode(this).getElementsByTagName('TEXTAREA')[0];\n    el.removeEventListener('blur', this.handleBlur);\n    el.removeEventListener('focus', this.handleFocus);\n    el.removeEventListener('keypress', this.handleKeypress);\n    el.removeEventListener('keydown', this.handleKeydown);\n    el.removeEventListener('keyup', this.handleChange);\n    el.removeEventListener('change', this.handleChange);\n  }\n\n  handleKeydown = e => {\n    if (e.keyCode === 8 && e.target.value.length === 1) {\n      this.setState({ showPlaceholder: true });\n    }\n  };\n\n  handleKeypress = e => {\n    const noEffect = [0, 13];\n    if (e.which === 13 && this.props.onEnter) {\n      this.props.onEnter(e);\n    }\n\n    if (!e.which || noEffect.indexOf(e.which) !== -1) return null;\n    if (String.fromCharCode(e.which)) {\n      if (this.state.showPlaceholder) {\n        this.setState({ showPlaceholder: false });\n      }\n    }\n  };\n\n  handleChange = e => {\n    if (e.target.value && this.state.showPlaceholder) {\n      this.setState({ showPlaceholder: false });\n    } else if (!e.target.value && !this.state.showPlaceholder) {\n      this.setState({ showPlaceholder: true });\n    }\n  };\n\n  handleBlur = e => {\n    if (this.props.centerPlaceholder) {\n      if (!e.target.value) {\n        pushCenter(e.target, ReactDOM.findDOMNode(this.refs.label));\n      }\n    }\n\n    this.setState({ isFocused: false });\n  };\n\n  handleFocus = e => {\n    if (this.props.centerPlaceholder) {\n      if (!e.target.value) {\n        pullLeft(e.target, ReactDOM.findDOMNode(this.refs.label));\n      }\n    }\n    setTimeout(() => this.setState({ isFocused: true }));\n  };\n\n  /**\n   * Remove the focus programmatically\n   * @public\n   * */\n  blur() {\n    const inputEl = ReactDOM.findDOMNode(this.refs.element);\n    inputEl.blur();\n  }\n\n  /**\n   * Focus the input programmatically\n   * @public\n   */\n  focus() {\n    const inputEl = ReactDOM.findDOMNode(this.refs.element);\n    inputEl.focus();\n  }\n\n  render() {\n    let {\n      style,\n      label,\n      size,\n      rounded,\n      focusRing,\n      placeholder,\n      centerPlaceholder,\n      icon,\n      ...props\n    } = this.props;\n    delete props.onEnter;\n\n    let [inputStyle, containerStyle] = mapStyles(style, TextAreaOSX.mapStyles);\n\n    let componentStyle = { ...styles.textField };\n\n    if (rounded) rounded = rounded === true ? '4px' : parseDimension(rounded);\n\n    let focusElement;\n    if (this.state.isFocused && focusRing) {\n      componentStyle = {\n        ...componentStyle,\n        ...(rounded ? styles.textFieldRoundedFocus : styles.textFieldFocus)\n      };\n\n      let focusElementStyle = {\n        ...styles.focusElement,\n        animation: 'x .25s linear forwards',\n        animationName: focusRingAnimation(rounded)\n      };\n      focusElement = <div style={focusElementStyle} />;\n    }\n\n    let labelComponent = label ? (\n      <Label margin=\"0 0 3px 0\">{label}</Label>\n    ) : null;\n\n    props = removeFontSizeProps(\n      removeDimensionProps(removeMarginProps(removeHiddenProps(props)))\n    );\n\n    if (rounded) {\n      componentStyle.borderRadius = parseDimension(rounded);\n    }\n\n    if (size && parseInt(size) !== 13) {\n      const ratio = size / 13;\n      componentStyle.lineHeight = parseDimension(size * 1.4);\n      componentStyle.paddingLeft = parseDimension(3.5 * ratio);\n      componentStyle.paddingRight = parseDimension(3.5 * ratio);\n    }\n\n    let input = FontSize(\n      <textarea\n        key=\"element\"\n        ref=\"element\"\n        style={componentStyle}\n        // If we're centering the place holder, we don't want to set the `placeholder`\n        // property. Otherwise we'll end up with two placeholders.\n        placeholder={!centerPlaceholder ? placeholder : undefined}\n        {...props}\n      />,\n      this.props\n    );\n\n    if (this.state.iconPadding) {\n      inputStyle.paddingLeft = parseDimension(this.state.iconPadding + 12);\n    }\n\n    if (this.context.titlebarChild) {\n      inputStyle = { ...inputStyle, ...styles.titleBarTextArea };\n      if (this.state.isFocused && focusRing) {\n        inputStyle = { ...inputStyle, ...styles.titleBarTextAreaFocus };\n      }\n    }\n\n    input = cloneElement(input, {\n      ...input.props,\n      style: { ...input.props.style, ...inputStyle }\n    });\n    let placeholderElement;\n\n    if (centerPlaceholder) {\n      placeholderElement = (\n        <div style={styles.label}>\n          <div ref=\"label\" style={styles.labelContent}>\n            <div ref=\"icon\" style={styles.icon}>\n              {icon}\n            </div>\n            {this.state.showPlaceholder ? (\n              <Text color=\"#c0c0c0\" size=\"12\">\n                {placeholder}\n              </Text>\n            ) : null}\n          </div>\n        </div>\n      );\n    } else if (placeholder) {\n      input = (\n        <PlaceholderStyle placeholderStyle={styles.textField[':placeholder']}>\n          {cloneElement(input, {\n            ...input.props,\n            style: { ...input.props.style, ...inputStyle },\n            placeholder\n          })}\n        </PlaceholderStyle>\n      );\n    }\n\n    return Margin(\n      <div\n        style={{\n          ...styles.container,\n          ...(this.state.isFocused ? styles.containerFocus : {}),\n          ...containerStyle\n        }}\n      >\n        {labelComponent}\n        <div style={styles.wrapper}>\n          <StyleRoot>{focusElement}</StyleRoot>\n          {placeholderElement}\n          {input}\n        </div>\n      </div>,\n      this.props\n    );\n  }\n}\n\nexport default TextAreaOSX;\n"
  },
  {
    "path": "src/TextArea/macOs/styles/10.11.js",
    "content": "export default {\n  container: {\n    position: 'relative',\n    zIndex: '2'\n  },\n\n  containerFocus: {\n    zIndex: '3'\n  },\n\n  wrapper: {\n    position: 'relative'\n  },\n\n  textField: {\n    position: 'relative',\n    zIndex: '2',\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    borderWidth: '2px',\n    borderStyle: 'solid',\n    borderTopColor: '#bebfbf',\n    borderLeftColor: '#bebfbf',\n    borderRightColor: '#bebfbf',\n    borderBottomColor: '#bebfbf',\n    borderBottomWidth: '0',\n    boxShadow: 'inset 0 0 0 0 #f0f0f0',\n    paddingTop: '4px',\n    paddingBottom: '0px',\n    paddingLeft: '3.5px',\n    paddingRight: '3.5px',\n    lineHeight: '15px',\n    fontFamily: '-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '13px',\n    letterSpacing: '0.4px',\n    width: '100%',\n    boxSizing: 'border-box',\n    outline: 'none',\n\n    ':placeholder': {\n      color: '#c0c0c0'\n    }\n  },\n\n  textFieldFocus: {\n    borderTopColor: '#64abda',\n    borderLeftColor: '#64abda',\n    borderRightColor: '#64abda',\n    borderBottomColor: '#64abda',\n    transition: 'border-color .22s ease-out'\n  },\n\n  textFieldRoundedFocus: {\n    borderTopColor: '#64abda',\n    borderLeftColor: '#64abda',\n    borderRightColor: '#64abda',\n    borderBottomColor: '#64abda',\n    boxShadow: 'inset 0 0 0 0 rgba(125, 195, 242, .7)',\n    transition: 'all .22s ease-out'\n  },\n\n  titleBarTextArea: {\n    backgroundImage: '-webkit-linear-gradient(top, #ffffff 0%, #f1f1f1 100%)',\n    boxShadow: 'none',\n    borderTopColor: '#d0d0d0',\n    borderLeftColor: '#cacaca',\n    borderRightColor: '#cacaca',\n    borderBottomColor: '#afafaf'\n  },\n\n  titleBarTextAreaFocus: {\n    borderTopColor: '#6daed9',\n    borderLeftColor: '#70aed4',\n    borderRightColor: '#70aed4',\n    borderBottomColor: '#6199bc'\n  },\n\n  focusElement: {\n    position: 'absolute',\n    zIndex: '1',\n    width: '100%',\n    height: '100%',\n    top: '-2px',\n    left: '-3px',\n    background: '#7dc3f2',\n    border: '3px solid #7dc3f2',\n    opacity: '0',\n    borderRadius: '4px'\n  },\n\n  label: {\n    position: 'absolute',\n    zIndex: '4',\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    width: '100%',\n    height: '100%',\n    paddingRight: '18px',\n    boxSizing: 'border-box',\n    pointerEvents: 'none'\n  },\n\n  icon: {\n    marginLeft: '6px',\n    marginRight: '6px',\n    paddingTop: '2px'\n  },\n\n  labelContent: {\n    display: 'flex',\n    alignItems: 'center',\n    paddingTop: '2px'\n  }\n};\n"
  },
  {
    "path": "src/TextArea/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport Text from '../../Text/windows';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport ValueRef from '../../ValueRef';\nimport Background, {\n  backgroundPropTypes,\n  removeBackgroundProps\n} from '../../style/background/windows';\nimport {\n  ThemeContext,\n  themePropTypes,\n  themeContextTypes\n} from '../../style/theme/windows';\nimport { ColorContext, colorContextTypes } from '../../style/color/windows';\nimport styles from './styles/windows10';\nimport PlaceholderStyle from '../../placeholderStyle';\nimport Radium from 'radium';\n\n@ValueRef()\n@Hidden()\n@Dimension()\n@Margin()\n@ColorContext()\n@ThemeContext()\n@Radium\nclass TextArea extends Component {\n  static propTypes = {\n    ...themePropTypes,\n    ...hiddenPropTypes,\n    ...dimensionPropTypes,\n    ...marginPropTypes,\n    ...backgroundPropTypes,\n    label: PropTypes.string,\n    labelColor: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n    labelStyle: PropTypes.object\n  };\n\n  static contextTypes = {\n    ...themeContextTypes,\n    ...colorContextTypes\n  };\n\n  get placeholderStyle() {\n    return this.context.theme === 'dark'\n      ? styles[':placeholderDarkTheme']\n      : styles[':placeholder'];\n  }\n\n  /**\n   * Remove the focus programmatically\n   * @public\n   * */\n  blur() {\n    const inputEl = ReactDOM.findDOMNode(this.refs.element);\n    inputEl.blur();\n  }\n\n  /**\n   * Focus the input programmatically\n   * @public\n   */\n  focus() {\n    const inputEl = ReactDOM.findDOMNode(this.refs.element);\n    inputEl.focus();\n  }\n\n  render() {\n    let {\n      label,\n      labelColor,\n      labelStyle,\n      style,\n      ...props\n    } = this.props;\n    let componentStyle = { ...styles.textBox, ...style };\n\n    if (this.context.theme === 'dark') {\n      labelStyle = { ...styles.labalDarkTheme, ...labelStyle };\n      componentStyle = { ...componentStyle, ...styles.textBoxDarkTheme };\n    }\n\n    labelColor =\n      labelColor === true\n        ? this.context.color\n        : labelColor\n          ? labelColor\n          : this.context.theme === 'dark' ? '#FFFFFF' : null;\n    if (labelColor) labelStyle = { color: labelColor, ...labelStyle };\n\n    componentStyle[':focus'] = {\n      ...componentStyle[':focus'],\n      borderColor: this.context.color\n    };\n\n    props = removeBackgroundProps(props);\n\n    const input = (\n      <PlaceholderStyle placeholderStyle={this.placeholderStyle}>\n        {Background(\n          <textarea\n            ref=\"element\"\n            style={componentStyle}\n            {...props}\n          />,\n          this.props\n        )}\n      </PlaceholderStyle>\n    );\n\n    if (label) {\n      return (\n        <div>\n          <Text\n            style={{ marginBottom: '5px', ...labelStyle }}\n            color={this.context.theme === 'dark' ? '#FFFFFF' : null}\n          >\n            {label}\n          </Text>\n          {input}\n        </div>\n      );\n    }\n    return input;\n  }\n}\n\nexport default TextArea;\n"
  },
  {
    "path": "src/TextArea/windows/styles/windows10.js",
    "content": "export default {\n  textBox: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    borderWidth: '2px',\n    borderStyle: 'solid',\n    borderColor: 'rgba(148, 148, 148, 1)',\n    padding: '2px 10px 3px 10px',\n    lineHeight: '23px',\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '15px',\n    fontWeight: '100',\n    color: '#000000',\n    marginBottom: '-4px',\n    background: 'rgba(255, 255, 255, .35)',\n\n    ':hover': {\n      borderColor: 'rgba(100, 100, 100, 1)',\n      background: 'rgba(255, 255, 255, .5)'\n    },\n\n    ':focus': {\n      outline: 'none',\n      borderColor: 'rgba(0, 120, 215, 1)',\n      background: 'rgba(255, 255, 255, 1)'\n    }\n  },\n\n  textBoxDarkTheme: {\n    borderColor: 'rgba(255, 255, 255, .41)',\n    background: 'rgba(0, 0, 0, .4)',\n    color: '#ffffff',\n\n    ':hover': {\n      borderColor: 'rgba(255, 255, 255, .94)',\n      background: 'rgba(0, 0, 0, .6)'\n    },\n\n    ':focus': {\n      outline: 'none',\n      borderColor: 'rgba(0, 120, 215, 1)',\n      background: 'rgba(255, 255, 255, 1)',\n      color: '#000000'\n    }\n  },\n\n  ':placeholder': {\n    color: '#636363'\n  },\n\n  ':placeholderDarkTheme': {\n    color: 'rgba(255, 255, 255, .64)',\n\n    ':focus': {\n      color: 'rgba(0, 0, 0, .41)'\n    }\n  },\n\n  labalDarkTheme: {\n\n  }\n};\n"
  },
  {
    "path": "src/TextInput/macOs/centerPlaceholderAnimation.js",
    "content": "import BezierEasing from '../../animation/bezierEasing';\n\nlet requestAnimationFrame;\nif (typeof window !== 'undefined') {\n  requestAnimationFrame = window.requestAnimationFrame ||\n    window.mozRequestAnimationFrame ||\n    window.webkitRequestAnimationFrame ||\n    window.msRequestAnimationFrame;\n}\n\nlet startTimestamp;\nconst duration = 350;\nconst easing = BezierEasing(.3,.14,0,1);\n\nfunction moveLabel(timestamp, label, start, current, end, cb) {\n  if (start === end) return null;\n  if (!startTimestamp) startTimestamp = timestamp;\n  let progress = 1 - (timestamp - startTimestamp) / duration;\n  if (progress < 0) progress = 0;\n  progress = 1 - (easing.get(1 - progress));\n  if (start > end) {\n    current = progress * start;\n  } else {\n    current = (1 - progress) * end + start;\n  }\n\n  label.style.left = current + 'px';\n  if (start > end && current > end || start < end && current < end) {\n    requestAnimationFrame(timestamp => moveLabel(timestamp, label, start, current, end));\n  } else {\n    label.style.left = end + 'px';\n    if (cb) cb();\n  }\n}\n\nfunction animateLabel(label, start, end) {\n  return new Promise(resolve => {\n    if (requestAnimationFrame) {\n      requestAnimationFrame(timestamp => moveLabel(timestamp, label, start, start, end, resolve));\n    }\n  });\n}\n\nexport function pullLeft(input, label) {\n  startTimestamp = null;\n  const start = label.offsetLeft;\n  input.style.color = 'transparent';\n  label.style.position = 'absolute';\n  setTimeout(() => {\n    animateLabel(label, start, 2);\n    setTimeout(() => input.style.color = null, 300);\n  }, 10);\n}\n\nexport function pushCenter(input, label) {\n  startTimestamp = null;\n  label.style.position = 'relative';\n  const end = label.offsetLeft;\n  label.style.position = 'absolute';\n\n  setTimeout(() => {\n    animateLabel(label, 2, end)\n      .then(() => label.style.position = 'relative');\n  }, 10);\n}\n"
  },
  {
    "path": "src/TextInput/macOs/focusRingAnimation.js",
    "content": "import { keyframes } from 'radium';\n\nexport default function (borderRadius) {\n  return keyframes(\n    {\n      '0%': {\n        opacity: '0',\n        borderWidth: '34px',\n        top: '-34px',\n        left: '-34px'\n      },\n      '32%': {\n        opacity: '0',\n        borderRadius: '10px',\n        borderWidth: '30px',\n        top: '-30px',\n        left: '-30px'\n      },\n      '50%': {\n        opacity: '.2',\n        borderWidth: '15px',\n        top: '-15px',\n        left: '-15px'\n      },\n      '80%': {\n        opacity: '.4',\n        borderWidth: '9px',\n        top: '-9px',\n        left: '-9px'\n      },\n      '90%': {\n        opacity: '.9',\n        borderWidth: '6px',\n        top: '-6px',\n        left: '-6px'\n      },\n      '100%': {\n        opacity: '1',\n        ...(\n          borderRadius ? {\n            top: '-2px',\n            left: '-2px',\n            borderRadius: (parseInt(borderRadius) + 2) + 'px',\n            borderWidth: '2px',\n            boxShadow: '0 0 1px 0px rgba(125, 195, 242, .7)'\n          } : {\n            top: '-3px',\n            left: '-3px',\n            borderRadius: '4px',\n            borderWidth: '3px'\n          }\n        )\n      }\n    },\n    'text-input-focus'\n  );\n}\n"
  },
  {
    "path": "src/TextInput/macOs/index.js",
    "content": "import React, { Component, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport Radium, { StyleRoot } from 'radium';\nimport styles from './styles/10.11';\nimport Text from '../../Text/macOs';\nimport Label from '../../Label/macOs';\nimport Hidden, { hiddenPropTypes, removeHiddenProps } from '../../style/hidden';\nimport Margin, { marginPropTypes, removeMarginProps } from '../../style/margin';\nimport Dimension, {\n  dimensionPropTypes,\n  removeDimensionProps\n} from '../../style/dimension';\nimport FontSize, {\n  fontSizePropTypes,\n  removeFontSizeProps\n} from '../../style/fontSize';\nimport PlaceholderStyle from '../../placeholderStyle';\nimport mapStyles from '../../utils/mapStyles';\nimport { parseDimension } from '../../styleHelper';\nimport focusRingAnimation from './focusRingAnimation';\nimport { pullLeft, pushCenter } from './centerPlaceholderAnimation';\nimport ValueRef from '../../ValueRef';\n\n@ValueRef()\n@Hidden()\n@Dimension()\n@Radium\nclass TextFieldOSX extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...marginPropTypes,\n    ...dimensionPropTypes,\n    ...fontSizePropTypes,\n    label: PropTypes.string,\n    rounded: PropTypes.oneOfType([\n      PropTypes.bool,\n      PropTypes.number,\n      PropTypes.string\n    ]),\n    focusRing: PropTypes.bool,\n    onEnter: PropTypes.func,\n    centerPlaceholder: PropTypes.bool,\n    icon: PropTypes.oneOfType([PropTypes.element, PropTypes.array]),\n    placeholder: PropTypes.string,\n    password: PropTypes.bool\n  };\n\n  static defaultProps = {\n    focusRing: true\n  };\n\n  static mapStyles = {\n    container: ['margin', 'width', 'height', 'display']\n  };\n\n  static contextTypes = {\n    titlebarChild: PropTypes.bool\n  };\n\n  constructor() {\n    super();\n    this.state = {\n      isFocused: false,\n      showPlaceholder: true,\n      iconPadding: null\n    };\n  }\n\n  componentDidMount() {\n    const el = ReactDOM.findDOMNode(this).getElementsByTagName('INPUT')[0];\n    el.addEventListener('blur', this.handleBlur);\n    el.addEventListener('focus', this.handleFocus);\n    el.addEventListener('keypress', this.handleKeypress);\n    el.addEventListener('keydown', this.handleKeydown);\n    el.addEventListener('keyup', this.handleChange);\n    el.addEventListener('change', this.handleChange);\n\n    if (this.props.icon) {\n      setTimeout(() =>\n        this.setState({\n          iconPadding: ReactDOM.findDOMNode(\n            this.refs.icon\n          ).getBoundingClientRect().width\n        })\n      );\n    }\n  }\n\n  componentWillUnmount() {\n    const el = ReactDOM.findDOMNode(this).getElementsByTagName('INPUT')[0];\n    el.removeEventListener('blur', this.handleBlur);\n    el.removeEventListener('focus', this.handleFocus);\n    el.removeEventListener('keypress', this.handleKeypress);\n    el.removeEventListener('keydown', this.handleKeydown);\n    el.removeEventListener('keyup', this.handleChange);\n    el.removeEventListener('change', this.handleChange);\n  }\n\n  handleKeydown = e => {\n    if (e.keyCode === 8 && e.target.value.length === 1) {\n      this.setState({ showPlaceholder: true });\n    }\n  };\n\n  handleKeypress = e => {\n    const noEffect = [0, 13];\n    if (e.which === 13 && this.props.onEnter) {\n      this.props.onEnter(e);\n    }\n\n    if (!e.which || noEffect.indexOf(e.which) !== -1) return null;\n    if (String.fromCharCode(e.which)) {\n      if (this.state.showPlaceholder) {\n        this.setState({ showPlaceholder: false });\n      }\n    }\n  };\n\n  handleChange = e => {\n    if (e.target.value && this.state.showPlaceholder) {\n      this.setState({ showPlaceholder: false });\n    } else if (!e.target.value && !this.state.showPlaceholder) {\n      this.setState({ showPlaceholder: true });\n    }\n  };\n\n  handleBlur = e => {\n    if (this.props.centerPlaceholder) {\n      if (!e.target.value) {\n        pushCenter(e.target, ReactDOM.findDOMNode(this.refs.label));\n      }\n    }\n\n    this.setState({ isFocused: false });\n  };\n\n  handleFocus = e => {\n    if (this.props.centerPlaceholder) {\n      if (!e.target.value) {\n        pullLeft(e.target, ReactDOM.findDOMNode(this.refs.label));\n      }\n    }\n    setTimeout(() => this.setState({ isFocused: true }));\n  };\n\n  /**\n   * Remove the focus programmatically\n   * @public\n   * */\n  blur() {\n    const inputEl = ReactDOM.findDOMNode(this.refs.element);\n    inputEl.blur();\n  }\n\n  /**\n   * Focus the input programmatically\n   * @public\n   */\n  focus() {\n    const inputEl = ReactDOM.findDOMNode(this.refs.element);\n    inputEl.focus();\n  }\n\n  render() {\n    let {\n      style,\n      label,\n      size,\n      rounded,\n      focusRing,\n      placeholder,\n      centerPlaceholder,\n      icon,\n      password,\n      ...props\n    } = this.props;\n    delete props.onEnter;\n\n    let [inputStyle, containerStyle] = mapStyles(style, TextFieldOSX.mapStyles);\n\n    let componentStyle = { ...styles.textField };\n\n    if (rounded) rounded = rounded === true ? '4px' : parseDimension(rounded);\n\n    let focusElement;\n    if (this.state.isFocused && focusRing) {\n      componentStyle = {\n        ...componentStyle,\n        ...(rounded ? styles.textFieldRoundedFocus : styles.textFieldFocus)\n      };\n\n      let focusElementStyle = {\n        ...styles.focusElement,\n        animation: 'x .25s linear forwards',\n        animationName: focusRingAnimation(rounded)\n      };\n      focusElement = <div style={focusElementStyle} />;\n    }\n\n    let labelComponent = label ? (\n      <Label margin=\"0 0 3px 0\">{label}</Label>\n    ) : null;\n\n    props = removeFontSizeProps(\n      removeDimensionProps(removeMarginProps(removeHiddenProps(props)))\n    );\n\n    if (rounded) {\n      componentStyle.borderRadius = parseDimension(rounded);\n    }\n\n    if (size && parseInt(size) !== 13) {\n      const ratio = size / 13;\n      componentStyle.lineHeight = parseDimension(size * 1.4);\n      componentStyle.paddingLeft = parseDimension(3.5 * ratio);\n      componentStyle.paddingRight = parseDimension(3.5 * ratio);\n    }\n\n    let input = FontSize(\n      <input\n        key=\"element\"\n        ref=\"element\"\n        type={`${password ? 'password' : 'text'}`}\n        style={componentStyle}\n        // If we're centering the place holder, we don't want to set the `placeholder`\n        // property. Otherwise we'll end up with two placeholders.\n        placeholder={!centerPlaceholder ? placeholder : undefined}\n        {...props}\n      />,\n      this.props\n    );\n\n    if (this.state.iconPadding) {\n      inputStyle.paddingLeft = parseDimension(this.state.iconPadding + 12);\n    }\n\n    if (this.context.titlebarChild) {\n      inputStyle = { ...inputStyle, ...styles.titleBarTextField };\n      if (this.state.isFocused && focusRing) {\n        inputStyle = { ...inputStyle, ...styles.titleBarTextFieldFocus };\n      }\n    }\n\n    input = cloneElement(input, {\n      ...input.props,\n      style: { ...input.props.style, ...inputStyle }\n    });\n    let placeholderElement;\n\n    if (centerPlaceholder) {\n      placeholderElement = (\n        <div style={styles.label}>\n          <div ref=\"label\" style={styles.labelContent}>\n            <div ref=\"icon\" style={styles.icon}>\n              {icon}\n            </div>\n            {this.state.showPlaceholder ? (\n              <Text color=\"#c0c0c0\" size=\"12\">\n                {placeholder}\n              </Text>\n            ) : null}\n          </div>\n        </div>\n      );\n    } else if (placeholder) {\n      input = (\n        <PlaceholderStyle placeholderStyle={styles.textField[':placeholder']}>\n          {cloneElement(input, {\n            ...input.props,\n            style: { ...input.props.style, ...inputStyle },\n            placeholder\n          })}\n        </PlaceholderStyle>\n      );\n    }\n\n    return Margin(\n      <div\n        style={{\n          ...styles.container,\n          ...(this.state.isFocused ? styles.containerFocus : {}),\n          ...containerStyle\n        }}\n      >\n        {labelComponent}\n        <div style={styles.wrapper}>\n          <StyleRoot>{focusElement}</StyleRoot>\n          {placeholderElement}\n          {input}\n        </div>\n      </div>,\n      this.props\n    );\n  }\n}\n\nexport default TextFieldOSX;\n"
  },
  {
    "path": "src/TextInput/macOs/styles/10.11.js",
    "content": "export default {\n  container: {\n    position: 'relative',\n    zIndex: '2'\n  },\n\n  containerFocus: {\n    zIndex: '3'\n  },\n\n  wrapper: {\n    position: 'relative'\n  },\n\n  textField: {\n    position: 'relative',\n    zIndex: '2',\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    borderWidth: '1px',\n    borderStyle: 'solid',\n    borderTopColor: '#bebfbf',\n    borderLeftColor: '#bebfbf',\n    borderRightColor: '#bebfbf',\n    borderBottomColor: '#bebfbf',\n    boxShadow: 'inset 0 0 0 1px #f0f0f0',\n    paddingTop: '4px',\n    paddingBottom: '3px',\n    paddingLeft: '3.5px',\n    paddingRight: '3.5px',\n    lineHeight: '15px',\n    fontFamily: '-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '13px',\n    letterSpacing: '0.4px',\n    width: '100%',\n    boxSizing: 'border-box',\n    outline: 'none',\n\n    ':placeholder': {\n      color: '#c0c0c0'\n    }\n  },\n\n  textFieldFocus: {\n    borderTopColor: '#64abda',\n    borderLeftColor: '#64abda',\n    borderRightColor: '#64abda',\n    borderBottomColor: '#64abda',\n    transition: 'border-color .22s ease-out'\n  },\n\n  textFieldRoundedFocus: {\n    borderTopColor: '#64abda',\n    borderLeftColor: '#64abda',\n    borderRightColor: '#64abda',\n    borderBottomColor: '#64abda',\n    boxShadow: 'inset 0 0 0 1px rgba(125, 195, 242, .7)',\n    transition: 'all .22s ease-out'\n  },\n\n  titleBarTextField: {\n    backgroundImage: '-webkit-linear-gradient(top, #ffffff 0%, #f1f1f1 100%)',\n    boxShadow: 'none',\n    borderTopColor: '#d0d0d0',\n    borderLeftColor: '#cacaca',\n    borderRightColor: '#cacaca',\n    borderBottomColor: '#afafaf'\n  },\n\n  titleBarTextFieldFocus: {\n    borderTopColor: '#6daed9',\n    borderLeftColor: '#70aed4',\n    borderRightColor: '#70aed4',\n    borderBottomColor: '#6199bc'\n  },\n\n  focusElement: {\n    position: 'absolute',\n    zIndex: '1',\n    width: '100%',\n    height: '100%',\n    top: '-3px',\n    left: '-3px',\n    background: '#7dc3f2',\n    border: '3px solid #7dc3f2',\n    opacity: '0',\n    borderRadius: '4px'\n  },\n\n  label: {\n    position: 'absolute',\n    zIndex: '4',\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    width: '100%',\n    height: '100%',\n    paddingRight: '18px',\n    boxSizing: 'border-box',\n    pointerEvents: 'none'\n  },\n\n  icon: {\n    marginLeft: '6px',\n    marginRight: '6px',\n    paddingTop: '2px'\n  },\n\n  labelContent: {\n    display: 'flex',\n    alignItems: 'center',\n    paddingTop: '2px'\n  }\n};\n"
  },
  {
    "path": "src/TextInput/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport Text from '../../Text/windows';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport ValueRef from '../../ValueRef';\nimport Background, {\n  backgroundPropTypes,\n  removeBackgroundProps\n} from '../../style/background/windows';\nimport {\n  ThemeContext,\n  themePropTypes,\n  themeContextTypes\n} from '../../style/theme/windows';\nimport { ColorContext, colorContextTypes } from '../../style/color/windows';\nimport styles from './styles/windows10';\nimport PlaceholderStyle from '../../placeholderStyle';\nimport Radium from 'radium';\n\n@ValueRef()\n@Hidden()\n@Dimension()\n@Margin()\n@ColorContext()\n@ThemeContext()\n@Radium\nclass TextInput extends Component {\n  static propTypes = {\n    ...themePropTypes,\n    ...hiddenPropTypes,\n    ...dimensionPropTypes,\n    ...marginPropTypes,\n    ...backgroundPropTypes,\n    label: PropTypes.string,\n    labelColor: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n    labelStyle: PropTypes.object,\n    password: PropTypes.bool\n  };\n\n  static contextTypes = {\n    ...themeContextTypes,\n    ...colorContextTypes\n  };\n\n  get placeholderStyle() {\n    return this.context.theme === 'dark'\n      ? styles[':placeholderDarkTheme']\n      : styles[':placeholder'];\n  }\n\n  /**\n   * Remove the focus programmatically\n   * @public\n   * */\n  blur() {\n    const inputEl = ReactDOM.findDOMNode(this.refs.element);\n    inputEl.blur();\n  }\n\n  /**\n   * Focus the input programmatically\n   * @public\n   */\n  focus() {\n    const inputEl = ReactDOM.findDOMNode(this.refs.element);\n    inputEl.focus();\n  }\n\n  render() {\n    let {\n      label,\n      labelColor,\n      labelStyle,\n      style,\n      password,\n      ...props\n    } = this.props;\n    let componentStyle = { ...styles.textBox, ...style };\n\n    if (this.context.theme === 'dark') {\n      labelStyle = { ...styles.labalDarkTheme, ...labelStyle };\n      componentStyle = { ...componentStyle, ...styles.textBoxDarkTheme };\n    }\n\n    labelColor =\n      labelColor === true\n        ? this.context.color\n        : labelColor\n          ? labelColor\n          : this.context.theme === 'dark' ? '#FFFFFF' : null;\n    if (labelColor) labelStyle = { color: labelColor, ...labelStyle };\n\n    componentStyle[':focus'] = {\n      ...componentStyle[':focus'],\n      borderColor: this.context.color\n    };\n\n    props = removeBackgroundProps(props);\n\n    const input = (\n      <PlaceholderStyle placeholderStyle={this.placeholderStyle}>\n        {Background(\n          <input\n            ref=\"element\"\n            type={`${password ? 'password' : 'text'}`}\n            style={componentStyle}\n            {...props}\n          />,\n          this.props\n        )}\n      </PlaceholderStyle>\n    );\n\n    if (label) {\n      return (\n        <div>\n          <Text\n            style={{ marginBottom: '5px', ...labelStyle }}\n            color={this.context.theme === 'dark' ? '#FFFFFF' : null}\n          >\n            {label}\n          </Text>\n          {input}\n        </div>\n      );\n    }\n    return input;\n  }\n}\n\nexport default TextInput;\n"
  },
  {
    "path": "src/TextInput/windows/styles/windows10.js",
    "content": "export default {\n  textBox: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    borderWidth: '2px',\n    borderStyle: 'solid',\n    borderColor: 'rgba(148, 148, 148, 1)',\n    padding: '2px 10px 3px 10px',\n    lineHeight: '23px',\n    fontFamily: '\"Segoe UI\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '15px',\n    fontWeight: '100',\n    color: '#000000',\n    marginBottom: '18px',\n    background: 'rgba(255, 255, 255, .35)',\n\n    ':hover': {\n      borderColor: 'rgba(100, 100, 100, 1)',\n      background: 'rgba(255, 255, 255, .5)'\n    },\n\n    ':focus': {\n      outline: 'none',\n      borderColor: 'rgba(0, 120, 215, 1)',\n      background: 'rgba(255, 255, 255, 1)'\n    }\n  },\n\n  textBoxDarkTheme: {\n    borderColor: 'rgba(255, 255, 255, .41)',\n    background: 'rgba(0, 0, 0, .4)',\n    color: '#ffffff',\n\n    ':hover': {\n      borderColor: 'rgba(255, 255, 255, .94)',\n      background: 'rgba(0, 0, 0, .6)'\n    },\n\n    ':focus': {\n      outline: 'none',\n      borderColor: 'rgba(0, 120, 215, 1)',\n      background: 'rgba(255, 255, 255, 1)',\n      color: '#000000'\n    }\n  },\n\n  ':placeholder': {\n    color: '#636363'\n  },\n\n  ':placeholderDarkTheme': {\n    color: 'rgba(255, 255, 255, .64)',\n\n    ':focus': {\n      color: 'rgba(0, 0, 0, .41)'\n    }\n  },\n\n  labalDarkTheme: {\n\n  }\n};\n"
  },
  {
    "path": "src/TitleBar/macOs/Controls/Close.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport WindowFocus from '../../../windowFocus';\nimport styles from './styles/10.11';\nimport Radium from 'radium';\n\n@WindowFocus()\n@Radium\nclass Close extends Component {\n  static propTypes = {\n    style: PropTypes.object,\n    showIcon: PropTypes.bool,\n    disabled: PropTypes.bool\n  };\n\n  render() {\n    const { style, isWindowFocused, showIcon, disabled, ...props } = this.props;\n\n    delete props.isFullscreen;\n\n    const iconStyle = {\n      ...styles.close.icon,\n      opacity: showIcon && !disabled ? 1 : 0\n    };\n\n    let componentStyle = { ...styles.close.button, ...style };\n    if (!isWindowFocused && !showIcon) {\n      componentStyle = { ...componentStyle, ...styles.close.unfocused };\n    }\n    if (disabled) {\n      componentStyle = { ...componentStyle, ...styles.close.disabled };\n    }\n\n    return (\n      <a\n        style={componentStyle}\n        {...props}\n      >\n        {window && window.devicePixelRatio > 1.5 ? (\n          <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 20 20\" style={iconStyle}>\n            <polygon fill=\"#4d0000\" points=\"15.9,5.2 14.8,4.1 10,8.9 5.2,4.1 4.1,5.2 8.9,10 4.1,14.8 5.2,15.9 10,11.1 14.8,15.9 15.9,14.8 11.1,10 \"/>\n          </svg>\n        ) : (\n          <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 10 10\" style={iconStyle}>\n            <path fill=\"#4d0000\" d=\"M5,3.552c0.438,-0.432 0.878,-0.861 1.322,-1.287c0.049,-0.044 0.101,-0.085 0.158,-0.119c0.149,-0.091 0.316,-0.137 0.49,-0.146c0.04,0 0.04,0 0.08,0.001c0.16,0.011 0.314,0.054 0.453,0.135c0.08,0.046 0.154,0.104 0.218,0.171c0.252,0.262 0.342,0.65 0.232,0.996c-0.045,0.141 -0.121,0.265 -0.218,0.375c-0.426,0.444 -0.855,0.884 -1.287,1.322c0.432,0.438 0.861,0.878 1.287,1.322c0.097,0.11 0.173,0.234 0.218,0.375c0.04,0.126 0.055,0.26 0.043,0.392c-0.011,0.119 -0.043,0.236 -0.094,0.344c-0.158,0.327 -0.49,0.548 -0.852,0.566c-0.106,0.005 -0.213,-0.007 -0.315,-0.035c-0.156,-0.043 -0.293,-0.123 -0.413,-0.229c-0.444,-0.426 -0.884,-0.855 -1.322,-1.287c-0.438,0.432 -0.878,0.861 -1.322,1.287c-0.11,0.097 -0.234,0.173 -0.375,0.218c-0.126,0.04 -0.26,0.055 -0.392,0.043c-0.119,-0.011 -0.236,-0.043 -0.344,-0.094c-0.327,-0.158 -0.548,-0.49 -0.566,-0.852c-0.005,-0.106 0.007,-0.213 0.035,-0.315c0.043,-0.156 0.123,-0.293 0.229,-0.413c0.426,-0.444 0.855,-0.884 1.287,-1.322c-0.432,-0.438 -0.861,-0.878 -1.287,-1.322c-0.106,-0.12 -0.186,-0.257 -0.229,-0.413c-0.025,-0.089 -0.037,-0.182 -0.036,-0.275c0.004,-0.363 0.211,-0.704 0.532,-0.874c0.13,-0.069 0.272,-0.105 0.418,-0.115c0.04,-0.001 0.04,-0.001 0.08,-0.001c0.174,0.009 0.341,0.055 0.49,0.146c0.057,0.034 0.109,0.075 0.158,0.119c0.444,0.426 0.884,0.855 1.322,1.287Z\" />\n          </svg>\n        )}\n      </a>\n    );\n  }\n}\n\nexport default Close;\n"
  },
  {
    "path": "src/TitleBar/macOs/Controls/Minimize.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport WindowFocus from '../../../windowFocus';\nimport styles from './styles/10.11';\nimport Radium from 'radium';\n\n@WindowFocus()\n@Radium\nclass Minimize extends Component {\n  static propTypes = {\n    style: PropTypes.object,\n    showIcon: PropTypes.bool,\n    disabled: PropTypes.bool\n  };\n\n  render() {\n    const { style, isWindowFocused, showIcon, disabled, ...props } = this.props;\n\n    delete props.isFullscreen;\n\n    const iconStyle = {\n      ...styles.minimize.icon,\n      opacity: showIcon && !disabled ? 1 : 0\n    };\n\n    let componentStyle = { ...styles.minimize.button, ...style };\n    if (!isWindowFocused && !showIcon) {\n      componentStyle = { ...componentStyle, ...styles.minimize.unfocused };\n    }\n    if (disabled) {\n      componentStyle = { ...componentStyle, ...styles.minimize.disabled };\n    }\n\n    return (\n      <a\n        style={componentStyle}\n        {...props}\n      >\n        {window && window.devicePixelRatio > 1.5 ? (\n          <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 20 20\" style={iconStyle}>\n            <rect fill=\"#995700\" x=\"2.4\" y=\"9\" width=\"15.1\" height=\"2\"/>\n          </svg>\n        ) : (\n          <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 10 10\" style={iconStyle}>\n            <path fill=\"#995700\" d=\"M8.048,4.001c0.163,0.012 0.318,0.054 0.459,0.137c0.325,0.191 0.518,0.559 0.49,0.934c-0.007,0.097 -0.028,0.192 -0.062,0.283c-0.04,0.105 -0.098,0.204 -0.171,0.29c-0.083,0.098 -0.185,0.181 -0.299,0.24c-0.131,0.069 -0.271,0.103 -0.417,0.114c-2.031,0.049 -4.065,0.049 -6.096,0c-0.163,-0.012 -0.318,-0.054 -0.459,-0.137c-0.325,-0.191 -0.518,-0.559 -0.49,-0.934c0.007,-0.097 0.028,-0.192 0.062,-0.283c0.04,-0.105 0.098,-0.204 0.171,-0.29c0.083,-0.098 0.185,-0.181 0.299,-0.24c0.131,-0.069 0.271,-0.103 0.417,-0.114c2.031,-0.049 4.065,-0.049 6.096,0Z\" />\n          </svg>\n        )}\n      </a>\n    );\n  }\n}\n\nexport default Minimize;\n"
  },
  {
    "path": "src/TitleBar/macOs/Controls/Resize.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport WindowFocus from '../../../windowFocus';\nimport styles from './styles/10.11';\nimport Radium from 'radium';\n\n@WindowFocus()\n@Radium\nclass Resize extends Component {\n  static propTypes = {\n    isFullscreen: PropTypes.bool,\n    showIcon: PropTypes.bool,\n    disabled: PropTypes.bool,\n    disableFullscreen: PropTypes.bool,\n  };\n\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeydown);\n    document.addEventListener('keyup', this.handleKeyup);\n  }\n\n  handleKeydown = e => {\n    if (e.altKey) this.setState({ altKey: true });\n  };\n\n  handleKeyup = () => {\n    if (this.state.altKey) this.setState({ altKey: false });\n  };\n\n  render() {\n    let {\n      style,\n      onClick,\n      onMaximizeClick,\n      isWindowFocused,\n      showIcon,\n      disabled,\n      disableFullscreen,\n      ...props\n    } = this.props;\n\n    delete props.isFullscreen;\n\n    let iconStyle = {\n      ...styles.resize.icon,\n      opacity: showIcon && !disabled ? 1 : 0\n    };\n\n    let componentStyle = { ...styles.resize.button, ...style };\n    if (!isWindowFocused && !showIcon) {\n      componentStyle = { ...componentStyle, ...styles.resize.unfocused };\n    }\n    if (disabled) {\n      componentStyle = { ...componentStyle, ...styles.resize.disabled };\n    }\n\n    let icon;\n    if (this.props.isFullscreen && !disableFullscreen) {\n      icon = window && window.devicePixelRatio > 1.5 ? (\n        <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 20 20\" style={iconStyle}>\n          <path fill=\"#006400\" d=\"M8.7,10H1l9,8.8v-7.5C9.3,11.2,8.7,10.7,8.7,10z\"/>\n          <path fill=\"#006400\" d=\"M11.3,10H19l-9-8.8v7.5C10.7,8.8,11.3,9.3,11.3,10z\"/>\n        </svg>\n      ) : (\n        <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 10 10\" style={iconStyle}>\n          <path fill=\"#006400\" d=\"M5,10c0,0 0,-2.744 0,-4.167c0,-0.221 -0.088,-0.433 -0.244,-0.589c-0.156,-0.156 -0.368,-0.244 -0.589,-0.244c-1.423,0 -4.167,0 -4.167,0l5,5Z\" />\n          <path fill=\"#006400\" d=\"M5,0c0,0 0,2.744 0,4.167c0,0.221 0.088,0.433 0.244,0.589c0.156,0.156 0.368,0.244 0.589,0.244c1.423,0 4.167,0 4.167,0l-5,-5Z\" />\n        </svg>\n      );\n    } else if (this.state.altKey || disableFullscreen) {\n      onClick = onMaximizeClick;\n      icon = window && window.devicePixelRatio > 1.5 ? (\n        <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 20 20\" style={iconStyle}>\n          <polygon fill=\"#006400\" points=\"17.5,9 11,9 11,2.5 9,2.5 9,9 2.5,9 2.5,11 9,11 9,17.5 11,17.5 11,11 17.5,11 \"/>\n        </svg>\n      ) : (\n        <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 10 10\" style={iconStyle}>\n          <path\n            fill=\"#006400\"\n            d=\"M3.912,3.976c0.004,-0.615 0.013,-1.23 0.025,-1.844c0.004,-0.067 0.012,-0.132 0.027,-0.197c0.042,-0.17 0.127,-0.32 0.244,-0.449c0.028,-0.029 0.028,-0.029 0.057,-0.056c0.121,-0.105 0.26,-0.184 0.415,-0.225c0.09,-0.024 0.183,-0.035 0.276,-0.033c0.363,0.007 0.702,0.218 0.868,0.54c0.068,0.131 0.103,0.273 0.111,0.42c0.013,0.614 0.021,1.229 0.025,1.844c0.615,0.004 1.23,0.013 1.844,0.025c0.147,0.009 0.289,0.043 0.42,0.111c0.118,0.061 0.223,0.145 0.308,0.247c0.077,0.092 0.136,0.197 0.176,0.309c0.12,0.343 0.042,0.734 -0.202,1.003c-0.071,0.079 -0.155,0.146 -0.247,0.198c-0.14,0.08 -0.294,0.121 -0.455,0.13c-0.614,0.012 -1.229,0.021 -1.844,0.025c-0.004,0.615 -0.012,1.23 -0.025,1.844c-0.008,0.147 -0.043,0.289 -0.111,0.42c-0.061,0.118 -0.145,0.223 -0.247,0.308c-0.091,0.076 -0.197,0.136 -0.309,0.176c-0.343,0.12 -0.734,0.042 -1.003,-0.202c-0.079,-0.071 -0.146,-0.155 -0.198,-0.247c-0.08,-0.14 -0.121,-0.295 -0.13,-0.455c-0.012,-0.614 -0.021,-1.229 -0.025,-1.844c-0.615,-0.004 -1.229,-0.013 -1.844,-0.025c-0.16,-0.009 -0.314,-0.05 -0.455,-0.13c-0.08,-0.046 -0.154,-0.103 -0.219,-0.169c-0.255,-0.259 -0.349,-0.647 -0.242,-0.994c0.043,-0.141 0.118,-0.266 0.214,-0.377c0.028,-0.029 0.028,-0.029 0.056,-0.057c0.129,-0.117 0.28,-0.202 0.449,-0.244c0.065,-0.015 0.13,-0.023 0.197,-0.027c0.615,-0.012 1.229,-0.021 1.844,-0.025Z\"\n          />\n        </svg>\n      );\n    } else {\n      icon = window && window.devicePixelRatio > 1.5 ? (\n        <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 20 20\" style={iconStyle}>\n          <path fill=\"#006400\" d=\"M5.3,16H13L4,7v7.7C4.6,14.7,5.3,15.4,5.3,16z\"/>\n          <path fill=\"#006400\" d=\"M14.7,4H7l9,9V5.3C15.4,5.3,14.7,4.6,14.7,4z\"/>\n        </svg>\n      ) : (\n        <svg x=\"0px\" y=\"0px\" width=\"10px\" height=\"10px\" viewBox=\"0 0 10 10\" style={iconStyle}>\n          <path fill=\"#006400\" d=\"M2,3c0,0 0,2.744 0,4.167c0,0.221 0.088,0.433 0.244,0.589c0.156,0.156 0.368,0.244 0.589,0.244c1.423,0 4.167,0 4.167,0l-5,-5Z\" />\n          <path fill=\"#006400\" d=\"M8,7c0,0 0,-2.744 0,-4.167c0,-0.221 -0.088,-0.433 -0.244,-0.589c-0.156,-0.156 -0.368,-0.244 -0.589,-0.244c-1.423,0 -4.167,0 -4.167,0l5,5Z\" />\n        </svg>\n      );\n    }\n\n    return (\n      <a\n        style={componentStyle}\n        onClick={onClick}\n        {...props}\n      >\n        {icon}\n      </a>\n    );\n  }\n}\n\nexport default Resize;\n"
  },
  {
    "path": "src/TitleBar/macOs/Controls/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Close from './Close';\nimport Minimize from './Minimize';\nimport Resize from './Resize';\n\nvar styles = {\n  controls: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    display: 'flex',\n    width: '61px'\n  },\n\n  inset: {\n    marginLeft: '5px'\n  }\n};\n\nclass Controls extends Component {\n  static propTypes = {\n    inset: PropTypes.bool,\n    isFullscreen: PropTypes.bool,\n    onCloseClick: PropTypes.func,\n    onMinimizeClick: PropTypes.func,\n    onMaximizeClick: PropTypes.func,\n    onResizeClick: PropTypes.func,\n    disableClose: PropTypes.bool,\n    disableMinimize: PropTypes.bool,\n    disableResize: PropTypes.bool,\n    disableFullscreen: PropTypes.bool\n  };\n\n  constructor() {\n    super();\n    this.state = {\n      isOver: false\n    };\n  }\n\n  render() {\n    return (\n      <div\n        style={{ ...styles.controls }}\n        onMouseEnter={() => this.setState({ isOver: true })}\n        onMouseLeave={() => this.setState({ isOver: false })}\n      >\n        <Close\n          onClick={this.props.onCloseClick}\n          showIcon={this.state.isOver}\n          disabled={this.props.disableClose}\n          isWindowFocused={this.props.isWindowFocused}\n        />\n        <Minimize\n          onClick={this.props.onMinimizeClick}\n          showIcon={this.state.isOver}\n          disabled={this.props.disableMinimize}\n          isWindowFocused={this.props.isWindowFocused}\n        />\n        <Resize\n          isFullscreen={this.props.isFullscreen}\n          onClick={this.props.onResizeClick}\n          onMaximizeClick={this.props.onMaximizeClick}\n          showIcon={this.state.isOver}\n          disabled={this.props.disableResize}\n          disableFullscreen={this.props.disableFullscreen}\n          isWindowFocused={this.props.isWindowFocused}\n        />\n      </div>\n    );\n  }\n}\n\nexport default Controls;\n"
  },
  {
    "path": "src/TitleBar/macOs/Controls/styles/10.11.js",
    "content": "export default {\n  close: {\n    button: {\n      WebkitUserSelect: 'none',\n      userSelect: 'none',\n      WebkitAppRegion: 'no-drag',\n      cursor: 'default',\n      boxSizing: 'border-box',\n      width: '12px',\n      height: '12px',\n      borderWidth: '1px',\n      borderStyle: 'solid',\n      borderRadius: '50%',\n      marginTop: '1px',\n      marginLeft: '5px',\n      marginRight: '4px',\n      lineHeight: 0,\n      backgroundColor: '#ff5f57',\n      borderColor: '#e2463f',\n\n      ':active': {\n        backgroundColor: '#bf4943',\n        borderColor: '#ad3934'\n      }\n    },\n\n    unfocused: {\n      backgroundColor: '#dddddd',\n      borderColor: '#d0d0d0',\n    },\n\n    disabled: {\n      backgroundColor: '#dddddd',\n      borderColor: '#d0d0d0',\n      ':active': {\n        backgroundColor: '#dddddd',\n        borderColor: '#d0d0d0'\n      }\n    },\n\n    icon: {\n      width: '10px',\n      height: '10px'\n    }\n  },\n\n  minimize: {\n    button: {\n      WebkitUserSelect: 'none',\n      userSelect: 'none',\n      WebkitAppRegion: 'no-drag',\n      cursor: 'default',\n      boxSizing: 'border-box',\n      width: '12px',\n      height: '12px',\n      borderWidth: '1px',\n      borderStyle: 'solid',\n      borderRadius: '50%',\n      marginTop: '1px',\n      marginLeft: '4px',\n      marginRight: '4px',\n      lineHeight: 0,\n      backgroundColor: '#ffbd2e',\n      borderColor: '#e1a116',\n\n      ':active': {\n        backgroundColor: '#bf9123',\n        borderColor: '#ad7d15'\n      }\n    },\n\n    unfocused: {\n      backgroundColor: '#dddddd',\n      borderColor: '#d0d0d0',\n    },\n\n    disabled: {\n      backgroundColor: '#dddddd',\n      borderColor: '#d0d0d0',\n      ':active': {\n        backgroundColor: '#dddddd',\n        borderColor: '#d0d0d0'\n      }\n    },\n\n    icon: {\n      width: '10px',\n      height: '10px'\n    }\n  },\n\n  resize: {\n    button: {\n      WebkitUserSelect: 'none',\n      userSelect: 'none',\n      WebkitAppRegion: 'no-drag',\n      cursor: 'default',\n      width: '12px',\n      height: '12px',\n      boxSizing: 'border-box',\n      borderWidth: '1px',\n      borderStyle: 'solid',\n      borderRadius: '50%',\n      marginTop: '1px',\n      marginLeft: '4px',\n      marginRight: '4px',\n      lineHeight: 0,\n      backgroundColor: '#28c940',\n      borderColor: '#12ac28',\n\n      ':active': {\n        backgroundColor: '#1f9a31',\n        borderColor: '#128622'\n      }\n    },\n\n    unfocused: {\n      backgroundColor: '#dddddd',\n      borderColor: '#d0d0d0'\n    },\n\n    disabled: {\n      backgroundColor: '#dddddd',\n      borderColor: '#d0d0d0',\n      ':active': {\n        backgroundColor: '#dddddd',\n        borderColor: '#d0d0d0'\n      }\n    },\n\n    icon: {\n      width: '10px',\n      height: '10px'\n    }\n  }\n};\n"
  },
  {
    "path": "src/TitleBar/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Controls from './Controls';\nimport styles from './styles/10.11';\nimport WindowFocus from '../../windowFocus';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\n\n@Dimension({ width: '100%' })\n@WindowFocus()\nclass TitleBar extends Component {\n  static propTypes = {\n    ...dimensionPropTypes,\n    title: PropTypes.node,\n    inset: PropTypes.bool,\n    controls: PropTypes.bool,\n    transparent: PropTypes.bool,\n    isFullscreen: PropTypes.bool,\n    onCloseClick: PropTypes.func,\n    onMinimizeClick: PropTypes.func,\n    onMaximizeClick: PropTypes.func,\n    onResizeClick: PropTypes.func,\n    disableClose: PropTypes.bool,\n    disableMinimize: PropTypes.bool,\n    disableResize: PropTypes.bool,\n    disableFullscreen: PropTypes.bool\n  };\n\n  static childContextTypes = {\n    titlebarChild: PropTypes.bool\n  };\n\n  getChildContext() {\n    return {\n      titlebarChild: true\n    };\n  }\n\n  componentDidMount() {\n    window.addEventListener('resize', this.resize);\n    this.resize();\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.resize);\n  }\n\n  componentDidUpdate() {\n    this.resize();\n  }\n\n  resize = () => {\n    if (this.refs.title) {\n      const barRect = this.refs.element.getBoundingClientRect();\n      this.refs.title.style.overflow = 'visible';\n      this.refs.title.style.paddingRight = 0;\n      this.refs.title.style.flexGrow = 0;\n      const titleRect = this.refs.title.getBoundingClientRect();\n      this.refs.title.style.overflow = 'hidden';\n      this.refs.title.style.flexGrow = 1;\n\n      const barWidth = barRect.width - 6;\n      const contentWidth = titleRect.width + (this.props.controls ? 60 : 0);\n\n      let padding = barWidth - contentWidth;\n      if (padding > 60) padding = 60;\n\n      this.refs.title.style.paddingRight = padding + 'px';\n    }\n  };\n\n  render() {\n    let {\n      children,\n      inset,\n      controls,\n      title,\n      transparent,\n      isWindowFocused,\n      style,\n      ...props\n    } = this.props;\n\n    delete props.isFullscreen;\n    delete props.onCloseClick;\n    delete props.onMinimizeClick;\n    delete props.onMaximizeClick;\n    delete props.onResizeClick;\n    delete props.disableClose;\n    delete props.disableMinimize;\n    delete props.disableResize;\n    delete props.disableFullscreen;\n\n    let componentStyle = { ...styles.titleBar };\n\n    let titleStyle = styles.title;\n\n    if (inset) {\n      componentStyle = { ...componentStyle, ...styles.titleBarInset };\n    }\n\n    if (!isWindowFocused) {\n      componentStyle = { ...componentStyle, ...styles.unfocusedTitleBar };\n      titleStyle = { ...titleStyle, ...styles.unfocusedTitle };\n    }\n\n    controls = !controls || (\n      <Controls ref=\"controls\" inset={inset} {...this.props} />\n    );\n    title = !title || (\n      <div ref=\"title\" style={titleStyle}>\n        {title}\n      </div>\n    );\n\n    if (transparent) {\n      delete componentStyle.backgroundImage;\n      delete componentStyle.borderBottomWidth;\n      delete componentStyle.borderBottomStyle;\n      delete componentStyle.borderBottomColor;\n      delete componentStyle.borderTopWidth;\n      delete componentStyle.borderTopStyle;\n      delete componentStyle.borderTopColor;\n      delete componentStyle.borderTopLeftRadius;\n      delete componentStyle.borderTopRightRadius;\n    }\n\n    return (\n      <div ref=\"element\" style={{ ...componentStyle, ...style }} {...props}>\n        {controls}\n        {title}\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default TitleBar;\n"
  },
  {
    "path": "src/TitleBar/macOs/styles/10.11.js",
    "content": "export default {\n  titleBar: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppRegion: 'drag',\n    cursor: 'default',\n    width: '100%',\n    boxSizing: 'border-box',\n    display: 'flex',\n    alignItems: 'center',\n    minHeight: '22px',\n    backgroundImage:\n      '-webkit-linear-gradient(top, #ededed 0, #ededed 1px, #e7e7e7 2px, #d1d1d1 100%)',\n    borderBottomWidth: '1px',\n    borderBottomStyle: 'solid',\n    borderBottomColor: '#afafaf',\n    borderTopWidth: '1px',\n    borderTopStyle: 'solid',\n    borderTopColor: '#f6f6f6',\n    borderTopLeftRadius: '5px',\n    borderTopRightRadius: '5px',\n    paddingLeft: '3px',\n    paddingRight: '3px'\n  },\n\n  titleBarInset: {\n    paddingTop: '11px',\n    paddingBottom: '11px',\n    paddingLeft: '8px',\n    paddingRight: '8px'\n  },\n\n  unfocusedTitleBar: {\n    backgroundImage:\n      '-webkit-linear-gradient(top, #fafafa 0px, #f6f6f6 2px, #f6f6f6 100%)',\n    borderBottomColor: '#d1d1d1'\n  },\n\n  title: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    fontFamily:\n      '-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif',\n    fontSize: '13px',\n    letterSpacing: '0px',\n    color: '#4d4d4d',\n    flexGrow: '1',\n    flexShrink: '1',\n    textAlign: 'center',\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis'\n  },\n\n  unfocusedTitle: {\n    color: '#d3d3d3'\n  }\n};\n"
  },
  {
    "path": "src/TitleBar/windows/Controls/Close.js",
    "content": "import React, { Component } from 'react';\nimport Radium, { getState } from 'radium';\nimport WindowFocus from '../../../windowFocus';\nimport { themeContextTypes } from '../../../style/theme/windows';\nimport { backgroundContextTypes } from '../../../style/background/windows';\nimport { isDarkColor } from '../../../color';\n\nconst styles = {\n  button: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppRegion: 'no-drag',\n    cursor: 'default',\n    width: '46px',\n    height: '100%',\n    lineHeight: 0,\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    display: 'flex',\n\n    ':hover': {\n      transition: 'background-color 0.1s',\n      backgroundColor: '#e81123',\n    },\n\n    ':active': {\n      backgroundColor: '#f1707a',\n    }\n  },\n\n  icon: {\n    width: '10px',\n    height: '10px'\n  }\n};\n\n@WindowFocus()\n@Radium\nclass Close extends Component {\n  static contextTypes = {\n    ...themeContextTypes,\n    ...backgroundContextTypes\n  };\n\n  render() {\n    const { style, isWindowFocused, ...props } = this.props;\n\n    let svgFill = '#000000';\n    if (!isWindowFocused && this.context.theme !== 'dark') {\n      svgFill = 'rgba(0, 0, 0, .4)';\n    }\n\n    let componentStyle = { ...styles.button, ...style };\n    if (this.context.theme === 'dark' || this.context.background && isDarkColor(this.context.background)) {\n      svgFill = '#ffffff';\n      componentStyle = { ...componentStyle, ...styles.buttonColorBackground };\n    }\n\n    if (getState(this.state, null, ':active')) {\n      svgFill = '#000000';\n    } else if (getState(this.state, null, ':hover')) {\n      svgFill = '#ffffff';\n    }\n\n    return (\n      <a\n        title=\"Close\"\n        style={componentStyle}\n        {...props}\n      >\n        <svg x=\"0px\" y=\"0px\" viewBox=\"0 0 10.2 10.2\" style={styles.icon}>\n          <polygon\n            fill={svgFill}\n            points=\"10.2,0.7 9.5,0 5.1,4.4 0.7,0 0,0.7 4.4,5.1 0,9.5 0.7,10.2 5.1,5.8 9.5,10.2 10.2,9.5 5.8,5.1 \"\n          />\n        </svg>\n      </a>\n    );\n  }\n}\n\nexport default Close;\n"
  },
  {
    "path": "src/TitleBar/windows/Controls/Maximize.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport WindowFocus from '../../../windowFocus';\nimport { themeContextTypes } from '../../../style/theme/windows';\nimport { backgroundContextTypes } from '../../../style/background/windows';\nimport { isDarkColor } from '../../../color';\nimport Radium from 'radium'\n\nvar styles = {\n  button: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppRegion: 'no-drag',\n    cursor: 'default',\n    width: '46px',\n    height: '100%',\n    lineHeight: 0,\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    display: 'flex',\n\n    ':hover': {\n      transition: 'background-color 0.1s',\n      backgroundColor: '#e5e5e5'\n    },\n\n    ':active': {\n      backgroundColor: '#cccccc'\n    }\n  },\n\n  buttonColorBackground: {\n    ':hover': {\n      transition: 'background-color 0.1s',\n      backgroundColor: 'rgba(255, 255, 255, .13)'\n    },\n\n    ':active': {\n      backgroundColor: 'rgba(255, 255, 255, .23)'\n    }\n  },\n\n  icon: {\n    width: '10px',\n    height: '10px'\n  }\n};\n\n@WindowFocus()\n@Radium\nclass Maximize extends Component {\n  static contextTypes = {\n    ...themeContextTypes,\n    ...backgroundContextTypes,\n    isMaximized: PropTypes.bool\n  };\n\n  render() {\n    const { style, isWindowFocused, ...props } = this.props;\n\n    delete props.onMaximizeClick;\n    delete props.onRestoreDownClick;\n\n    let svgFill = '#000000';\n    if (!isWindowFocused && this.context.theme !== 'dark') {\n      svgFill = 'rgba(0, 0, 0, .4)';\n    }\n\n    let componentStyle = { ...styles.button, ...style };\n    if (this.context.theme === 'dark' || this.context.background && isDarkColor(this.context.background)) {\n      svgFill = '#ffffff';\n      componentStyle = { ...componentStyle, ...styles.buttonColorBackground };\n    }\n\n    let title = 'Maximize';\n    let icon = (\n      <svg x=\"0px\" y=\"0px\" viewBox=\"0 0 10.2 10.1\" style={styles.icon}>\n        <path\n          fill={svgFill}\n          d=\"M0,0v10.1h10.2V0H0z M9.2,9.2H1.1V1h8.1V9.2z\"\n        />\n      </svg>\n    );\n    let onClick = this.props.onMaximizeClick;\n    if (this.context.isMaximized) {\n      title = 'Restore Down';\n      icon = (\n        <svg x=\"0px\" y=\"0px\" viewBox=\"0 0 10.2 10.2\" style={styles.icon}>\n          <path\n            fill={svgFill}\n            d=\"M2.1,0v2H0v8.1h8.2v-2h2V0H2.1z M7.2,9.2H1.1V3h6.1V9.2z M9.2,7.1h-1V2H3.1V1h6.1V7.1z\"\n          />\n        </svg>\n      );\n      onClick = this.props.onRestoreDownClick;\n    }\n\n    return (\n      <a\n        title={title}\n        style={componentStyle}\n        onClick={onClick}\n        {...props}\n      >\n        {icon}\n      </a>\n    );\n  }\n}\n\nexport default Maximize;\n"
  },
  {
    "path": "src/TitleBar/windows/Controls/Minimize.js",
    "content": "import React, { Component } from 'react';\nimport WindowFocus from '../../../windowFocus';\nimport { themeContextTypes } from '../../../style/theme/windows';\nimport { backgroundContextTypes } from '../../../style/background/windows';\nimport { isDarkColor } from '../../../color';\nimport Radium from 'radium'\n\nvar styles = {\n  button: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppRegion: 'no-drag',\n    appRegion: 'no-drag',\n    cursor: 'default',\n    width: '46px',\n    height: '100%',\n    lineHeight: 0,\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    display: 'flex',\n\n    ':hover': {\n      transition: 'background-color 0.1s',\n      backgroundColor: '#e5e5e5'\n    },\n\n    ':active': {\n      backgroundColor: '#cccccc'\n    }\n  },\n\n  buttonColorBackground: {\n    ':hover': {\n      transition: 'background-color 0.1s',\n      backgroundColor: 'rgba(255, 255, 255, .13)'\n    },\n\n    ':active': {\n      backgroundColor: 'rgba(255, 255, 255, .23)'\n    }\n  },\n\n  icon: {\n    width: '10px',\n    height: '1px'\n  }\n};\n\n@WindowFocus()\n@Radium\nclass Minimize extends Component {\n  static contextTypes = {\n    ...themeContextTypes,\n    ...backgroundContextTypes\n  };\n\n  render() {\n    const { style, isWindowFocused, ...props } = this.props;\n\n    let svgFill = '#000000';\n    if (!isWindowFocused && this.context.theme !== 'dark') {\n      svgFill = 'rgba(0, 0, 0, .4)';\n    }\n\n    let componentStyle = { ...styles.button, ...style };\n    if (this.context.theme === 'dark' || this.context.background && isDarkColor(this.context.background)) {\n      svgFill = '#ffffff';\n      componentStyle = { ...componentStyle, ...styles.buttonColorBackground };\n    }\n\n    return (\n      <a\n        title=\"Minimize\"\n        style={componentStyle}\n        {...props}\n      >\n        <svg x=\"0px\" y=\"0px\" viewBox=\"0 0 10.2 1\" style={styles.icon}>\n          <rect fill={svgFill} width=\"10.2\" height=\"1\"/>\n        </svg>\n      </a>\n    );\n  }\n}\n\nexport default Minimize;\n"
  },
  {
    "path": "src/TitleBar/windows/Controls/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Close from './Close';\nimport Minimize from './Minimize';\nimport Maximize from './Maximize';\n\nvar styles = {\n  controls: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    display: 'flex',\n    height: '32px'\n  }\n};\n\nclass Controls extends Component {\n  static propTypes = {\n    onCloseClick: PropTypes.func,\n    onMinimizeClick: PropTypes.func,\n    onRestoreDownClick: PropTypes.func,\n    onMaximizeClick: PropTypes.func\n  };\n\n  render() {\n    return (\n      <div style={styles.controls}>\n        <Minimize onClick={this.props.onMinimizeClick} ref=\"minimize\" />\n        <Maximize\n          onMaximizeClick={this.props.onMaximizeClick}\n          onRestoreDownClick={this.props.onRestoreDownClick}\n          ref=\"maximize\"\n        />\n        <Close onClick={this.props.onCloseClick} ref=\"close\" />\n      </div>\n    );\n  }\n}\n\nexport default Controls;\n"
  },
  {
    "path": "src/TitleBar/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Background, {\n  backgroundPropTypes\n} from '../../style/background/windows';\nimport { hiddenPropTypes } from '../../style/hidden';\nimport { ColorContext, colorPropTypes } from '../../style/color/windows';\nimport {\n  ThemeContext,\n  themePropTypes,\n  themeContextTypes\n} from '../../style/theme/windows';\nimport WindowFocus from '../../windowFocus';\nimport Controls from './Controls';\nimport styles from './styles/windows10';\n\n@Background((nextProps, prevProps, background) => ({\n  ...nextProps,\n  hasBackground: background\n}))\n@WindowFocus()\n@ThemeContext()\n@ColorContext()\nclass TitleBar extends Component {\n  static propTypes = {\n    ...hiddenPropTypes,\n    ...themePropTypes,\n    ...colorPropTypes,\n    ...backgroundPropTypes,\n    title: PropTypes.node,\n    controls: PropTypes.bool,\n    isMaximized: PropTypes.bool,\n    onCloseClick: PropTypes.func,\n    onMinimizeClick: PropTypes.func,\n    onMaximizeClick: PropTypes.func,\n    onRestoreDownClick: PropTypes.func\n  };\n\n  static childContextTypes = {\n    isMaximized: PropTypes.bool\n  };\n\n  static contextTypes = {\n    ...themeContextTypes\n  };\n\n  getChildContext() {\n    return {\n      isMaximized: this.props.isMaximized\n    };\n  }\n\n  render() {\n    const {\n      children,\n      style,\n      controls,\n      title,\n      isWindowFocused,\n      hasBackground,\n      hidden,\n      ...props\n    } = this.props;\n\n    delete props.isMaximized;\n    delete props.onCloseClick;\n    delete props.onMinimizeClick;\n    delete props.onMaximizeClick;\n    delete props.onRestoreDownClick;\n\n    let componentStyle = { ...styles.titleBar, ...style };\n    let titleStyle = styles.title;\n\n    if (!isWindowFocused && this.context.theme !== 'dark') {\n      titleStyle = { ...titleStyle, ...styles.unfocusedTitle };\n    }\n\n    if (this.context.theme === 'dark') {\n      titleStyle = { ...titleStyle, ...styles.titleDark };\n    }\n\n    componentStyle = {\n      ...componentStyle,\n      visibility: !hidden ? 'visible' : 'hidden',\n      display: !hidden ? 'flex' : 'none'\n    };\n\n    if (this.context.theme === 'dark') {\n      componentStyle = { ...componentStyle, ...styles.titleBarDark };\n    }\n\n    const controlsComponent = !controls || <Controls {...this.props} />;\n    const titleComponent = !title || (\n      <div style={titleStyle}>{this.props.title}</div>\n    );\n\n    if (hasBackground) delete componentStyle.backgroundColor;\n\n    return (\n      <div ref=\"element\" style={componentStyle} {...props}>\n        {titleComponent}\n        {controlsComponent}\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default TitleBar;\n"
  },
  {
    "path": "src/TitleBar/windows/styles/windows10.js",
    "content": "export default {\n  titleBar: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppRegion: 'drag',\n    appRegion: 'drag',\n    cursor: 'default',\n    display: 'flex',\n    alignItems: 'center',\n    width: '100%',\n    height: '31px',\n    backgroundColor: '#ffffff'\n  },\n\n  titleBarDark: {\n    backgroundColor: '#171717'\n  },\n\n  title: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    paddingLeft: '12px',\n    fontFamily: '\"Segoe UI\", \"Arial\"',\n    fontSize: '12px',\n    color: '#000000',\n    flex: 1\n  },\n\n  titleDark: {\n    color: '#ffffff'\n  },\n\n  unfocusedTitle: {\n    color: '#a9a9a9'\n  }\n};\n"
  },
  {
    "path": "src/Toolbar/macOs/Nav/Item/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Text from '../../../../Text/macOs';\n\nconst styles = {\n  container: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    WebkitAppRegion: 'no-drag',\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    marginTop: '1px',\n    marginLeft: '5px',\n    marginRight: '5px',\n    width: '64px'\n  },\n  iconContainer: {\n    height: '25px',\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    alignContent: 'center',\n    marginBottom: '1px'\n  }\n};\n\nclass Item extends Component {\n  static propTypes = {\n    titel: PropTypes.string,\n    icon: PropTypes.oneOfType([PropTypes.element, PropTypes.array]),\n    selected: PropTypes.bool,\n    onClick: PropTypes.func\n  };\n\n  render() {\n    const { title, icon, style, selected, ...props } = this.props;\n\n    return (\n      <div\n        className={\n          '_reactDesktop-Toolbar-Nav-Item-SVG' + (selected ? ' _selected' : '')\n        }\n      >\n        <a style={{ ...styles.container, ...style }} {...props}>\n          <div style={styles.iconContainer}>{icon}</div>\n          <Text size=\"11\" color=\"#1e1c1e\">\n            {title}\n          </Text>\n        </a>\n      </div>\n    );\n  }\n}\n\nexport default Item;\n"
  },
  {
    "path": "src/Toolbar/macOs/Nav/index.js",
    "content": "import React, { Component } from 'react';\nimport { Style } from 'radium';\nimport Dimension, { dimensionPropTypes } from '../../../style/dimension';\nimport WindowFocus from '../../../windowFocus';\n\nconst styles = {\n  nav: {\n    display: 'flex',\n    alignItems: 'center'\n  }\n};\n\n@Dimension({ height: '54px' })\n@WindowFocus()\nclass Nav extends Component {\n  static propTypes = {\n    ...dimensionPropTypes\n  };\n\n  render() {\n    const { children, style, isWindowFocused, ...props } = this.props;\n    let componentStyle = { ...styles.nav };\n\n    let fillOpacity = '.8';\n    if (!isWindowFocused) {\n      componentStyle.opacity = '.5';\n      fillOpacity = '.3';\n    }\n\n    return (\n      <div style={{ ...componentStyle, ...style }} {...props}>\n        <Style\n          scopeSelector=\"._reactDesktop-Toolbar-Nav-Item-SVG\"\n          rules={{\n            'a svg *': {\n              fill: '#363336',\n              fillOpacity\n            },\n            'a:active svg *': {\n              fill: '#1e1c1e',\n              fillOpacity: '.9'\n            }\n          }}\n        />\n        <Style\n          scopeSelector=\"._reactDesktop-Toolbar-Nav-Item-SVG._selected\"\n          rules={{\n            'a svg *': {\n              fill: '#007bfa',\n              fillOpacity: '1'\n            },\n            'a:active svg *': {\n              fill: '#003dd6',\n              fillOpacity: '1'\n            }\n          }}\n        />\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default Nav;\n"
  },
  {
    "path": "src/Toolbar/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport Alignment, { alignmentPropTypes } from '../../style/alignment';\n\nvar styles = {\n  toolbar: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center'\n  }\n};\n\n@Alignment()\n@Dimension({ width: '100%' })\nclass Toolbar extends Component {\n  static propTypes = {\n    ...alignmentPropTypes,\n    ...dimensionPropTypes\n  };\n\n  static childContextTypes = {\n    titlebarChild: PropTypes.bool\n  };\n\n  getChildContext() {\n    return {\n      titlebarChild: true\n    };\n  }\n\n  render() {\n    const { style, ...props } = this.props;\n\n    return (\n      <div style={{ ...styles.toolbar, ...style }} {...props}>\n        {this.props.children}\n      </div>\n    );\n  }\n}\n\nexport default Toolbar;\n"
  },
  {
    "path": "src/ValueRef.js",
    "content": "import React, { Component } from 'react';\nimport { findDOMNode } from 'react-dom';\n\nfunction ValueRef(ComposedComponent) {\n  return class extends Component {\n    get value() {\n      return findDOMNode(this).getElementsByTagName('input')[0].value;\n    }\n\n    set value(value) {\n      findDOMNode(this).getElementsByTagName('input')[0].value = value;\n    }\n\n    render() {\n      return <ComposedComponent {...this.props}/>;\n    }\n  }\n}\n\nexport default function(...options) {\n  if (options.length === 1 && typeof options[0] === 'function') return ValueRef.apply(null, [options[0]]);\n  return ValueRef.bind(options);\n}\n"
  },
  {
    "path": "src/View/macOs/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Width, { widthPropTypes } from '../../style/width';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Padding, { paddingPropTypes } from '../../style/padding';\nimport Alignment, { alignmentPropTypes } from '../../style/alignment';\nimport Background, { backgroundPropTypes } from '../../style/background/macOs';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\n\nvar styles = {\n  display: 'flex',\n  position: 'relative'\n};\n\n@Width()\n@Dimension()\n@Alignment()\n@Margin()\n@Padding()\n@Background()\n@Hidden()\nclass View extends Component {\n  static propTypes = {\n    ...alignmentPropTypes,\n    ...widthPropTypes,\n    ...marginPropTypes,\n    ...paddingPropTypes,\n    ...backgroundPropTypes,\n    ...hiddenPropTypes,\n    ...dimensionPropTypes,\n    direction: PropTypes.string,\n    layout: PropTypes.string\n  };\n\n  static defaultProps = {\n    layout: 'horizontal'\n  };\n\n  render() {\n    let { horizontalAlignment, children, style, direction, layout, ...props } = this.props;\n    let componentStyle = { ...styles, ...style };\n\n    if (direction) {\n      // direction will be deprecated on v0.3 and a warning will be shown\n      layout = direction === 'column' ? 'vertical' : 'horizontal';\n    }\n\n    if (layout === 'vertical') {\n      componentStyle.flexDirection = 'column';\n      if (horizontalAlignment) {\n        switch(horizontalAlignment) {\n        case 'center': componentStyle.alignItems = 'center'; break;\n        case 'left': componentStyle.alignItems = 'flex-start'; break;\n        case 'right': componentStyle.alignItems = 'flex-end'; break;\n        }\n      }\n    } else {\n      if (horizontalAlignment) {\n        switch(horizontalAlignment) {\n        case 'center': componentStyle.justifyContent = 'center'; break;\n        case 'left': componentStyle.justifyContent = 'flex-start'; break;\n        case 'right': componentStyle.justifyContent = 'flex-end'; break;\n        }\n      }\n    }\n\n    return (\n      <div\n        style={componentStyle}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default View;\n"
  },
  {
    "path": "src/View/windows/index.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Width, { widthPropTypes } from '../../style/width';\nimport Margin, { marginPropTypes } from '../../style/margin';\nimport Padding, { paddingPropTypes } from '../../style/padding';\nimport Alignment, { alignmentPropTypes } from '../../style/alignment';\nimport Background, { backgroundContextTypes } from '../../style/background/windows';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport { ColorContext } from '../../style/color/windows';\nimport { ThemeContext } from '../../style/theme/windows';\n\nvar styles = {\n  display: 'flex',\n  position: 'relative'\n};\n\n@Width()\n@Dimension()\n@Alignment()\n@Margin()\n@Padding()\n@Background()\n@Hidden()\n@ColorContext()\n@ThemeContext()\nclass View extends Component {\n  static propTypes = {\n    ...alignmentPropTypes,\n    ...widthPropTypes,\n    ...marginPropTypes,\n    ...paddingPropTypes,\n    ...backgroundContextTypes,\n    ...hiddenPropTypes,\n    ...dimensionPropTypes,\n    direction: PropTypes.string,\n    layout: PropTypes.string\n  };\n\n  static defaultProps = {\n    layout: 'horizontal'\n  };\n\n  render() {\n    let { horizontalAlignment, children, style, direction, layout, ...props } = this.props;\n\n    let componentStyle = { ...styles, ...style };\n\n    if (direction) {\n      // direction will be deprecated on v0.3 and a warning will be shown\n      layout = direction === 'column' ? 'vertical' : 'horizontal';\n    }\n\n    if (layout === 'vertical') {\n      componentStyle.flexDirection = 'column';\n      if (horizontalAlignment) {\n        switch(horizontalAlignment) {\n        case 'center': componentStyle.alignItems = 'center'; break;\n        case 'left': componentStyle.alignItems = 'flex-start'; break;\n        case 'right': componentStyle.alignItems = 'flex-end'; break;\n        }\n      }\n    } else {\n      if (horizontalAlignment) {\n        switch(horizontalAlignment) {\n        case 'center': componentStyle.justifyContent = 'center'; break;\n        case 'left': componentStyle.justifyContent = 'flex-start'; break;\n        case 'right': componentStyle.justifyContent = 'flex-end'; break;\n        }\n      }\n    }\n\n    return (\n      <div\n        style={componentStyle}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n}\n\nexport default View;\n"
  },
  {
    "path": "src/Window/macOs/index.js",
    "content": "import React, { Component, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport TitleBar from '../../TitleBar/macOs';\nimport View from '../../View/macOs';\nimport styles from './styles/10.11';\nimport WindowFocus from '../../windowFocus';\nimport Padding, {\n  paddingPropTypes,\n  removePaddingProps\n} from '../../style/padding';\nimport Background, {\n  backgroundPropTypes,\n  removeBackgroundProps\n} from '../../style/background/macOs';\nimport Alignment, { alignmentPropTypes } from '../../style/alignment';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\n\n@WindowFocus()\n@Alignment()\n@Hidden()\n@Dimension({ width: '100vw', height: '100vh' })\nclass Window extends Component {\n  static propTypes = {\n    ...paddingPropTypes,\n    ...backgroundPropTypes,\n    ...alignmentPropTypes,\n    ...hiddenPropTypes,\n    ...dimensionPropTypes,\n    chrome: PropTypes.bool\n  };\n\n  filterChildren() {\n    let titleBar = '';\n    let otherChildren = [];\n    Children.map(this.props.children, element => {\n      const TitleBarEl = <TitleBar />;\n      if (element.type === TitleBarEl.type) {\n        titleBar = element;\n      } else {\n        otherChildren = [...otherChildren, element];\n      }\n    });\n\n    return [titleBar, ...otherChildren];\n  }\n\n  render() {\n    let { style, chrome, isWindowFocused, ...props } = this.props;\n\n    let componentStyle = { ...styles.window, ...style };\n    if (chrome) {\n      componentStyle = {\n        ...componentStyle,\n        ...styles.chrome\n      };\n\n      if (!isWindowFocused) {\n        componentStyle = { ...componentStyle, ...styles.unfocused };\n      }\n    }\n\n    const [titleBar, ...children] = this.filterChildren();\n\n    let contentStyle = styles.content;\n    if (chrome) {\n      contentStyle = {\n        ...contentStyle,\n        borderBottomLeftRadius: '4px',\n        borderBottomRightRadius: '4px'\n      };\n    }\n\n    let content = Background(\n      Padding(<View style={contentStyle}>{children}</View>, props),\n      props\n    );\n    props = removePaddingProps(props);\n    props = removeBackgroundProps(props);\n\n    return (\n      <div style={componentStyle} {...props}>\n        {titleBar}\n        {content}\n      </div>\n    );\n  }\n}\n\nexport default Window;\n"
  },
  {
    "path": "src/Window/macOs/styles/10.11.js",
    "content": "export default {\n  window: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    backgroundColor: '#ececec',\n    display: 'flex',\n    flexDirection: 'column',\n    boxSizing: 'border-box'\n  },\n\n  chrome: {\n    borderTopLeftRadius: '4px',\n    borderTopRightRadius: '4px',\n    borderBottomLeftRadius: '4px',\n    borderBottomRightRadius: '4px',\n    boxShadow:\n    '0 0 1px rgba(0, 0, 0, .26), ' + // Border\n    '0 0 5px rgba(0, 0, 0, .16), ' + // Small Glow\n    '0 8px 10px rgba(0, 0, 0, .06), ' + // Bottom Glow\n    '0 25px 65px rgba(0, 0, 0, .48) ' // Big shadow\n  },\n\n  unfocused: {\n    boxShadow:\n    '0 0 1px rgba(0, 0, 0, .31), ' + // Border\n    '0 0 5px rgba(0, 0, 0, .18), ' + // Small Glow\n    '0 8px 50px rgba(0, 0, 0, .3) ' // Big shadow\n  },\n\n  content: {\n    flex: 1,\n    padding: '24px 20px 20px 20px'\n  }\n};\n"
  },
  {
    "path": "src/Window/windows/index.js",
    "content": "import React, { Component, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport TitleBar from '../../TitleBar/windows';\nimport View from '../../View/windows';\nimport styles from './styles/windows10';\nimport WindowFocus from '../../windowFocus';\nimport Padding, {\n  paddingPropTypes,\n  removePaddingProps\n} from '../../style/padding';\nimport Alignment, { alignmentPropTypes } from '../../style/alignment';\nimport Hidden, { hiddenPropTypes } from '../../style/hidden';\nimport Dimension, { dimensionPropTypes } from '../../style/dimension';\nimport {\n  ColorContext,\n  colorPropTypes,\n  colorContextTypes\n} from '../../style/color/windows';\nimport {\n  ThemeContext,\n  themePropTypes,\n  themeContextTypes\n} from '../../style/theme/windows';\n\n@WindowFocus()\n@Alignment()\n@Hidden()\n@Dimension({ width: '100vw', height: '100vh' })\n@ColorContext()\n@ThemeContext()\nclass Window extends Component {\n  static propTypes = {\n    ...colorPropTypes,\n    ...themePropTypes,\n    ...paddingPropTypes,\n    ...alignmentPropTypes,\n    ...hiddenPropTypes,\n    ...dimensionPropTypes,\n    chrome: PropTypes.bool\n  };\n\n  static contextTypes = {\n    ...colorContextTypes,\n    ...themeContextTypes\n  };\n\n  filterChildren() {\n    let titleBar = '';\n    let otherChildren = [];\n    Children.map(this.props.children, element => {\n      const TitleBarEl = <TitleBar />;\n      if (element.type === TitleBarEl.type) {\n        titleBar = element;\n      } else {\n        otherChildren = [...otherChildren, element];\n      }\n    });\n\n    return [titleBar, ...otherChildren];\n  }\n\n  render() {\n    let { style, background, chrome, isWindowFocused, ...props } = this.props;\n\n    let componentStyle = { ...styles.window, ...style };\n    if (chrome) {\n      componentStyle = {\n        ...componentStyle,\n        ...styles.chrome,\n        borderColor: this.context.color\n      };\n\n      if (!isWindowFocused) {\n        componentStyle = { ...componentStyle, ...styles.unfocused };\n      }\n    }\n\n    if (this.context.theme === 'dark') {\n      componentStyle = { ...componentStyle, ...styles.windowDark };\n    }\n\n    if (background) {\n      componentStyle = { ...componentStyle, backgroundColor: background };\n    }\n\n    const [titleBar, ...children] = this.filterChildren();\n\n    let content = Padding(\n      <View ref=\"content\" style={styles.content}>\n        {children}\n      </View>,\n      this.props\n    );\n\n    props = removePaddingProps(props);\n    return (\n      <div style={componentStyle} {...props}>\n        {titleBar}\n        {content}\n      </div>\n    );\n  }\n}\n\nexport default Window;\n"
  },
  {
    "path": "src/Window/windows/styles/windows10.js",
    "content": "export default {\n  window: {\n    WebkitUserSelect: 'none',\n    userSelect: 'none',\n    cursor: 'default',\n    backgroundColor: '#ffffff',\n    display: 'flex',\n    flexDirection: 'column',\n    padding: 'none',\n    boxSizing: 'border-box'\n  },\n\n  windowDark: {\n    backgroundColor: '#171717'\n  },\n\n  chrome: {\n    borderWidth: '1px',\n    borderStyle: 'solid',\n    boxShadow: '0 2px 11px 3px rgba(0, 0, 0, .2)'\n  },\n\n  unfocused: {\n    borderColor: '#aaaaaa'\n  },\n\n  content: {\n    flexGrow: '1',\n    display: 'flex'\n  }\n};\n"
  },
  {
    "path": "src/animation/bezierEasing.js",
    "content": "/**\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n *\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\n * Usage:\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\n *\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A(aA1, aA2) {\n  return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1, aA2) {\n  return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1) {\n  return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT, aA1, aA2) {\n  return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT, aA1, aA2) {\n  return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(aX, aA, aB, mX1, mX2) {\n  var currentX, currentT, i = 0;\n  do {\n    currentT = aA + (aB - aA) / 2.0;\n    currentX = calcBezier(currentT, mX1, mX2) - aX;\n    if (currentX > 0.0) {\n      aB = currentT;\n    } else {\n      aA = currentT;\n    }\n  } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n  return currentT;\n}\n\nfunction newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n  for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n    var currentSlope = getSlope(aGuessT, mX1, mX2);\n    if (currentSlope === 0.0) return aGuessT;\n    var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n    aGuessT -= currentX / currentSlope;\n  }\n  return aGuessT;\n}\n\n/**\n * points is an array of [ mX1, mY1, mX2, mY2 ]\n */\nfunction BezierEasing(points, b, c, d) {\n  if (arguments.length === 4) {\n    return new BezierEasing([points, b, c, d]);\n  }\n  if (!(this instanceof BezierEasing)) return new BezierEasing(points);\n\n  if (!points || points.length !== 4) {\n    throw new Error('BezierEasing: points must contains 4 values');\n  }\n  for (var i = 0; i < 4; ++i) {\n    if (typeof points[i] !== 'number' || isNaN(points[i]) || !isFinite(points[i])) {\n      throw new Error('BezierEasing: points should be integers.');\n    }\n  }\n  if (points[0] < 0 || points[0] > 1 || points[2] < 0 || points[2] > 1) {\n    throw new Error('BezierEasing x values must be in [0, 1] range.');\n  }\n\n  this._str = 'BezierEasing(' + points + ')';\n  this._css = 'cubic-bezier(' + points + ')';\n  this._p = points;\n  this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n  this._precomputed = false;\n\n  this.get = this.get.bind(this);\n}\n\nBezierEasing.prototype = {\n\n  get: function (x) {\n    var mX1 = this._p[0],\n      mY1 = this._p[1],\n      mX2 = this._p[2],\n      mY2 = this._p[3];\n    if (!this._precomputed) this._precompute();\n    if (mX1 === mY1 && mX2 === mY2) return x; // linear\n    // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n    if (x === 0) return 0;\n    if (x === 1) return 1;\n    return calcBezier(this._getTForX(x), mY1, mY2);\n  },\n\n  getPoints: function () {\n    return this._p;\n  },\n\n  toString: function () {\n    return this._str;\n  },\n\n  toCSS: function () {\n    return this._css;\n  },\n\n  // Private part\n\n  _precompute: function () {\n    var mX1 = this._p[0],\n      mY1 = this._p[1],\n      mX2 = this._p[2],\n      mY2 = this._p[3];\n    this._precomputed = true;\n    if (mX1 !== mY1 || mX2 !== mY2)\n      this._calcSampleValues();\n  },\n\n  _calcSampleValues: function () {\n    var mX1 = this._p[0],\n      mX2 = this._p[2];\n    for (var i = 0; i < kSplineTableSize; ++i) {\n      this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n    }\n  },\n\n  /**\n   * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\n   */\n  _getTForX: function (aX) {\n    var mX1 = this._p[0],\n      mX2 = this._p[2],\n      mSampleValues = this._mSampleValues;\n\n    var intervalStart = 0.0;\n    var currentSample = 1;\n    var lastSample = kSplineTableSize - 1;\n\n    for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n      intervalStart += kSampleStepSize;\n    }\n    --currentSample;\n\n    // Interpolate to provide an initial guess for t\n    var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n    var guessForT = intervalStart + dist * kSampleStepSize;\n\n    var initialSlope = getSlope(guessForT, mX1, mX2);\n    if (initialSlope >= NEWTON_MIN_SLOPE) {\n      return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n    } else if (initialSlope === 0.0) {\n      return guessForT;\n    } else {\n      return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n    }\n  }\n};\n\n// CSS mapping\nBezierEasing.css = {\n  'ease': BezierEasing.ease = BezierEasing(0.25, 0.1, 0.25, 1.0),\n  'linear': BezierEasing.linear = BezierEasing(0.00, 0.0, 1.00, 1.0),\n  'ease-in': BezierEasing.easeIn = BezierEasing(0.42, 0.0, 1.00, 1.0),\n  'ease-out': BezierEasing.easeOut = BezierEasing(0.00, 0.0, 0.58, 1.0),\n  'ease-in-out': BezierEasing.easeInOut = BezierEasing(0.42, 0.0, 0.58, 1.0)\n};\n\nmodule.exports = BezierEasing;\n"
  },
  {
    "path": "src/color.js",
    "content": "function colorLuminance(hex, lum) {\n  // validate hex string\n  hex = String(hex).replace(/[^0-9a-f]/gi, '');\n  if (hex.length < 6) {\n    hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n  }\n  lum = lum || 0;\n\n  // convert to decimal and change luminosity\n  var rgb = '#', c, i;\n  for (i = 0; i < 3; i++) {\n    c = parseInt(hex.substr(i * 2, 2), 16);\n    c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\n    rgb += (`00${c}`).substr(c.length);\n  }\n\n  return rgb;\n}\n\nexport function hexToRgb(hex) {\n  let result;\n  if (hex.match(/^#.{3}$/)) {\n    result = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i.exec(hex);\n    result[1] += result[1];\n    result[2] += result[2];\n    result[3] += result[3];\n  } else {\n    result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  }\n  return result ? {\n    r: parseInt(result[1], 16),\n    g: parseInt(result[2], 16),\n    b: parseInt(result[3], 16)\n  } : null;\n}\n\nexport function transparentize(color, amount) {\n  const c = hexToRgb(color);\n  return `rgba(${c.r}, ${c.g}, ${c.b}, ${Math.round((1 - amount) * 1000) / 1000})`;\n}\n\nexport function darkenColor(color, percent) {\n  return colorLuminance(color, -percent);\n}\n\nexport function ligthenColor(color) {\n  return color;\n}\n\nexport function convertColor(color) {\n  var colors = {\n    'aliceblue':'#f0f8ff','antiquewhite':'#faebd7','aqua':'#00ffff','aquamarine':'#7fffd4','azure':'#f0ffff',\n    'beige':'#f5f5dc','bisque':'#ffe4c4','black':'#000000','blanchedalmond':'#ffebcd','blue':'#0000ff','blueviolet':'#8a2be2','brown':'#a52a2a','burlywood':'#deb887',\n    'cadetblue':'#5f9ea0','chartreuse':'#7fff00','chocolate':'#d2691e','coral':'#ff7f50','cornflowerblue':'#6495ed','cornsilk':'#fff8dc','crimson':'#dc143c','cyan':'#00ffff',\n    'darkblue':'#00008b','darkcyan':'#008b8b','darkgoldenrod':'#b8860b','darkgray':'#a9a9a9','darkgreen':'#006400','darkkhaki':'#bdb76b','darkmagenta':'#8b008b','darkolivegreen':'#556b2f',\n    'darkorange':'#ff8c00','darkorchid':'#9932cc','darkred':'#8b0000','darksalmon':'#e9967a','darkseagreen':'#8fbc8f','darkslateblue':'#483d8b','darkslategray':'#2f4f4f','darkturquoise':'#00ced1',\n    'darkviolet':'#9400d3','deeppink':'#ff1493','deepskyblue':'#00bfff','dimgray':'#696969','dodgerblue':'#1e90ff',\n    'firebrick':'#b22222','floralwhite':'#fffaf0','forestgreen':'#228b22','fuchsia':'#ff00ff',\n    'gainsboro':'#dcdcdc','ghostwhite':'#f8f8ff','gold':'#ffd700','goldenrod':'#daa520','gray':'#808080','green':'#008000','greenyellow':'#adff2f',\n    'honeydew':'#f0fff0','hotpink':'#ff69b4',\n    'indianred ':'#cd5c5c','indigo':'#4b0082','ivory':'#fffff0','khaki':'#f0e68c',\n    'lavender':'#e6e6fa','lavenderblush':'#fff0f5','lawngreen':'#7cfc00','lemonchiffon':'#fffacd','lightblue':'#add8e6','lightcoral':'#f08080','lightcyan':'#e0ffff','lightgoldenrodyellow':'#fafad2',\n    'lightgrey':'#d3d3d3','lightgreen':'#90ee90','lightpink':'#ffb6c1','lightsalmon':'#ffa07a','lightseagreen':'#20b2aa','lightskyblue':'#87cefa','lightslategray':'#778899','lightsteelblue':'#b0c4de',\n    'lightyellow':'#ffffe0','lime':'#00ff00','limegreen':'#32cd32','linen':'#faf0e6',\n    'magenta':'#ff00ff','maroon':'#800000','mediumaquamarine':'#66cdaa','mediumblue':'#0000cd','mediumorchid':'#ba55d3','mediumpurple':'#9370d8','mediumseagreen':'#3cb371','mediumslateblue':'#7b68ee',\n    'mediumspringgreen':'#00fa9a','mediumturquoise':'#48d1cc','mediumvioletred':'#c71585','midnightblue':'#191970','mintcream':'#f5fffa','mistyrose':'#ffe4e1','moccasin':'#ffe4b5',\n    'navajowhite':'#ffdead','navy':'#000080',\n    'oldlace':'#fdf5e6','olive':'#808000','olivedrab':'#6b8e23','orange':'#ffa500','orangered':'#ff4500','orchid':'#da70d6',\n    'palegoldenrod':'#eee8aa','palegreen':'#98fb98','paleturquoise':'#afeeee','palevioletred':'#d87093','papayawhip':'#ffefd5','peachpuff':'#ffdab9','peru':'#cd853f','pink':'#ffc0cb','plum':'#dda0dd','powderblue':'#b0e0e6','purple':'#800080',\n    'red':'#ff0000','rosybrown':'#bc8f8f','royalblue':'#4169e1',\n    'saddlebrown':'#8b4513','salmon':'#fa8072','sandybrown':'#f4a460','seagreen':'#2e8b57','seashell':'#fff5ee','sienna':'#a0522d','silver':'#c0c0c0','skyblue':'#87ceeb','slateblue':'#6a5acd','slategray':'#708090','snow':'#fffafa','springgreen':'#00ff7f','steelblue':'#4682b4',\n    'tan':'#d2b48c','teal':'#008080','thistle':'#d8bfd8','tomato':'#ff6347','turquoise':'#40e0d0',\n    'violet':'#ee82ee',\n    'wheat':'#f5deb3','white':'#ffffff','whitesmoke':'#f5f5f5',\n    'yellow':'#ffff00','yellowgreen':'#9acd32'\n  };\n\n  if (typeof color === 'string' && typeof colors[color.toLowerCase()] != 'undefined') {\n    return colors[color.toLowerCase()];\n  }\n  return color;\n}\n\nexport function isDarkColor(color) {\n  const c = convertColor(color).substring(1);      // strip #\n  const rgb = parseInt(c, 16);   // convert rrggbb to decimal\n  const r = (rgb >> 16) & 0xff;  // extract red\n  const g = (rgb >> 8) & 0xff;  // extract green\n  const b = (rgb >> 0) & 0xff;  // extract blue\n\n  const luma = 0.2126 * r + 0.7152 * g + 0.0722 * b; // per ITU-R BT.709\n\n  return luma < 40;\n}\n"
  },
  {
    "path": "src/monitor.js",
    "content": "if (typeof window !== 'undefined') {\n  window.addEventListener('focus', windowFocus);\n  window.addEventListener('blur', windowBlur);\n}\n\nlet isWindowFocused = true;\n\nif (typeof document === 'object' && typeof document.hasFocus === 'function') {\n  isWindowFocused = document.hasFocus();\n}\n\nfunction windowFocus() {\n  isWindowFocused = true;\n}\n\nfunction windowBlur() {\n  isWindowFocused = false;\n}\n\nexport function windowIsFocused() {\n  return isWindowFocused;\n}\n"
  },
  {
    "path": "src/os.js",
    "content": "export const MACOS = 'macOs';\nexport const WINDOWS = 'windows';\n\nexport default function os() {\n  // explicitly set these to avoid issues\n  const w = window || null;\n  const n = navigator || null;\n  const p = process || (w && w.process) || null;\n\n  // via node\n  if (p && p.platform) {\n    if (p.platform === 'darwin') {\n      return MACOS;\n    }\n    if (p.platform.includes('win')) {\n      return WINDOWS;\n    }\n  }\n\n  // via user agent\n  if (n && n.userAgent) {\n    if (n.userAgent.includes('Macintosh')) {\n      return MACOS;\n    }\n    if (n.userAgent.includes('Windows')) {\n      return WINDOWS;\n    }\n  }\n\n  // default to macOs\n  return MACOS;\n}\n"
  },
  {
    "path": "src/placeholderStyle.js",
    "content": "import React, { Component } from 'react';\nimport { Style } from 'radium';\n\nfunction generateUniqueId() {\n  return Math.floor((Math.random() * 10000) + 1) + '-' + +Math.floor((Math.random() * 10000) + 1) + '-' + +Math.floor((Math.random() * 10000) + 1) + '-' + +Math.floor((Math.random() * 10000) + 1) + '-' + +Math.floor((Math.random() * 10000) + 1) + '-' + +Math.floor((Math.random() * 10000) + 1) + '-' + +Math.floor((Math.random() * 10000) + 1) + '-' +\n    Math.floor((Math.random() * 100000000000000));\n}\n\nfunction mapRules(selector, style) {\n  let styles = { 0: style };\n  if (style[':hover']) {\n    styles = { ...styles, ':hover': style[':hover'] };\n    delete styles[0][':hover'];\n  }\n\n  if (style[':active']) {\n    styles = { ...styles, ':active': style[':active'] };\n    delete styles[0][':active'];\n  }\n\n  if (style[':focus']) {\n    styles = { ...styles, ':focus': style[':focus'] };\n    delete styles[0][':focus'];\n  }\n\n  let rules = {};\n\n  for (var prop in styles) {\n    if (styles.hasOwnProperty(prop)) {\n      rules[`${selector} input${prop !== '0' ? prop : ''}::-webkit-input-placeholder`] = styles[prop];\n      rules[`${selector} input${prop !== '0' ? prop : ''}::-moz-placeholder`] = styles[prop];\n      rules[`${selector} input${prop !== '0' ? prop : ''}:-ms-input-placeholder`] = styles[prop];\n      rules[`${selector} input${prop !== '0' ? prop : ''}:placeholder`] = styles[prop];\n    }\n  }\n\n  return rules;\n}\n\nexport default class extends Component {\n  constructor() {\n    super();\n    this._id = generateUniqueId();\n  }\n\n  render() {\n    const { children, placeholderStyle, ...props } = this.props;\n\n    return (\n      <div data-reactdesktopid={this._id} {...props}>\n        {children}\n        <Style rules={mapRules(`[data-reactdesktopid=\"${this._id}\"]`, placeholderStyle)}/>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/style/alignment.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps } from '../styleHelper';\n\nconst allowedValues = ['left', 'right', 'center'];\n\nexport const alignmentPropTypes = {\n  horizontalAlignment: PropTypes.string,\n  verticalAlignment: PropTypes.string\n};\n\nexport function removeAlignmentProps(props) {\n  return extractProps(props, alignmentPropTypes)[0];\n}\n\nfunction mapAlignmentStyle(key, value, props) {\n  let finalKey, finalValue;\n  if (allowedValues.indexOf(value) === -1) {\n    console.error('Unknown value for ' + key + ': ' + value);\n  } else {\n    let layout = 'horizontal';\n    if (props !== undefined && typeof props.layout !== 'undefined') {\n      layout = props.layout;\n    }\n    if (key === 'horizontalAlignment' && layout === 'horizontal' || key === 'verticalAlignment' && layout === 'vertical') {\n      finalKey = 'justifyContent';\n      switch (value) {\n      case 'center':\n        finalValue = 'center';\n        break;\n      case 'left':\n        finalValue = 'flex-start';\n        break;\n      case 'right':\n        finalValue = 'flex-end';\n        break;\n      }\n    } else if (key === 'verticalAlignment' && layout === 'horizontal' || key === 'horizontalAlignment' && layout === 'vertical') {\n      finalKey = 'alignItems';\n      switch (value) {\n      case 'center':\n        finalValue = 'center';\n        break;\n      case 'left':\n        finalValue = 'flex-start';\n        break;\n      case 'right':\n        finalValue = 'flex-end';\n        break;\n      }\n    }\n  }\n  return [finalKey, finalValue];\n}\n\nexport default function(...options) {\n  return styleHelper(options, alignmentPropTypes, mapAlignmentStyle);\n}\n"
  },
  {
    "path": "src/style/background/macOs.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps } from '../../styleHelper';\n\nexport const backgroundPropTypes = {\n  background: PropTypes.string\n};\n\nexport function removeBackgroundProps(props) {\n  return extractProps(props, backgroundPropTypes)[0];\n}\n\nexport default function(...options) {\n  return styleHelper(options, backgroundPropTypes);\n}\n"
  },
  {
    "path": "src/style/background/windows.js",
    "content": "import React, { Component, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport styleHelper, { extractProps } from '../../styleHelper';\nimport { ColorContext, colorContextTypes } from '../../style/color/windows';\nimport Radium from 'radium';\n\nexport const backgroundPropTypes = {\n  background: PropTypes.oneOfType([PropTypes.string, PropTypes.bool])\n};\n\nexport const backgroundContextTypes = {\n  background: PropTypes.oneOfType([PropTypes.string, PropTypes.bool])\n};\n\nexport function removeBackgroundProps(props) {\n  return extractProps(props, backgroundPropTypes)[0];\n}\n\nexport default function(...options) {\n  if (options[0] && isValidElement(options[0])) {\n    @ColorContext(true)\n    @Radium\n    class BackgroundElement extends Component {\n      static contextTypes = { ...colorContextTypes };\n\n      render () {\n        const props = { ...options[1] };\n        if (typeof props.background === 'boolean') {\n          if (!props.background) delete props.background;\n          else if (this.context.color) props.background = this.context.color;\n          else delete props.background;\n        }\n\n        options[1] = { ...props };\n        return styleHelper(options, backgroundPropTypes);\n      }\n    }\n    return <BackgroundElement />;\n  }\n\n  return function (WrappedComponent) {\n    const ComposedComponent = styleHelper(options, backgroundPropTypes, null, null, options[0])(WrappedComponent);\n    @ColorContext(true)\n    class BackgroundComponent extends Component {\n      static contextTypes = { ...colorContextTypes };\n\n      render() {\n        const props = { ...this.props };\n        if (typeof props.background === 'boolean') {\n          if (!props.background) delete props.background;\n          else {\n            props.background = this.context.color;\n          }\n        }\n        return <ComposedComponent {...props}/>;\n      }\n    }\n    return BackgroundComponent;\n  };\n}\n"
  },
  {
    "path": "src/style/color/windows.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { applyDefaultProps } from '../../styleHelper';\n\nexport const colorPropTypes = {\n  color: PropTypes.oneOfType([PropTypes.string, PropTypes.bool])\n};\n\nexport const colorContextTypes = {\n  color: PropTypes.oneOfType([PropTypes.string, PropTypes.bool])\n};\n\nconst applyColorProps = (props, context) => applyDefaultProps(props, context, { color: '#0063ae' });\n\nexport function ColorContext(preserveProperty = false) {\n  return function (ComposedComponent) {\n    return class extends Component {\n      static propTypes = { ...colorPropTypes };\n      static contextTypes = { ...colorContextTypes };\n      static childContextTypes = { ...colorContextTypes };\n\n      getChildContext() {\n        return {\n          color: applyColorProps(this.props, this.context).color\n        };\n      }\n\n      render() {\n        const { ...props } = this.props;\n        if (!preserveProperty) delete props.color;\n        return (\n          <ComposedComponent {...props}/>\n        );\n      }\n    };\n  }\n}\n"
  },
  {
    "path": "src/style/dimension.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps, parseDimension } from '../styleHelper';\n\nexport const dimensionPropTypes = {\n  width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  height: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\n\nexport function removeDimensionProps(props) {\n  return extractProps(props, dimensionPropTypes)[0];\n}\n\nfunction mapDimensionStyle(key, value) {\n  return [key, parseDimension(value)];\n}\n\nexport default function(...options) {\n  return styleHelper(options, dimensionPropTypes, mapDimensionStyle);\n}\n"
  },
  {
    "path": "src/style/fontSize.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps, parseDimension } from '../styleHelper';\n\nexport const fontSizePropTypes = {\n  size: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\n\nexport function removeFontSizeProps(props) {\n  return extractProps(props, fontSizePropTypes)[0];\n}\n\nfunction mapFontSizeStyle(key, value) {\n  return ['fontSize', parseDimension(value)];\n}\n\nfunction mapFontSizeStyles(styles) {\n  if (styles.fontSize && !styles.lineHeight) {\n    styles.lineHeight = parseDimension(parseInt(styles.fontSize) * 1.2);\n  }\n  return styles;\n}\n\nexport default function(...options) {\n  return styleHelper(options, fontSizePropTypes, mapFontSizeStyle, mapFontSizeStyles);\n}\n"
  },
  {
    "path": "src/style/hidden.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps } from '../styleHelper';\n\nexport const hiddenPropTypes = {\n  hidden: PropTypes.bool\n};\n\nexport function removeHiddenProps(props) {\n  return extractProps(props, hiddenPropTypes)[0];\n}\n\nfunction mapHiddenStyle(key, value) {\n  return value ? ['display', 'none'] : null;\n}\n\nexport default function(...options) {\n  return styleHelper(options, hiddenPropTypes, mapHiddenStyle);\n}\n"
  },
  {
    "path": "src/style/margin.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps, parseDimension } from '../styleHelper';\n\nexport const marginPropTypes = {\n  margin: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  marginTop: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  marginLeft: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  marginRight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  marginBottom: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\n\nexport function removeMarginProps(props) {\n  return extractProps(props, marginPropTypes)[0];\n}\n\nfunction mapMarginStyle(key, value) {\n  return [key, parseDimension(value)];\n}\n\nexport default function(...options) {\n  return styleHelper(options, marginPropTypes, mapMarginStyle);\n}\n"
  },
  {
    "path": "src/style/padding.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps, parseDimension } from '../styleHelper';\n\nexport const paddingPropTypes = {\n  padding: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  paddingTop: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  paddingLeft: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  paddingRight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  paddingBottom: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\n\nexport function removePaddingProps(props) {\n  return extractProps(props, paddingPropTypes)[0];\n}\n\nexport function removeDuplicatePaddingProps(styles, props) {\n  if (props !== undefined && typeof props.style !== 'undefined') {\n    styles = { ...styles };\n    if (props.style.padding) {\n      delete styles.paddingBottom;\n      delete styles.paddingLeft;\n      delete styles.paddingRight;\n      delete styles.paddingTop;\n      return styles;\n    } else if (props.style.paddingBottom || props.style.paddingLeft || props.style.paddingRight || props.style.paddingTop) {\n      delete styles.padding;\n      return styles;\n    }\n  }\n  return styles;\n}\n\nfunction mapPaddingStyle(key, value) {\n  return [key, parseDimension(value)];\n}\n\nexport default function(...options) {\n  return styleHelper(options, paddingPropTypes, mapPaddingStyle);\n}\n"
  },
  {
    "path": "src/style/textAlign.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps } from '../styleHelper';\n\nconst allowedValues = ['left', 'right', 'center'];\n\nexport const textAlignPropTypes = {\n  textAlign: PropTypes.string\n};\n\nexport function removeTextAlignProps(props) {\n  return extractProps(props, textAlignPropTypes)[0];\n}\n\nfunction mapTextAlignStyle(key, value) {\n  let finalKey, finalValue;\n  if (allowedValues.indexOf(value) === -1) {\n    console.error('Unknown value for ' + key + ': ' + value);\n  } else {\n    finalKey = 'textAlign';\n    finalValue = value;\n  }\n  return [finalKey, finalValue];\n}\n\nexport default function(...options) {\n  return styleHelper(options, textAlignPropTypes, mapTextAlignStyle);\n}\n"
  },
  {
    "path": "src/style/theme/windows.js",
    "content": "import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { applyDefaultProps } from '../../styleHelper';\n\nexport const themePropTypes = {\n  theme: PropTypes.string\n};\n\nexport const themeContextTypes = {\n  theme: PropTypes.string\n};\n\nconst applyThemeProps = (props, context) => applyDefaultProps(props, context, { theme: 'light' });\n\nexport function ThemeContext() {\n  return function (ComposedComponent) {\n    return class extends Component {\n      static propTypes = { ...themePropTypes };\n      static contextTypes = { ...themeContextTypes };\n      static childContextTypes = { ...themeContextTypes };\n\n      getChildContext() {\n        return {\n          theme: applyThemeProps(this.props, this.context).theme\n        };\n      }\n\n      render() {\n        const { ...props } = this.props;\n        delete props.theme;\n        return (\n          <ComposedComponent {...props}/>\n        );\n      }\n    };\n  }\n}\n"
  },
  {
    "path": "src/style/width.js",
    "content": "import PropTypes from 'prop-types';\nimport styleHelper, { extractProps, parseDimension } from '../styleHelper';\n\nexport const widthPropTypes = {\n  width: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\n\nexport function removeWidthProps(props) {\n  return extractProps(props, widthPropTypes)[0];\n}\n\nfunction mapWidthStyle(key, value) {\n  return [key, parseDimension(value)];\n}\n\nfunction mapWidthStyles(styles) {\n  if (styles.width) {\n    if (styles.flex) {\n      delete styles.flex;\n    } else if (styles.flexGrow) {\n      delete styles.flexGrow;\n    }\n  }\n  return styles;\n}\n\nexport default function(...options) {\n  return styleHelper(options, widthPropTypes, mapWidthStyle, mapWidthStyles);\n}\n"
  },
  {
    "path": "src/styleHelper.js",
    "content": "import React, { Component, cloneElement, isValidElement } from 'react';\n\nexport function parseDimension(value) {\n  if (typeof value === 'number') {\n    return value + 'px';\n  } else if (value.match(/^[0-9]+$/)) {\n    return value + 'px';\n  }\n  return value;\n}\n\nexport function applyDefaultProps(props, context, defaultProps) {\n  let finalProps = { ...props };\n\n  for (let prop in defaultProps) {\n    if (defaultProps.hasOwnProperty(prop)) {\n      if (!props[prop]) {\n        if (context[prop]) {\n          finalProps[prop] = context[prop];\n        } else {\n          finalProps[prop] = defaultProps[prop];\n        }\n      } else if (props[prop] && typeof props[prop] === 'boolean' && typeof defaultProps[prop] !== 'boolean') {\n        if (context.color) {\n          finalProps[prop] = context[prop];\n        } else {\n          finalProps[prop] = defaultProps[prop];\n        }\n      }\n    }\n  }\n\n  return finalProps;\n}\n\nexport function hasProps(props, proptypes) {\n  if (!proptypes) return false;\n\n  for (let prop in props) {\n    if (props.hasOwnProperty(prop)) {\n      if (proptypes[prop] !== undefined) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nexport function extractProps(props, proptypes) {\n  if (!proptypes) return [{},  {}];\n\n  let finalProps = {};\n  let extractedProps = {};\n  for (let prop in props) {\n    if (props.hasOwnProperty(prop)) {\n      if (proptypes[prop] !== undefined) {\n        extractedProps[prop] = props[prop];\n      } else {\n        finalProps[prop] = props[prop];\n      }\n    }\n  }\n  return [finalProps, extractedProps];\n}\n\nexport function mapStyle(prevStyles, nextStyles, defaultStyles, styleCallback, stylesCallback, props) {\n  let finalStyles = { ...prevStyles };\n  if (defaultStyles) {\n    for (let key in defaultStyles) {\n      if (defaultStyles.hasOwnProperty(key)) {\n        finalStyles[key] = defaultStyles[key];\n      }\n    }\n  }\n\n  for (let key in nextStyles) {\n    if (nextStyles.hasOwnProperty(key)) {\n      if (styleCallback) {\n        const result = styleCallback(key, nextStyles[key], props);\n        if (result) {\n          finalStyles[result[0]] = result[1];\n        }\n      } else finalStyles[key] = nextStyles[key];\n    }\n  }\n\n  if (typeof stylesCallback === 'function') return stylesCallback(finalStyles, props);\n  return finalStyles;\n}\n\nexport default function styleHelper(options, propTypes, mapStyleCallback, mapStylesCallback, mapProps) {\n  if (!mapProps || typeof mapProps !== 'function') {\n    mapProps = props => props;\n  }\n\n  function doStyleHelper(WrappedComponent) {\n    const [element, elementProps, defaultStyles] = options;\n    if (isValidElement(element)) {\n      if (hasProps(elementProps, propTypes) || hasProps(defaultStyles, propTypes)) {\n        const styles = extractProps(elementProps, propTypes)[1];\n        const props = element.props ? { ...element.props } : {};\n        props.style = mapStyle(props.style, styles, defaultStyles, mapStyleCallback, mapStylesCallback, elementProps);\n        return cloneElement(element, mapProps(props, element.props, true));\n      }\n      return cloneElement(element, mapProps(element.props, element.props, false));\n    } else {\n      let defaultStyles;\n      if (options && Object.prototype.toString.call(options) === '[object Array]') {\n        defaultStyles = options[0];\n      }\n      return class extends Component {\n        render() {\n          if (hasProps(this.props, propTypes) || hasProps(defaultStyles, propTypes)) {\n            let [props, styles] = extractProps(this.props, propTypes);\n            if (!props) props = {};\n            props.style = mapStyle(props.style, styles, defaultStyles, mapStyleCallback, mapStylesCallback, this.props);\n            return <WrappedComponent {...mapProps(props, this.props, true)}/>;\n          }\n          return <WrappedComponent {...mapProps(this.props, this.props, false)}/>\n        }\n      }\n    }\n  }\n\n  if (options[0] && isValidElement(options[0])) {\n    return doStyleHelper();\n  }\n\n  return doStyleHelper;\n}\n"
  },
  {
    "path": "src/utils/mapStyles.js",
    "content": "export default function mapStyles(styles, map) {\n  let popped = [];\n  let mappedStyles = {};\n  for (let prop in map) {\n    if (map.hasOwnProperty(prop)) {\n      mappedStyles[prop] = {};\n      map[prop].forEach(key => {\n        if (styles !== undefined && typeof styles[key] !== 'undefined') {\n          popped.push(key);\n          mappedStyles[prop][key] = styles[key];\n        }\n      })\n    }\n  }\n  let remaining = {};\n  for (let prop in styles) {\n    if (styles.hasOwnProperty(prop)) {\n      if (popped.indexOf(prop) === -1) {\n        remaining[prop] = styles[prop];\n      }\n    }\n  }\n\n  let finalStyles = [remaining];\n  for (let prop in mappedStyles) {\n    if (mappedStyles.hasOwnProperty(prop)) {\n      finalStyles.push(mappedStyles[prop]);\n    }\n  }\n\n  return finalStyles;\n}\n"
  },
  {
    "path": "src/windowFocus.js",
    "content": "import { windowIsFocused } from './monitor';\nimport React, { Component } from 'react';\n\nfunction WindowFocus(options, ComposedComponent) {\n  return class extends Component {\n    constructor() {\n      super();\n      this.state = {\n        isWindowFocused: windowIsFocused()\n      };\n    }\n\n    componentDidMount() {\n      if (typeof window !== 'undefined') {\n        window.addEventListener('focus', this.windowFocus);\n        window.addEventListener('blur', this.windowBlur);\n      }\n    }\n\n    componentWillUnmount() {\n      if (typeof window !== 'undefined') {\n        window.removeEventListener('focus', this.windowFocus);\n        window.removeEventListener('blur', this.windowBlur);\n      }\n    }\n\n    windowFocus = () => {\n      this.setState({ isWindowFocused: true });\n    };\n\n    windowBlur = () => {\n      this.setState({ isWindowFocused: false });\n    };\n\n    render() {\n      return <ComposedComponent isWindowFocused={this.state.isWindowFocused} {...this.props}/>;\n    }\n  }\n}\n\nexport default function(...options) {\n  if (options.length === 1 && typeof options[0] === 'function') return WindowFocus.apply(null, [[], options[0]]);\n  return WindowFocus.bind(null, options);\n}\n"
  },
  {
    "path": "test/mocha.opts",
    "content": "--compilers js:babel-core/register\n--recursive\n--require ./test/setup.js\n"
  },
  {
    "path": "test/setup.js",
    "content": "import { JSDOM } from 'jsdom';\n\nconst dom = new JSDOM('<!doctype html><html><body></body></html>');\nglobal.window = dom.window;\nglobal.HTMLElement = dom.window.HTMLElement;\nglobal.document = dom.window.document;\nglobal.navigator = {\n  ...global.window.navigator,\n  userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.54 Safari/537.36'\n};\nglobal.__REACT_DEVTOOLS_GLOBAL_HOOK__ = {};\n"
  },
  {
    "path": "test/tests/box.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport Box from '../../src/Box/macOs';\n\ndescribe('Box', () => {\n  it('create box component with label', () => {\n    const string = renderToString(<Box label=\"My Label\" />);\n    expect(string).to.match(/My Label/);\n  });\n});\n"
  },
  {
    "path": "test/tests/button.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport Button from '../../src/Button/windows';\n\ndescribe('Button', () => {\n  it('create button component with text', () => {\n    const string = renderToString(<Button>Hello</Button>);\n    expect(string).to.match(/Hello/);\n  });\n\n  it('create button component with one node', () => {\n    const string = renderToString(\n      <Button>\n        <span>Hello</span>\n      </Button>\n    );\n    expect(string).to.match(/<span.*>Hello/);\n  });\n\n  it('create button component with multiple nodes', () => {\n    const string = renderToString(\n      <Button>\n        <span>Hello</span>\n        <span>World</span>\n      </Button>\n    );\n    expect(string).to.match(/<span.*>Hello/);\n    expect(string).to.match(/<span.*>World/);\n  });\n});\n"
  },
  {
    "path": "test/tests/checkbox.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport CheckboxOSX from '../../src/Checkbox/macOs';\nimport CheckboxWindows from '../../src/Checkbox/windows';\n\ndescribe('Checkbox', () => {\n  it('create osx checkbox', () => {\n    const string = renderToString(<CheckboxOSX label=\"my label\" />);\n    expect(string).to.match(/my label/);\n  });\n\n  it('create windows checkbox', () => {\n    const string = renderToString(<CheckboxWindows label=\"my label\" />);\n    expect(string).to.match(/my label/);\n  });\n});\n"
  },
  {
    "path": "test/tests/color.js",
    "content": "import { expect } from 'chai';\nimport * as Color from '../../src/color';\n\ndescribe('Color', () => {\n  describe('#colorLuminance', () => {\n\n  });\n\n  describe('#hexToRgb', () => {\n    it('works', () => {\n      expect(Color.hexToRgb('#000000')).to.deep.equal({ r: 0, g: 0, b: 0 });\n      expect(Color.hexToRgb('#1883d7')).to.deep.equal({ r: 24, g: 131, b: 215 });\n      expect(Color.hexToRgb('#ffffff')).to.deep.equal({ r: 255, g: 255, b: 255 });\n      expect(Color.hexToRgb('#000')).to.deep.equal({ r: 0, g: 0, b: 0 });\n      expect(Color.hexToRgb('#fff')).to.deep.equal({ r: 255, g: 255, b: 255 });\n    });\n  });\n\n  describe('#transparentize', () => {\n    it('works', () => {\n      expect(Color.transparentize('#000000', 0)).to.deep.equal('rgba(0, 0, 0, 1)');\n      expect(Color.transparentize('#000000', 0.4)).to.deep.equal('rgba(0, 0, 0, 0.6)');\n      expect(Color.transparentize('#000000', 0.7)).to.deep.equal('rgba(0, 0, 0, 0.3)');\n      expect(Color.transparentize('#000000', 1)).to.deep.equal('rgba(0, 0, 0, 0)');\n    });\n  });\n\n  describe('#darkenColor', () => {\n\n  });\n\n  describe('#ligthenColor', () => {\n\n  });\n\n  describe('#convertColor', () => {\n    it('works', () => {\n      expect(Color.convertColor('white')).to.equal('#ffffff');\n      expect(Color.convertColor('blue')).to.equal('#0000ff');\n      expect(Color.convertColor('black')).to.equal('#000000');\n    });\n  });\n\n  describe('#isDarkColor', () => {\n    it('works', () => {\n      expect(Color.isDarkColor('#000000')).to.be.true;\n      expect(Color.isDarkColor('#ffffff')).to.be.false;\n    });\n  });\n});\n"
  },
  {
    "path": "test/tests/dialog.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport Dialog from '../../src/Dialog/macOs';\n\ndescribe('Dialog', () => {\n  it('create osx dialog', () => {\n    const string = renderToString(<Dialog />);\n    expect(string).to.match(/div/);\n  });\n});\n"
  },
  {
    "path": "test/tests/index.js",
    "content": "import { expect } from 'chai';\nimport { MACOS, WINDOWS } from '../../src/os';\nimport * as components from '../../index'\n\ndescribe('index', () => {\n  it('detect os', () => {\n    expect(components.os()).to.be.oneOf([MACOS, WINDOWS]);\n  });\n\n  it('should be exported', () => {\n    expect(components.Box).to.exist;\n    expect(components.Button).to.exist;\n    expect(components.Checkbox).to.exist;\n    expect(components.Dialog).to.exist;\n    expect(components.Label).to.exist;\n    expect(components.Link).to.exist;\n    expect(components.ListView).to.exist;\n    expect(components.ListViewFooter).to.exist;\n    expect(components.ListViewHeader).to.exist;\n    expect(components.ListViewRow).to.exist;\n    expect(components.ListViewSection).to.exist;\n    expect(components.ListViewSectionHeader).to.exist;\n    expect(components.ListViewSeparator).to.exist;\n    expect(components.MasterDetailsView).to.exist;\n    expect(components.NavPane).to.exist;\n    expect(components.Pin).to.exist;\n    expect(components.ProgressCircle).to.exist;\n    expect(components.Radio).to.exist;\n    expect(components.SearchField).to.exist;\n    expect(components.SegmentedControl).to.exist;\n    expect(components.SegmentedControlItem).to.exist;\n    expect(components.Text).to.exist;\n    expect(components.TextInput).to.exist;\n    expect(components.TitleBar).to.exist;\n    expect(components.Toolbar).to.exist;\n    expect(components.ToolbarNav).to.exist;\n    expect(components.ToolbarNavItem).to.exist;\n    expect(components.View).to.exist;\n    expect(components.Window).to.exist;\n  });\n});\n"
  },
  {
    "path": "test/tests/label.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport Label from '../../src/Label/windows';\n\ndescribe('Label', () => {\n  it('create label component with text', () => {\n    const string = renderToString(<Label>Hello</Label>);\n    expect(string).to.match(/Hello/);\n  });\n\n  it('create label component with one node', () => {\n    const string = renderToString(\n      <Label>\n        <span>Hello</span>\n      </Label>\n    );\n    expect(string).to.match(/<span.*>Hello/);\n  });\n\n  it('create label component with multiple nodes', () => {\n    const string = renderToString(\n      <Label>\n        <span>Hello</span>\n        <span>World</span>\n      </Label>\n    );\n    expect(string).to.match(/<span.*>Hello/);\n    expect(string).to.match(/<span.*>World/);\n  });\n});\n"
  },
  {
    "path": "test/tests/link.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport Link from '../../src/Link/macOs';\n\ndescribe('Link', () => {\n  it('create osx link', () => {\n    const string = renderToString(<Link>My Link</Link>);\n    expect(string).to.match(/My Link/);\n  });\n});\n"
  },
  {
    "path": "test/tests/listView.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport ListView from '../../src/ListView/macOs';\nimport ListViewFooter from '../../src/ListView/macOs/Footer';\nimport ListViewHeader from '../../src/ListView/macOs/Header';\nimport ListViewRow from '../../src/ListView/macOs/Row';\nimport ListViewSection from '../../src/ListView/macOs/Section';\nimport ListViewSectionHeader from '../../src/ListView/macOs/Section/Header';\nimport ListViewSeparator from '../../src/ListView/macOs/Separator';\n\ndescribe('ListView', () => {\n  it('create list view component', () => {\n    const string = renderToString(<ListView />);\n    expect(string).to.match(/<section/);\n  });\n\n  it('create list view footer component', () => {\n    const string = renderToString(<ListViewFooter />);\n    expect(string).to.match(/<footer/);\n  });\n\n  it('create list view header component', () => {\n    const string = renderToString(<ListViewHeader />);\n    expect(string).to.match(/<header/);\n  });\n\n  it('create list view row component', () => {\n    const string = renderToString(<ListViewRow />);\n    expect(string).to.match(/<li/);\n  });\n\n  it('create list view section component', () => {\n    const string = renderToString(<ListViewSection />);\n    expect(string).to.match(/<section/);\n  });\n\n  it('create list view section header component', () => {\n    const string = renderToString(<ListViewSectionHeader />);\n    expect(string).to.match(/<header/);\n  });\n\n  it('create list view separator component', () => {\n    const string = renderToString(<ListViewSeparator />);\n    expect(string).to.match(/<hr/);\n  });\n});\n"
  },
  {
    "path": "test/tests/macOs.js",
    "content": "import { expect } from 'chai';\nimport {\n  Box,\n  Button,\n  Checkbox,\n  Dialog,\n  Label,\n  Link,\n  ListView,\n  ListViewFooter,\n  ListViewHeader,\n  ListViewRow,\n  ListViewSection,\n  ListViewSectionHeader,\n  ListViewSeparator,\n  Pin,\n  ProgressCircle,\n  Radio,\n  SearchField,\n  SegmentedControl,\n  SegmentedControlItem,\n  Text,\n  TextInput,\n  TitleBar,\n  Toolbar,\n  ToolbarNav,\n  ToolbarNavItem,\n  View,\n  Window\n} from '../../macOs';\n\ndescribe('OSX', () => {\n  it('should be exported', () => {\n    expect(Box).to.exist;\n    expect(Button).to.exist;\n    expect(Checkbox).to.exist;\n    expect(Dialog).to.exist;\n    expect(Label).to.exist;\n    expect(Link).to.exist;\n    expect(ListView).to.exist;\n    expect(ListViewFooter).to.exist;\n    expect(ListViewHeader).to.exist;\n    expect(ListViewRow).to.exist;\n    expect(ListViewSection).to.exist;\n    expect(ListViewSectionHeader).to.exist;\n    expect(ListViewSeparator).to.exist;\n    expect(Pin).to.exist;\n    expect(ProgressCircle).to.exist;\n    expect(Radio).to.exist;\n    expect(SearchField).to.exist;\n    expect(SegmentedControl).to.exist;\n    expect(SegmentedControlItem).to.exist;\n    expect(Text).to.exist;\n    expect(TextInput).to.exist;\n    expect(TitleBar).to.exist;\n    expect(Toolbar).to.exist;\n    expect(ToolbarNav).to.exist;\n    expect(ToolbarNavItem).to.exist;\n    expect(View).to.exist;\n    expect(Window).to.exist;\n  });\n});\n"
  },
  {
    "path": "test/tests/pin.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport Pin from '../../src/Pin/macOs';\n\ndescribe('Pin', () => {\n  it('create osx pin', () => {\n    const string = renderToString(<Pin length={1} />);\n    expect(string).to.match(/input/);\n  });\n});\n"
  },
  {
    "path": "test/tests/progressCircle.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport ProgressCirecleOSX from '../../src/ProgressCircle/macOs';\nimport ProgressCirecleWindows from '../../src/ProgressCircle/windows';\n\ndescribe('Progress Circle', () => {\n  it('create osx progress circle', () => {\n    const string = renderToString(<ProgressCirecleOSX size={50} />);\n    expect(string).to.match(/width: ?50px/);\n  });\n\n  it('create windows progress circle', () => {\n    const string = renderToString(<ProgressCirecleWindows size={50} />);\n    expect(string).to.match(/width: ?50px/);\n  });\n});\n"
  },
  {
    "path": "test/tests/searchField.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport SearchField from '../../src/SearchField/macOs';\n\ndescribe('SearchField', () => {\n  it('create search field component', () => {\n    const string = renderToString(<SearchField />);\n    expect(string).to.match(/<input/);\n  });\n});\n"
  },
  {
    "path": "test/tests/text.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport TextOSX from '../../src/Text/macOs';\nimport TextWindows from '../../src/Text/windows';\n\ndescribe('Text', () => {\n  it('create osx text', () => {\n    const string = renderToString(<TextOSX>My Text</TextOSX>);\n    expect(string).to.match(/My Text/);\n  });\n\n  it('create windows text', () => {\n    const string = renderToString(<TextWindows>My Text</TextWindows>);\n    expect(string).to.match(/My Text/);\n  });\n});\n"
  },
  {
    "path": "test/tests/textArea.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport TextArea from '../../src/TextArea/windows';\nimport TextAreaOSX from '../../src/TextArea/macOs';\n\ndescribe('TextArea', () => {\n  describe('Windows', () => {\n    it('create text input component with a placeholder', () => {\n      const string = renderToString(\n        <TextArea placeholder=\"Placeholder Text\" />\n      );\n      expect(string).to.match(/placeholder=\"Placeholder Text\"/);\n    });\n\n    it('create text input component with default text value', () => {\n      const string = renderToString(<TextArea defaultValue=\"Default Text\" />);\n      expect(string).to.match(/>Default Text</);\n    });\n\n  });\n\n  describe('macOS', () => {\n    it('create text input component with a placeholder', () => {\n      const string = renderToString(\n        <TextAreaOSX placeholder=\"Placeholder Text\" />\n      );\n      expect(string).to.match(/placeholder=\"Placeholder Text\"/);\n    });\n\n    it('create text input component with a centered placeholder', () => {\n      const string = renderToString(\n        <TextAreaOSX centerPlaceholder placeholder=\"Placeholder Text\" />\n      );\n      expect(string).to.match(/Placeholder Text<\\/span>/);\n      expect(string).not.to.match(/placeholder=\"Placeholder Text\"/);\n    });\n\n    it('create text input component with default text value', () => {\n      const string = renderToString(\n        <TextAreaOSX defaultValue=\"Default Text\" />\n      );\n      expect(string).to.match(/>Default Text</);\n    });\n  });\n});\n"
  },
  {
    "path": "test/tests/textInput.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport TextInput from '../../src/TextInput/windows';\nimport TextFieldOSX from '../../src/TextInput/macOs';\n\ndescribe('TextInput', () => {\n  describe('Windows', () => {\n    it('create text input component with a placeholder', () => {\n      const string = renderToString(\n        <TextInput placeholder=\"Placeholder Text\" />\n      );\n      expect(string).to.match(/placeholder=\"Placeholder Text\"/);\n    });\n\n    it('create text input component with default text value', () => {\n      const string = renderToString(<TextInput defaultValue=\"Default Text\" />);\n      expect(string).to.match(/value=\"Default Text\"/);\n    });\n\n    it('should create a password input field', () => {\n      const string = renderToString(<TextInput password />);\n      expect(string).to.match(/type=\"password\"/);\n    });\n  });\n\n  describe('macOS', () => {\n    it('create text input component with a placeholder', () => {\n      const string = renderToString(\n        <TextFieldOSX placeholder=\"Placeholder Text\" />\n      );\n      expect(string).to.match(/placeholder=\"Placeholder Text\"/);\n    });\n\n    it('create text input component with a centered placeholder', () => {\n      const string = renderToString(\n        <TextFieldOSX centerPlaceholder placeholder=\"Placeholder Text\" />\n      );\n      expect(string).to.match(/Placeholder Text<\\/span>/);\n      expect(string).not.to.match(/placeholder=\"Placeholder Text\"/);\n    });\n\n    it('create text input component with default text value', () => {\n      const string = renderToString(\n        <TextFieldOSX defaultValue=\"Default Text\" />\n      );\n      expect(string).to.match(/value=\"Default Text\"/);\n    });\n\n    it('should create a password input field', () => {\n      const string = renderToString(<TextFieldOSX password />);\n      expect(string).to.match(/type=\"password\"/);\n    });\n  });\n});\n"
  },
  {
    "path": "test/tests/toolbar.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport Toolbar from '../../src/Toolbar/macOs';\n\ndescribe('Toolbar', () => {\n  it('create toolbar component', () => {\n    const string = renderToString(<Toolbar />);\n    expect(string).to.match(/<div/);\n  });\n});\n"
  },
  {
    "path": "test/tests/toolbarNav.js",
    "content": "import { expect } from 'chai';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport ToolbarNav from '../../src/Toolbar/macOs/Nav';\nimport ToolbarNavItem from '../../src/Toolbar/macOs/Nav/Item';\n\ndescribe('ToolbarNav', () => {\n  it('create toolbar nav component', () => {\n    const string = renderToString(<ToolbarNav />);\n    expect(string).to.match(/<div/);\n  });\n\n  it('create toolbar nav item component', () => {\n    const string = renderToString(<ToolbarNavItem />);\n    expect(string).to.match(/<a/);\n  });\n});\n"
  },
  {
    "path": "test/tests/windows.js",
    "content": "import { expect } from 'chai';\nimport {\n  Button,\n  Checkbox,\n  Label,\n  MasterDetailsView,\n  NavPane,\n  ProgressCircle,\n  Text,\n  TextInput,\n  TitleBar,\n  View,\n  Window\n} from '../../windows';\n\ndescribe('Windows', () => {\n  it('should be exported', () => {\n    expect(Button).to.exist;\n    expect(Checkbox).to.exist;\n    expect(Label).to.exist;\n    expect(MasterDetailsView).to.exist;\n    expect(NavPane).to.exist;\n    expect(ProgressCircle).to.exist;\n    expect(Text).to.exist;\n    expect(TextInput).to.exist;\n    expect(TitleBar).to.exist;\n    expect(View).to.exist;\n    expect(Window).to.exist;\n  });\n});\n"
  },
  {
    "path": "windows.js",
    "content": "export { default as Button } from './src/Button/windows';\nexport { default as Checkbox } from './src/Checkbox/windows';\nexport { default as Label } from './src/Label/windows';\nexport { default as MasterDetailsView } from './src/MasterDetailsView/windows';\nexport {\n  default as MasterDetailsViewItem\n} from './src/MasterDetailsView/windows/Item';\nexport {\n  default as MasterDetailsViewItemMaster\n} from './src/MasterDetailsView/windows/Master';\nexport {\n  default as MasterDetailsViewItemDetails\n} from './src/MasterDetailsView/windows/Details';\nexport { default as NavPane } from './src/NavPane/windows';\nexport { default as NavPaneItem } from './src/NavPane/windows/Item';\nexport { default as ProgressCircle } from './src/ProgressCircle/windows';\nexport { default as Radio } from './src/Radio/windows';\nexport { default as Text } from './src/Text/windows';\nexport { default as TextInput } from './src/TextInput/windows';\nexport { default as TextArea } from './src/TextArea/windows';\nexport { default as TitleBar } from './src/TitleBar/windows';\nexport { default as View } from './src/View/windows';\nexport { default as Window } from './src/Window/windows';\n"
  }
]