diff --git a/app/polymer/.babelrc b/app/polymer/.babelrc new file mode 100644 index 00000000000..845c3cf4d75 --- /dev/null +++ b/app/polymer/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["env", "stage-0", "react"] +} diff --git a/app/polymer/.npmignore b/app/polymer/.npmignore new file mode 100644 index 00000000000..329fc8d67ad --- /dev/null +++ b/app/polymer/.npmignore @@ -0,0 +1,3 @@ +docs +src +.babelrc diff --git a/app/polymer/README.md b/app/polymer/README.md new file mode 100644 index 00000000000..9b8712c29eb --- /dev/null +++ b/app/polymer/README.md @@ -0,0 +1,43 @@ +# Storybook for Polymer + +[![Build Status on CircleCI](https://circleci.com/gh/storybooks/storybook.svg?style=shield)](https://circleci.com/gh/storybooks/storybook) +[![CodeFactor](https://www.codefactor.io/repository/github/storybooks/storybook/badge)](https://www.codefactor.io/repository/github/storybooks/storybook) +[![Known Vulnerabilities](https://snyk.io/test/github/storybooks/storybook/8f36abfd6697e58cd76df3526b52e4b9dc894847/badge.svg)](https://snyk.io/test/github/storybooks/storybook/8f36abfd6697e58cd76df3526b52e4b9dc894847) +[![BCH compliance](https://bettercodehub.com/edge/badge/storybooks/storybook)](https://bettercodehub.com/results/storybooks/storybook) [![codecov](https://codecov.io/gh/storybooks/storybook/branch/master/graph/badge.svg)](https://codecov.io/gh/storybooks/storybook) +[![Storybook Slack](https://now-examples-slackin-nqnzoygycp.now.sh/badge.svg)](https://now-examples-slackin-nqnzoygycp.now.sh/) +[![Backers on Open Collective](https://opencollective.com/storybook/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/storybook/sponsors/badge.svg)](#sponsors) + +* * * + +Storybook for polymer is a UI development environment for your Polymer components. +With it, you can visualize different states of your UI components and develop them interactively. + +> Storybook for Polymer is at the **EXPERIMENTAL** stage! + +![Storybook Screenshot](https://github.com/storybooks/storybook/blob/master/app/vue/docs/demo.gif) + +Storybook runs outside of your app. +So you can develop UI components in isolation without worrying about app specific dependencies and requirements. + +## Getting Started + +> This is currently not yet implemented, sorry! + +```sh +npm i -g @storybook/cli +cd my-polymer-app +getstorybook +``` + +For more information visit: [storybook.js.org](https://storybook.js.org) + +* * * + +Storybook also comes with a lot of [addons](https://storybook.js.org/addons/introduction) and a great API to customize as you wish. +You can also build a [static version](https://storybook.js.org/basics/exporting-storybook) of your storybook and deploy it anywhere you want. + +## Polymer Notes + +- This is super super experimental, if you want to use this, expect some bugs, and missing features. +- We're looking for help to support this. If you're a member of the Polymer community and like this projet, please help us! + If you need any onboarding from us, we're happy to help you in any way! diff --git a/app/polymer/bin/build.js b/app/polymer/bin/build.js new file mode 100755 index 00000000000..780773c6cd3 --- /dev/null +++ b/app/polymer/bin/build.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('../dist/server/build'); diff --git a/app/polymer/bin/index.js b/app/polymer/bin/index.js new file mode 100755 index 00000000000..2e96258ce63 --- /dev/null +++ b/app/polymer/bin/index.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('../dist/server'); diff --git a/app/polymer/docs/demo.gif b/app/polymer/docs/demo.gif new file mode 100644 index 00000000000..c8366f8534a Binary files /dev/null and b/app/polymer/docs/demo.gif differ diff --git a/app/polymer/docs/react_storybook_screenshot.png b/app/polymer/docs/react_storybook_screenshot.png new file mode 100644 index 00000000000..9763382042b Binary files /dev/null and b/app/polymer/docs/react_storybook_screenshot.png differ diff --git a/app/polymer/docs/storybooks_io_logo.png b/app/polymer/docs/storybooks_io_logo.png new file mode 100644 index 00000000000..3dd9b09f3a9 Binary files /dev/null and b/app/polymer/docs/storybooks_io_logo.png differ diff --git a/app/polymer/package.json b/app/polymer/package.json new file mode 100644 index 00000000000..47592da2d05 --- /dev/null +++ b/app/polymer/package.json @@ -0,0 +1,82 @@ +{ + "name": "@storybook/polymer", + "version": "3.3.0-alpha.2", + "description": "Storybook for Polymer: Develop Vue Component in isolation with Hot Reloading.", + "homepage": "https://github.com/storybooks/storybook/tree/master/apps/polymer", + "bugs": { + "url": "https://github.com/storybooks/storybook/issues" + }, + "license": "MIT", + "main": "dist/client/index.js", + "bin": { + "build-storybook": "./bin/build.js", + "start-storybook": "./bin/index.js", + "storybook-server": "./bin/index.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/storybooks/storybook.git" + }, + "scripts": { + "dev": "DEV_BUILD=1 nodemon --watch ./src --exec 'yarn prepare'", + "prepare": "node ../../scripts/prepare.js" + }, + "dependencies": { + "@storybook/addons": "^3.3.0-alpha.2", + "@storybook/channel-postmessage": "^3.3.0-alpha.2", + "@storybook/ui": "^3.3.0-alpha.2", + "airbnb-js-shims": "^1.3.0", + "autoprefixer": "^7.1.6", + "babel-core": "^6.26.0", + "babel-loader": "^7.1.2", + "babel-plugin-react-docgen": "^1.8.0", + "babel-plugin-transform-regenerator": "^6.26.0", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-preset-env": "^1.6.0", + "babel-preset-minify": "^0.2.0", + "babel-preset-react": "^6.24.1", + "babel-preset-react-app": "^3.1.0", + "babel-preset-stage-0": "^6.24.1", + "babel-runtime": "^6.26.0", + "case-sensitive-paths-webpack-plugin": "^2.1.1", + "chalk": "^2.3.0", + "commander": "^2.11.0", + "common-tags": "^1.4.0", + "configstore": "^3.1.1", + "core-js": "^2.5.1", + "css-loader": "^0.28.7", + "express": "^4.16.2", + "file-loader": "^0.11.2", + "find-cache-dir": "^1.0.0", + "global": "^4.3.2", + "html-webpack-plugin": "^2.30.1", + "json-loader": "^0.5.7", + "json-stringify-safe": "^5.0.1", + "json5": "^0.5.1", + "lodash.pick": "^4.4.0", + "polymer-webpack-loader": "2.0.0", + "postcss-flexbugs-fixes": "^3.2.0", + "postcss-loader": "^2.0.8", + "prop-types": "^15.6.0", + "qs": "^6.5.1", + "react": "^16.0.0", + "react-dom": "^16.0.0", + "react-modal": "^2.4.1", + "redux": "^3.7.2", + "request": "^2.83.0", + "serve-favicon": "^2.4.5", + "shelljs": "^0.7.8", + "style-loader": "^0.18.2", + "url-loader": "^0.6.2", + "util-deprecate": "^1.0.2", + "uuid": "^3.1.0", + "webpack": "^3.6.0", + "webpack-dev-middleware": "^1.12.0", + "webpack-hot-middleware": "^2.20.0" + }, + "devDependencies": { + "babel-cli": "^6.26.0", + "nodemon": "^1.12.1" + }, + "peerDependencies": {} +} diff --git a/app/polymer/src/client/index.js b/app/polymer/src/client/index.js new file mode 100644 index 00000000000..4d19c3fb217 --- /dev/null +++ b/app/polymer/src/client/index.js @@ -0,0 +1,17 @@ +// import deprecate from 'util-deprecate'; + +// NOTE export these to keep backwards compatibility +// import { action as deprecatedAction } from '@storybook/addon-actions'; +// import { linkTo as deprecatedLinkTo } from '@storybook/addon-links'; + +export { storiesOf, setAddon, addDecorator, configure, getStorybook } from './preview'; + +// export const action = deprecate( +// deprecatedAction, +// '@storybook/react action is deprecated. See: https://github.com/storybooks/storybook/tree/master/addons/actions' +// ); + +// export const linkTo = deprecate( +// deprecatedLinkTo, +// '@storybook/react linkTo is deprecated. See: https://github.com/storybooks/storybook/tree/master/addons/links' +// ); diff --git a/app/polymer/src/client/manager/index.js b/app/polymer/src/client/manager/index.js new file mode 100644 index 00000000000..24082de7ca5 --- /dev/null +++ b/app/polymer/src/client/manager/index.js @@ -0,0 +1,7 @@ +/* global document */ + +import renderStorybookUI from '@storybook/ui'; +import Provider from './provider'; + +const rootEl = document.getElementById('root'); +renderStorybookUI(rootEl, new Provider()); diff --git a/app/polymer/src/client/manager/preview.js b/app/polymer/src/client/manager/preview.js new file mode 100644 index 00000000000..4f8e792d964 --- /dev/null +++ b/app/polymer/src/client/manager/preview.js @@ -0,0 +1,39 @@ +import PropTypes from 'prop-types'; +import React, { Component } from 'react'; + +const iframeStyle = { + width: '100%', + height: '100%', + border: 0, + margin: 0, + padding: 0, +}; + +class Preview extends Component { + shouldComponentUpdate() { + // When the manager is re-rendered, due to changes in the layout (going full screen / changing + // addon panel to right) Preview section will update. If its re-rendered the whole html page + // inside the html is re-rendered making the story to re-mount. + // We dont have to re-render this component for any reason since changes are communicated to + // story using the channel and necessary changes are done by it. + return false; + } + + render() { + return ( +