{"action":"created","comment":{"url":"https://api.github.com/repos/elastic/kibana/pulls/comments/92075102","pull_request_review_id":12584497,"id":92075102,"diff_hunk":"@@ -0,0 +1,57 @@\n+# Kibana UI Framework\n+\n+## Development\n+\n+* Start development server `npm run uiFramework:start`.\n+* View docs on `http://localhost:8080/`.\n+\n+## What is this?\n+\n+The UI Framework provides you with UI components you can quickly use to build UIs, as well as interactive examples which document how they're supposed to be used. These UI components are currently only implemented in CSS and markup, but eventually they'll grow to involve JS as well.\n+\n+When you build a UI using this framework (e.g. a plugin's UI), you can rest assured it will fit into the overall Kibana UI.\n+\n+## Benefits\n+\n+### Dynamic, interactive documentation\n+\n+By having a \"living style guide\", we relieve our designers of the burden of creating and maintaining static style guides. This also makes it easier for our engineers to translate mockups, prototypes, and wireframes into products.\n+\n+### Copy-pasteable UI\n+\n+Engineers can copy and paste sample code into their projects to quickly get reliable, consistent results.\n+\n+### Remove CSS from the day-to-day\n+\n+The CSS portion of this framework means engineers don't need to spend mental cycles. These cycles can be spent on the things critical to the identity of the specific project they're working on, like architecture and business logic.\n+\n+Once this framework also provides JS components, engineers won't even need to _see_ CSS -- it will be encapsulated behind the JS components' interfaces.\n+\n+### More UI tests === fewer UI bugs\n+\n+By covering our UI components with great unit tests and having those tests live within the framework itself, we can rest assured that our UI layer is tested and remove some of that burden from out integration/end-to-end tests.\n+\n+## Why not just use Bootstrap?\n+\n+In short: we've outgrown it! Third-party CSS frameworks like Bootstrap and Foundation are designed\n+for a general audience, so they offer things we don't need and _don't_ offer things we _do_ need.\n+As a result, we've been forced to override their styles until the original framework is no longer\n+recognizable. When the CSS reaches that point, it's time to take ownership over it and build\n+your own framework.\n+\n+We also gain the ability to fix some of the common issues with third-party CSS frameworks:\n+\n+* They have non-semantic markup.\n+* They deeply nest their selectors.\n+\n+For a more in-depth analysis of the problems with Bootstrap (and similar frameworks), check out this article and the links it has at the bottom: [\"Bootstrap Bankruptcy\"](http://www.matthewcopeland.me/blog/2013/11/04/bootstrap-bankruptcy/).\n+\n+## Examples of other in-house UI frameworks\n+\n+* [Ubiquiti CSS Framework](http://ubnt-css.herokuapp.com/#/app/popover)","path":"src/ui_framework/README.md","position":51,"original_position":51,"commit_id":"fe5bab1d81af843e997027db8eb76e45be5a28f7","original_commit_id":"fe5bab1d81af843e997027db8eb76e45be5a28f7","user":{"login":"tylersmalley","id":40265,"avatar_url":"https://avatars.githubusercontent.com/u/40265?v=3","gravatar_id":"","url":"https://api.github.com/users/tylersmalley","html_url":"https://github.com/tylersmalley","followers_url":"https://api.github.com/users/tylersmalley/followers","following_url":"https://api.github.com/users/tylersmalley/following{/other_user}","gists_url":"https://api.github.com/users/tylersmalley/gists{/gist_id}","starred_url":"https://api.github.com/users/tylersmalley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tylersmalley/subscriptions","organizations_url":"https://api.github.com/users/tylersmalley/orgs","repos_url":"https://api.github.com/users/tylersmalley/repos","events_url":"https://api.github.com/users/tylersmalley/events{/privacy}","received_events_url":"https://api.github.com/users/tylersmalley/received_events","type":"User","site_admin":false},"body":"Didn't you make this? 😄 ","created_at":"2016-12-13T00:43:34Z","updated_at":"2016-12-13T00:43:34Z","html_url":"https://github.com/elastic/kibana/pull/9192#discussion_r92075102","pull_request_url":"https://api.github.com/repos/elastic/kibana/pulls/9192","_links":{"self":{"href":"https://api.github.com/repos/elastic/kibana/pulls/comments/92075102"},"html":{"href":"https://github.com/elastic/kibana/pull/9192#discussion_r92075102"},"pull_request":{"href":"https://api.github.com/repos/elastic/kibana/pulls/9192"}}},"pull_request":{"url":"https://api.github.com/repos/elastic/kibana/pulls/9192","id":94911824,"html_url":"https://github.com/elastic/kibana/pull/9192","diff_url":"https://github.com/elastic/kibana/pull/9192.diff","patch_url":"https://github.com/elastic/kibana/pull/9192.patch","issue_url":"https://api.github.com/repos/elastic/kibana/issues/9192","number":9192,"state":"open","locked":false,"title":"Migrate UI Framework source into Kibana.","user":{"login":"cjcenizal","id":1238659,"avatar_url":"https://avatars.githubusercontent.com/u/1238659?v=3","gravatar_id":"","url":"https://api.github.com/users/cjcenizal","html_url":"https://github.com/cjcenizal","followers_url":"https://api.github.com/users/cjcenizal/followers","following_url":"https://api.github.com/users/cjcenizal/following{/other_user}","gists_url":"https://api.github.com/users/cjcenizal/gists{/gist_id}","starred_url":"https://api.github.com/users/cjcenizal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjcenizal/subscriptions","organizations_url":"https://api.github.com/users/cjcenizal/orgs","repos_url":"https://api.github.com/users/cjcenizal/repos","events_url":"https://api.github.com/users/cjcenizal/events{/privacy}","received_events_url":"https://api.github.com/users/cjcenizal/received_events","type":"User","site_admin":false},"body":"Addresses https://github.com/elastic/kibana/issues/8867\r\n\r\nWhen we make changes to our UI by adding new components to the UI Framework, our dev process will look like this:\r\n\r\n1. Run Kibana with `npm start`.\r\n2. Run the UI Framework dev server with `npm run uiFramework:start`.\r\n3. Check it out on `localhost:8080`.\r\n4. Add a new component to the UI Framework.\r\n5. Integrate it into Kibana and test it out in the Kibana UI.\r\n6. Create examples in the UI Framework and check them out in the browser.\r\n7. Submit PR like normal.\r\n\r\n## Changes\r\n\r\n- Add dependencies to package.json.\r\n- Add task for building UI Framework docs and serving locally.\r\n- Import UI Framework scss from autoload/styles.js instead of importing the CSS in base.less.\r\n\r\n## FAQ\r\n\r\n**I see React and Redux are now dependencies. Are we using them in Kibana?**\r\n\r\nNo, they're only used to build the UI Framework documentation site. They make it really easy to add examples of new components. If anybody thinks we should use a different set of tools, suggestions and PRs are welcome!\r\n\r\n**Why are we using SCSS? We're already using LESS.**\r\n\r\nSCSS has better mixins, value interpolation, control directives, and other features. We can migrate all of our LESS to SCSS eventually, so we'll only be using one preprocessor.","created_at":"2016-11-22T22:32:47Z","updated_at":"2016-12-13T00:47:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5fb11fd3a0556282eb01ae9cd532500b87300843","assignee":{"login":"tylersmalley","id":40265,"avatar_url":"https://avatars.githubusercontent.com/u/40265?v=3","gravatar_id":"","url":"https://api.github.com/users/tylersmalley","html_url":"https://github.com/tylersmalley","followers_url":"https://api.github.com/users/tylersmalley/followers","following_url":"https://api.github.com/users/tylersmalley/following{/other_user}","gists_url":"https://api.github.com/users/tylersmalley/gists{/gist_id}","starred_url":"https://api.github.com/users/tylersmalley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tylersmalley/subscriptions","organizations_url":"https://api.github.com/users/tylersmalley/orgs","repos_url":"https://api.github.com/users/tylersmalley/repos","events_url":"https://api.github.com/users/tylersmalley/events{/privacy}","received_events_url":"https://api.github.com/users/tylersmalley/received_events","type":"User","site_admin":false},"assignees":[{"login":"tylersmalley","id":40265,"avatar_url":"https://avatars.githubusercontent.com/u/40265?v=3","gravatar_id":"","url":"https://api.github.com/users/tylersmalley","html_url":"https://github.com/tylersmalley","followers_url":"https://api.github.com/users/tylersmalley/followers","following_url":"https://api.github.com/users/tylersmalley/following{/other_user}","gists_url":"https://api.github.com/users/tylersmalley/gists{/gist_id}","starred_url":"https://api.github.com/users/tylersmalley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tylersmalley/subscriptions","organizations_url":"https://api.github.com/users/tylersmalley/orgs","repos_url":"https://api.github.com/users/tylersmalley/repos","events_url":"https://api.github.com/users/tylersmalley/events{/privacy}","received_events_url":"https://api.github.com/users/tylersmalley/received_events","type":"User","site_admin":false},{"login":"spalger","id":1329312,"avatar_url":"https://avatars.githubusercontent.com/u/1329312?v=3","gravatar_id":"","url":"https://api.github.com/users/spalger","html_url":"https://github.com/spalger","followers_url":"https://api.github.com/users/spalger/followers","following_url":"https://api.github.com/users/spalger/following{/other_user}","gists_url":"https://api.github.com/users/spalger/gists{/gist_id}","starred_url":"https://api.github.com/users/spalger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spalger/subscriptions","organizations_url":"https://api.github.com/users/spalger/orgs","repos_url":"https://api.github.com/users/spalger/repos","events_url":"https://api.github.com/users/spalger/events{/privacy}","received_events_url":"https://api.github.com/users/spalger/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/elastic/kibana/pulls/9192/commits","review_comments_url":"https://api.github.com/repos/elastic/kibana/pulls/9192/comments","review_comment_url":"https://api.github.com/repos/elastic/kibana/pulls/comments{/number}","comments_url":"https://api.github.com/repos/elastic/kibana/issues/9192/comments","statuses_url":"https://api.github.com/repos/elastic/kibana/statuses/fe5bab1d81af843e997027db8eb76e45be5a28f7","head":{"label":"cjcenizal:8867/feature/absorb-ui-framework","ref":"8867/feature/absorb-ui-framework","sha":"fe5bab1d81af843e997027db8eb76e45be5a28f7","user":{"login":"cjcenizal","id":1238659,"avatar_url":"https://avatars.githubusercontent.com/u/1238659?v=3","gravatar_id":"","url":"https://api.github.com/users/cjcenizal","html_url":"https://github.com/cjcenizal","followers_url":"https://api.github.com/users/cjcenizal/followers","following_url":"https://api.github.com/users/cjcenizal/following{/other_user}","gists_url":"https://api.github.com/users/cjcenizal/gists{/gist_id}","starred_url":"https://api.github.com/users/cjcenizal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjcenizal/subscriptions","organizations_url":"https://api.github.com/users/cjcenizal/orgs","repos_url":"https://api.github.com/users/cjcenizal/repos","events_url":"https://api.github.com/users/cjcenizal/events{/privacy}","received_events_url":"https://api.github.com/users/cjcenizal/received_events","type":"User","site_admin":false},"repo":{"id":60198225,"name":"kibana","full_name":"cjcenizal/kibana","owner":{"login":"cjcenizal","id":1238659,"avatar_url":"https://avatars.githubusercontent.com/u/1238659?v=3","gravatar_id":"","url":"https://api.github.com/users/cjcenizal","html_url":"https://github.com/cjcenizal","followers_url":"https://api.github.com/users/cjcenizal/followers","following_url":"https://api.github.com/users/cjcenizal/following{/other_user}","gists_url":"https://api.github.com/users/cjcenizal/gists{/gist_id}","starred_url":"https://api.github.com/users/cjcenizal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjcenizal/subscriptions","organizations_url":"https://api.github.com/users/cjcenizal/orgs","repos_url":"https://api.github.com/users/cjcenizal/repos","events_url":"https://api.github.com/users/cjcenizal/events{/privacy}","received_events_url":"https://api.github.com/users/cjcenizal/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/cjcenizal/kibana","description":":bar_chart: Kibana analytics and search dashboard for Elasticsearch","fork":true,"url":"https://api.github.com/repos/cjcenizal/kibana","forks_url":"https://api.github.com/repos/cjcenizal/kibana/forks","keys_url":"https://api.github.com/repos/cjcenizal/kibana/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cjcenizal/kibana/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cjcenizal/kibana/teams","hooks_url":"https://api.github.com/repos/cjcenizal/kibana/hooks","issue_events_url":"https://api.github.com/repos/cjcenizal/kibana/issues/events{/number}","events_url":"https://api.github.com/repos/cjcenizal/kibana/events","assignees_url":"https://api.github.com/repos/cjcenizal/kibana/assignees{/user}","branches_url":"https://api.github.com/repos/cjcenizal/kibana/branches{/branch}","tags_url":"https://api.github.com/repos/cjcenizal/kibana/tags","blobs_url":"https://api.github.com/repos/cjcenizal/kibana/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cjcenizal/kibana/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cjcenizal/kibana/git/refs{/sha}","trees_url":"https://api.github.com/repos/cjcenizal/kibana/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cjcenizal/kibana/statuses/{sha}","languages_url":"https://api.github.com/repos/cjcenizal/kibana/languages","stargazers_url":"https://api.github.com/repos/cjcenizal/kibana/stargazers","contributors_url":"https://api.github.com/repos/cjcenizal/kibana/contributors","subscribers_url":"https://api.github.com/repos/cjcenizal/kibana/subscribers","subscription_url":"https://api.github.com/repos/cjcenizal/kibana/subscription","commits_url":"https://api.github.com/repos/cjcenizal/kibana/commits{/sha}","git_commits_url":"https://api.github.com/repos/cjcenizal/kibana/git/commits{/sha}","comments_url":"https://api.github.com/repos/cjcenizal/kibana/comments{/number}","issue_comment_url":"https://api.github.com/repos/cjcenizal/kibana/issues/comments{/number}","contents_url":"https://api.github.com/repos/cjcenizal/kibana/contents/{+path}","compare_url":"https://api.github.com/repos/cjcenizal/kibana/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cjcenizal/kibana/merges","archive_url":"https://api.github.com/repos/cjcenizal/kibana/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cjcenizal/kibana/downloads","issues_url":"https://api.github.com/repos/cjcenizal/kibana/issues{/number}","pulls_url":"https://api.github.com/repos/cjcenizal/kibana/pulls{/number}","milestones_url":"https://api.github.com/repos/cjcenizal/kibana/milestones{/number}","notifications_url":"https://api.github.com/repos/cjcenizal/kibana/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cjcenizal/kibana/labels{/name}","releases_url":"https://api.github.com/repos/cjcenizal/kibana/releases{/id}","deployments_url":"https://api.github.com/repos/cjcenizal/kibana/deployments","created_at":"2016-06-01T17:41:59Z","updated_at":"2016-06-01T17:42:04Z","pushed_at":"2016-12-12T22:55:59Z","git_url":"git://github.com/cjcenizal/kibana.git","ssh_url":"git@github.com:cjcenizal/kibana.git","clone_url":"https://github.com/cjcenizal/kibana.git","svn_url":"https://github.com/cjcenizal/kibana","homepage":"https://www.elastic.co/products/kibana","size":222124,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":5,"forks":0,"open_issues":5,"watchers":0,"default_branch":"master"}},"base":{"label":"elastic:master","ref":"master","sha":"4556ac3b94b4dd23eeb3f0d6111a28543dd2b357","user":{"login":"elastic","id":6764390,"avatar_url":"https://avatars.githubusercontent.com/u/6764390?v=3","gravatar_id":"","url":"https://api.github.com/users/elastic","html_url":"https://github.com/elastic","followers_url":"https://api.github.com/users/elastic/followers","following_url":"https://api.github.com/users/elastic/following{/other_user}","gists_url":"https://api.github.com/users/elastic/gists{/gist_id}","starred_url":"https://api.github.com/users/elastic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elastic/subscriptions","organizations_url":"https://api.github.com/users/elastic/orgs","repos_url":"https://api.github.com/users/elastic/repos","events_url":"https://api.github.com/users/elastic/events{/privacy}","received_events_url":"https://api.github.com/users/elastic/received_events","type":"Organization","site_admin":false},"repo":{"id":7833168,"name":"kibana","full_name":"elastic/kibana","owner":{"login":"elastic","id":6764390,"avatar_url":"https://avatars.githubusercontent.com/u/6764390?v=3","gravatar_id":"","url":"https://api.github.com/users/elastic","html_url":"https://github.com/elastic","followers_url":"https://api.github.com/users/elastic/followers","following_url":"https://api.github.com/users/elastic/following{/other_user}","gists_url":"https://api.github.com/users/elastic/gists{/gist_id}","starred_url":"https://api.github.com/users/elastic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elastic/subscriptions","organizations_url":"https://api.github.com/users/elastic/orgs","repos_url":"https://api.github.com/users/elastic/repos","events_url":"https://api.github.com/users/elastic/events{/privacy}","received_events_url":"https://api.github.com/users/elastic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/elastic/kibana","description":":bar_chart: Kibana analytics and search dashboard for Elasticsearch","fork":false,"url":"https://api.github.com/repos/elastic/kibana","forks_url":"https://api.github.com/repos/elastic/kibana/forks","keys_url":"https://api.github.com/repos/elastic/kibana/keys{/key_id}","collaborators_url":"https://api.github.com/repos/elastic/kibana/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/elastic/kibana/teams","hooks_url":"https://api.github.com/repos/elastic/kibana/hooks","issue_events_url":"https://api.github.com/repos/elastic/kibana/issues/events{/number}","events_url":"https://api.github.com/repos/elastic/kibana/events","assignees_url":"https://api.github.com/repos/elastic/kibana/assignees{/user}","branches_url":"https://api.github.com/repos/elastic/kibana/branches{/branch}","tags_url":"https://api.github.com/repos/elastic/kibana/tags","blobs_url":"https://api.github.com/repos/elastic/kibana/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/elastic/kibana/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/elastic/kibana/git/refs{/sha}","trees_url":"https://api.github.com/repos/elastic/kibana/git/trees{/sha}","statuses_url":"https://api.github.com/repos/elastic/kibana/statuses/{sha}","languages_url":"https://api.github.com/repos/elastic/kibana/languages","stargazers_url":"https://api.github.com/repos/elastic/kibana/stargazers","contributors_url":"https://api.github.com/repos/elastic/kibana/contributors","subscribers_url":"https://api.github.com/repos/elastic/kibana/subscribers","subscription_url":"https://api.github.com/repos/elastic/kibana/subscription","commits_url":"https://api.github.com/repos/elastic/kibana/commits{/sha}","git_commits_url":"https://api.github.com/repos/elastic/kibana/git/commits{/sha}","comments_url":"https://api.github.com/repos/elastic/kibana/comments{/number}","issue_comment_url":"https://api.github.com/repos/elastic/kibana/issues/comments{/number}","contents_url":"https://api.github.com/repos/elastic/kibana/contents/{+path}","compare_url":"https://api.github.com/repos/elastic/kibana/compare/{base}...{head}","merges_url":"https://api.github.com/repos/elastic/kibana/merges","archive_url":"https://api.github.com/repos/elastic/kibana/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/elastic/kibana/downloads","issues_url":"https://api.github.com/repos/elastic/kibana/issues{/number}","pulls_url":"https://api.github.com/repos/elastic/kibana/pulls{/number}","milestones_url":"https://api.github.com/repos/elastic/kibana/milestones{/number}","notifications_url":"https://api.github.com/repos/elastic/kibana/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/elastic/kibana/labels{/name}","releases_url":"https://api.github.com/repos/elastic/kibana/releases{/id}","deployments_url":"https://api.github.com/repos/elastic/kibana/deployments","created_at":"2013-01-26T04:00:59Z","updated_at":"2016-12-12T21:39:56Z","pushed_at":"2016-12-13T00:16:32Z","git_url":"git://github.com/elastic/kibana.git","ssh_url":"git@github.com:elastic/kibana.git","clone_url":"https://github.com/elastic/kibana.git","svn_url":"https://github.com/elastic/kibana","homepage":"https://www.elastic.co/products/kibana","size":273109,"stargazers_count":6464,"watchers_count":6464,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2388,"mirror_url":null,"open_issues_count":1354,"forks":2388,"open_issues":1354,"watchers":6464,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/elastic/kibana/pulls/9192"},"html":{"href":"https://github.com/elastic/kibana/pull/9192"},"issue":{"href":"https://api.github.com/repos/elastic/kibana/issues/9192"},"comments":{"href":"https://api.github.com/repos/elastic/kibana/issues/9192/comments"},"review_comments":{"href":"https://api.github.com/repos/elastic/kibana/pulls/9192/comments"},"review_comment":{"href":"https://api.github.com/repos/elastic/kibana/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/elastic/kibana/pulls/9192/commits"},"statuses":{"href":"https://api.github.com/repos/elastic/kibana/statuses/fe5bab1d81af843e997027db8eb76e45be5a28f7"}}}}
{"actor":{"display_login":"tylersmalley"}}