playbook_ui 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (447) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +316 -0
  3. data/Rakefile +32 -0
  4. data/app/assets/config/playbook_manifest.js +2 -0
  5. data/app/assets/images/clark.jpg +0 -0
  6. data/app/assets/images/giant.jpg +0 -0
  7. data/app/assets/images/pb-caret.svg +1 -0
  8. data/app/assets/images/pb-check.svg +11 -0
  9. data/app/controllers/playbook/application_controller.rb +10 -0
  10. data/app/controllers/playbook/guides_controller.rb +8 -0
  11. data/app/controllers/playbook/pages_controller.rb +50 -0
  12. data/app/helpers/playbook/application_helper.rb +19 -0
  13. data/app/helpers/playbook/layout_helper.rb +7 -0
  14. data/app/helpers/playbook/pb_doc_helper.rb +68 -0
  15. data/app/helpers/playbook/pb_kit_helper.rb +45 -0
  16. data/app/helpers/playbook/redcarpet_helper.rb +154 -0
  17. data/app/pb_kits/playbook/config/_kit_example.html.slim +5 -0
  18. data/app/pb_kits/playbook/config/_kit_ui.html.slim +24 -0
  19. data/app/pb_kits/playbook/config/_pb_kit_api.html.erb +18 -0
  20. data/app/pb_kits/playbook/packs/application.js +12 -0
  21. data/app/pb_kits/playbook/packs/examples.js +37 -0
  22. data/app/pb_kits/playbook/packs/kits.js +11 -0
  23. data/app/pb_kits/playbook/packs/main.scss +9 -0
  24. data/app/pb_kits/playbook/packs/pb_avatar.js +4 -0
  25. data/app/pb_kits/playbook/packs/pb_body.js +4 -0
  26. data/app/pb_kits/playbook/packs/pb_button.js +4 -0
  27. data/app/pb_kits/playbook/packs/pb_caption.js +4 -0
  28. data/app/pb_kits/playbook/packs/pb_card.js +4 -0
  29. data/app/pb_kits/playbook/packs/pb_image.js +6 -0
  30. data/app/pb_kits/playbook/packs/pb_input.js +4 -0
  31. data/app/pb_kits/playbook/packs/pb_layout.js +4 -0
  32. data/app/pb_kits/playbook/packs/pb_list.js +4 -0
  33. data/app/pb_kits/playbook/packs/pb_table.js +16 -0
  34. data/app/pb_kits/playbook/packs/pb_title.js +4 -0
  35. data/app/pb_kits/playbook/packs/pb_vertical_nav.js +4 -0
  36. data/app/pb_kits/playbook/packs/site_styles/_kit_style_index.scss +13 -0
  37. data/app/pb_kits/playbook/packs/site_styles/_scaffold.scss +43 -0
  38. data/app/pb_kits/playbook/packs/site_styles/_site-style.scss +72 -0
  39. data/app/pb_kits/playbook/packs/site_styles/docs/_all.scss +8 -0
  40. data/app/pb_kits/playbook/packs/site_styles/docs/_code_snippet.scss +531 -0
  41. data/app/pb_kits/playbook/packs/site_styles/docs/_color_utilities.scss +90 -0
  42. data/app/pb_kits/playbook/packs/site_styles/docs/_kit_doc.scss +173 -0
  43. data/app/pb_kits/playbook/packs/site_styles/docs/_kits_examples.scss +22 -0
  44. data/app/pb_kits/playbook/packs/site_styles/docs/_markdown.scss +82 -0
  45. data/app/pb_kits/playbook/packs/site_styles/docs/_spacing_tokens.scss +72 -0
  46. data/app/pb_kits/playbook/pb_avatar/_avatar.html.erb +8 -0
  47. data/app/pb_kits/playbook/pb_avatar/_avatar.jsx +62 -0
  48. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +49 -0
  49. data/app/pb_kits/playbook/pb_avatar/avatar.rb +82 -0
  50. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_default.html.erb +5 -0
  51. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_default.jsx +16 -0
  52. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_monogram.html.erb +5 -0
  53. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_monogram.jsx +16 -0
  54. data/app/pb_kits/playbook/pb_avatar/docs/example.yml +7 -0
  55. data/app/pb_kits/playbook/pb_avatar/docs/index.js +2 -0
  56. data/app/pb_kits/playbook/pb_body/_body.html.erb +4 -0
  57. data/app/pb_kits/playbook/pb_body/_body.jsx +36 -0
  58. data/app/pb_kits/playbook/pb_body/_body.scss +37 -0
  59. data/app/pb_kits/playbook/pb_body/body.rb +76 -0
  60. data/app/pb_kits/playbook/pb_body/docs/_body_dark.html.erb +3 -0
  61. data/app/pb_kits/playbook/pb_body/docs/_body_dark.jsx +14 -0
  62. data/app/pb_kits/playbook/pb_body/docs/_body_light.html.erb +3 -0
  63. data/app/pb_kits/playbook/pb_body/docs/_body_light.jsx +14 -0
  64. data/app/pb_kits/playbook/pb_body/docs/example.yml +7 -0
  65. data/app/pb_kits/playbook/pb_body/docs/index.js +2 -0
  66. data/app/pb_kits/playbook/pb_button/_button.html.erb +9 -0
  67. data/app/pb_kits/playbook/pb_button/_button.jsx +40 -0
  68. data/app/pb_kits/playbook/pb_button/_button.scss +53 -0
  69. data/app/pb_kits/playbook/pb_button/_variations.json +15 -0
  70. data/app/pb_kits/playbook/pb_button/button.rb +87 -0
  71. data/app/pb_kits/playbook/pb_button/docs/_button_dark.html.erb +3 -0
  72. data/app/pb_kits/playbook/pb_button/docs/_button_dark.jsx +14 -0
  73. data/app/pb_kits/playbook/pb_button/docs/_button_light.html.erb +3 -0
  74. data/app/pb_kits/playbook/pb_button/docs/_button_light.jsx +14 -0
  75. data/app/pb_kits/playbook/pb_button/docs/_button_sizes.html.erb +3 -0
  76. data/app/pb_kits/playbook/pb_button/docs/_button_sizes.jsx +14 -0
  77. data/app/pb_kits/playbook/pb_button/docs/example.yml +9 -0
  78. data/app/pb_kits/playbook/pb_button/docs/index.js +3 -0
  79. data/app/pb_kits/playbook/pb_caption/_caption.html.erb +2 -0
  80. data/app/pb_kits/playbook/pb_caption/_caption.jsx +39 -0
  81. data/app/pb_kits/playbook/pb_caption/_caption.scss +5 -0
  82. data/app/pb_kits/playbook/pb_caption/_caption_lg.scss +5 -0
  83. data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +23 -0
  84. data/app/pb_kits/playbook/pb_caption/caption.rb +78 -0
  85. data/app/pb_kits/playbook/pb_caption/docs/_caption_dark.html.erb +2 -0
  86. data/app/pb_kits/playbook/pb_caption/docs/_caption_dark.jsx +13 -0
  87. data/app/pb_kits/playbook/pb_caption/docs/_caption_light.html.erb +2 -0
  88. data/app/pb_kits/playbook/pb_caption/docs/_caption_light.jsx +13 -0
  89. data/app/pb_kits/playbook/pb_caption/docs/example.yml +7 -0
  90. data/app/pb_kits/playbook/pb_caption/docs/index.js +2 -0
  91. data/app/pb_kits/playbook/pb_card/_card.html.erb +6 -0
  92. data/app/pb_kits/playbook/pb_card/_card.jsx +25 -0
  93. data/app/pb_kits/playbook/pb_card/_card.scss +14 -0
  94. data/app/pb_kits/playbook/pb_card/card.rb +37 -0
  95. data/app/pb_kits/playbook/pb_card/docs/_card_light.html.erb +3 -0
  96. data/app/pb_kits/playbook/pb_card/docs/_card_light.jsx +12 -0
  97. data/app/pb_kits/playbook/pb_card/docs/example.yml +5 -0
  98. data/app/pb_kits/playbook/pb_card/docs/index.js +1 -0
  99. data/app/pb_kits/playbook/pb_image/_image.html.erb +5 -0
  100. data/app/pb_kits/playbook/pb_image/_image.jsx +32 -0
  101. data/app/pb_kits/playbook/pb_image/_image.scss +15 -0
  102. data/app/pb_kits/playbook/pb_image/docs/_default_image.html.erb +1 -0
  103. data/app/pb_kits/playbook/pb_image/docs/_default_image.jsx +12 -0
  104. data/app/pb_kits/playbook/pb_image/docs/example.yml +5 -0
  105. data/app/pb_kits/playbook/pb_image/docs/index.js +1 -0
  106. data/app/pb_kits/playbook/pb_image/image.rb +53 -0
  107. data/app/pb_kits/playbook/pb_input/_input.html.erb +17 -0
  108. data/app/pb_kits/playbook/pb_input/_input.jsx +57 -0
  109. data/app/pb_kits/playbook/pb_input/_input.scss +58 -0
  110. data/app/pb_kits/playbook/pb_input/docs/_input_default.html.erb +5 -0
  111. data/app/pb_kits/playbook/pb_input/docs/_input_default.jsx +16 -0
  112. data/app/pb_kits/playbook/pb_input/docs/example.yml +5 -0
  113. data/app/pb_kits/playbook/pb_input/docs/index.js +1 -0
  114. data/app/pb_kits/playbook/pb_input/input.rb +85 -0
  115. data/app/pb_kits/playbook/pb_kit/base.rb +38 -0
  116. data/app/pb_kits/playbook/pb_layout/_body.html.erb +6 -0
  117. data/app/pb_kits/playbook/pb_layout/_body.jsx +26 -0
  118. data/app/pb_kits/playbook/pb_layout/_layout.html.erb +6 -0
  119. data/app/pb_kits/playbook/pb_layout/_layout.jsx +54 -0
  120. data/app/pb_kits/playbook/pb_layout/_layout.scss +87 -0
  121. data/app/pb_kits/playbook/pb_layout/_layout_mixin.scss +60 -0
  122. data/app/pb_kits/playbook/pb_layout/_sidebar.html.erb +6 -0
  123. data/app/pb_kits/playbook/pb_layout/_sidebar.jsx +26 -0
  124. data/app/pb_kits/playbook/pb_layout/body.rb +37 -0
  125. data/app/pb_kits/playbook/pb_layout/docs/_layout_lg.html.erb +4 -0
  126. data/app/pb_kits/playbook/pb_layout/docs/_layout_lg_dark.html.erb +4 -0
  127. data/app/pb_kits/playbook/pb_layout/docs/_layout_md.html.erb +4 -0
  128. data/app/pb_kits/playbook/pb_layout/docs/_layout_md_dark.html.erb +4 -0
  129. data/app/pb_kits/playbook/pb_layout/docs/_layout_sm.html.erb +4 -0
  130. data/app/pb_kits/playbook/pb_layout/docs/_layout_sm_dark.html.erb +4 -0
  131. data/app/pb_kits/playbook/pb_layout/docs/_layout_xl.html.erb +4 -0
  132. data/app/pb_kits/playbook/pb_layout/docs/_layout_xl_dark.html.erb +4 -0
  133. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.html.erb +4 -0
  134. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.jsx +15 -0
  135. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs_dark.html.erb +4 -0
  136. data/app/pb_kits/playbook/pb_layout/docs/example.yml +14 -0
  137. data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -0
  138. data/app/pb_kits/playbook/pb_layout/layout.rb +109 -0
  139. data/app/pb_kits/playbook/pb_layout/sidebar.rb +37 -0
  140. data/app/pb_kits/playbook/pb_list/_item.html.erb +6 -0
  141. data/app/pb_kits/playbook/pb_list/_list.html.erb +9 -0
  142. data/app/pb_kits/playbook/pb_list/_list.jsx +56 -0
  143. data/app/pb_kits/playbook/pb_list/_list.scss +94 -0
  144. data/app/pb_kits/playbook/pb_list/_list_item.jsx +26 -0
  145. data/app/pb_kits/playbook/pb_list/docs/_list_borderless.html.erb +7 -0
  146. data/app/pb_kits/playbook/pb_list/docs/_list_dark.html.erb +7 -0
  147. data/app/pb_kits/playbook/pb_list/docs/_list_dark_borderless.html.erb +7 -0
  148. data/app/pb_kits/playbook/pb_list/docs/_list_dark_lg.html.erb +7 -0
  149. data/app/pb_kits/playbook/pb_list/docs/_list_dark_ordered.html.erb +7 -0
  150. data/app/pb_kits/playbook/pb_list/docs/_list_dark_xpadding.html.erb +7 -0
  151. data/app/pb_kits/playbook/pb_list/docs/_list_default.html.erb +7 -0
  152. data/app/pb_kits/playbook/pb_list/docs/_list_default.jsx +16 -0
  153. data/app/pb_kits/playbook/pb_list/docs/_list_lg.html.erb +7 -0
  154. data/app/pb_kits/playbook/pb_list/docs/_list_ordered.html.erb +7 -0
  155. data/app/pb_kits/playbook/pb_list/docs/_list_xpadding.html.erb +7 -0
  156. data/app/pb_kits/playbook/pb_list/docs/example.yml +14 -0
  157. data/app/pb_kits/playbook/pb_list/docs/index.js +1 -0
  158. data/app/pb_kits/playbook/pb_list/item.rb +41 -0
  159. data/app/pb_kits/playbook/pb_list/list.rb +114 -0
  160. data/app/pb_kits/playbook/pb_table/_table.html.erb +12 -0
  161. data/app/pb_kits/playbook/pb_table/_table.jsx +60 -0
  162. data/app/pb_kits/playbook/pb_table/_table.scss +1 -0
  163. data/app/pb_kits/playbook/pb_table/docs/_table_container.html.erb +34 -0
  164. data/app/pb_kits/playbook/pb_table/docs/_table_container.jsx +45 -0
  165. data/app/pb_kits/playbook/pb_table/docs/_table_container_dark.html.erb +34 -0
  166. data/app/pb_kits/playbook/pb_table/docs/_table_container_dark.jsx +46 -0
  167. data/app/pb_kits/playbook/pb_table/docs/_table_dark.html.erb +34 -0
  168. data/app/pb_kits/playbook/pb_table/docs/_table_dark.jsx +45 -0
  169. data/app/pb_kits/playbook/pb_table/docs/_table_disable_hover.html.erb +34 -0
  170. data/app/pb_kits/playbook/pb_table/docs/_table_disable_hover.jsx +45 -0
  171. data/app/pb_kits/playbook/pb_table/docs/_table_lg.html.erb +34 -0
  172. data/app/pb_kits/playbook/pb_table/docs/_table_lg.jsx +43 -0
  173. data/app/pb_kits/playbook/pb_table/docs/_table_md.html.erb +34 -0
  174. data/app/pb_kits/playbook/pb_table/docs/_table_md.jsx +43 -0
  175. data/app/pb_kits/playbook/pb_table/docs/_table_multiline.html.erb +34 -0
  176. data/app/pb_kits/playbook/pb_table/docs/_table_multiline.jsx +43 -0
  177. data/app/pb_kits/playbook/pb_table/docs/_table_single_line.html.erb +48 -0
  178. data/app/pb_kits/playbook/pb_table/docs/_table_single_line.jsx +45 -0
  179. data/app/pb_kits/playbook/pb_table/docs/_table_sm.html.erb +34 -0
  180. data/app/pb_kits/playbook/pb_table/docs/_table_sm.jsx +43 -0
  181. data/app/pb_kits/playbook/pb_table/docs/example.yml +21 -0
  182. data/app/pb_kits/playbook/pb_table/docs/index.js +9 -0
  183. data/app/pb_kits/playbook/pb_table/styles/_all.scss +14 -0
  184. data/app/pb_kits/playbook/pb_table/styles/_as-cards.scss +49 -0
  185. data/app/pb_kits/playbook/pb_table/styles/_content.scss +13 -0
  186. data/app/pb_kits/playbook/pb_table/styles/_headers.scss +17 -0
  187. data/app/pb_kits/playbook/pb_table/styles/_hover.scss +66 -0
  188. data/app/pb_kits/playbook/pb_table/styles/_mixins.scss +0 -0
  189. data/app/pb_kits/playbook/pb_table/styles/_mobile.scss +138 -0
  190. data/app/pb_kits/playbook/pb_table/styles/_reset.scss +17 -0
  191. data/app/pb_kits/playbook/pb_table/styles/_single-line.scss +35 -0
  192. data/app/pb_kits/playbook/pb_table/styles/_structure.scss +39 -0
  193. data/app/pb_kits/playbook/pb_table/styles/_table-card.scss +88 -0
  194. data/app/pb_kits/playbook/pb_table/styles/_table-dark.scss +92 -0
  195. data/app/pb_kits/playbook/pb_table/styles/_variables.scss +23 -0
  196. data/app/pb_kits/playbook/pb_table/table.rb +95 -0
  197. data/app/pb_kits/playbook/pb_title/_title.html.erb +1 -0
  198. data/app/pb_kits/playbook/pb_title/_title.jsx +33 -0
  199. data/app/pb_kits/playbook/pb_title/_title.scss +32 -0
  200. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +57 -0
  201. data/app/pb_kits/playbook/pb_title/docs/_title_dark.html.erb +4 -0
  202. data/app/pb_kits/playbook/pb_title/docs/_title_dark.jsx +15 -0
  203. data/app/pb_kits/playbook/pb_title/docs/_title_light.html.erb +4 -0
  204. data/app/pb_kits/playbook/pb_title/docs/_title_light.jsx +15 -0
  205. data/app/pb_kits/playbook/pb_title/docs/example.yml +7 -0
  206. data/app/pb_kits/playbook/pb_title/docs/index.js +2 -0
  207. data/app/pb_kits/playbook/pb_title/title.rb +76 -0
  208. data/app/pb_kits/playbook/pb_vertical_nav/_item.html.erb +8 -0
  209. data/app/pb_kits/playbook/pb_vertical_nav/_item.jsx +34 -0
  210. data/app/pb_kits/playbook/pb_vertical_nav/_vertical_nav.html.erb +13 -0
  211. data/app/pb_kits/playbook/pb_vertical_nav/_vertical_nav.jsx +31 -0
  212. data/app/pb_kits/playbook/pb_vertical_nav/_vertical_nav.scss +73 -0
  213. data/app/pb_kits/playbook/pb_vertical_nav/docs/_default_nav.html.erb +5 -0
  214. data/app/pb_kits/playbook/pb_vertical_nav/docs/_default_nav.jsx +15 -0
  215. data/app/pb_kits/playbook/pb_vertical_nav/docs/example.yml +5 -0
  216. data/app/pb_kits/playbook/pb_vertical_nav/docs/index.js +1 -0
  217. data/app/pb_kits/playbook/pb_vertical_nav/item.rb +65 -0
  218. data/app/pb_kits/playbook/pb_vertical_nav/vertical_nav.rb +59 -0
  219. data/app/pb_kits/playbook/tokens/_animation-curves.scss +37 -0
  220. data/app/pb_kits/playbook/tokens/_border_radius.sass +27 -0
  221. data/app/pb_kits/playbook/tokens/_colors.scss +417 -0
  222. data/app/pb_kits/playbook/tokens/_fonts.scss +97 -0
  223. data/app/pb_kits/playbook/tokens/_line_height.scss +7 -0
  224. data/app/pb_kits/playbook/tokens/_opacity.scss +9 -0
  225. data/app/pb_kits/playbook/tokens/_positioning.scss +24 -0
  226. data/app/pb_kits/playbook/tokens/_screen_sizes.scss +30 -0
  227. data/app/pb_kits/playbook/tokens/_shadows.scss +8 -0
  228. data/app/pb_kits/playbook/tokens/_spacing.scss +27 -0
  229. data/app/pb_kits/playbook/tokens/_typography.sass +64 -0
  230. data/app/pb_kits/playbook/utilities/_background_colors.scss +21 -0
  231. data/app/pb_kits/playbook/utilities/_colors.scss +26 -0
  232. data/app/views/layouts/playbook/_nav.html.slim +3 -0
  233. data/app/views/layouts/playbook/_sidebar.html.slim +29 -0
  234. data/app/views/layouts/playbook/application.html.slim +18 -0
  235. data/app/views/layouts/playbook/fullscreen.html.slim +10 -0
  236. data/app/views/layouts/playbook/grid.html.slim +10 -0
  237. data/app/views/playbook/guides/create_kit.html.slim +16 -0
  238. data/app/views/playbook/guides/create_kit/_file_naming.html.md +2 -0
  239. data/app/views/playbook/guides/create_kit/_generator.html.md +6 -0
  240. data/app/views/playbook/guides/create_kit/_kit_examples.html.md +2 -0
  241. data/app/views/playbook/guides/create_kit/_kit_rails.html.md +2 -0
  242. data/app/views/playbook/guides/create_kit/_kit_react.html.md +2 -0
  243. data/app/views/playbook/guides/create_kit/_layout.html.md +2 -0
  244. data/app/views/playbook/guides/create_kit/_view_objects.html.md +2 -0
  245. data/app/views/playbook/guides/create_kit/_writing_sass.md +10 -0
  246. data/app/views/playbook/guides/use_nitro.html.slim +6 -0
  247. data/app/views/playbook/guides/use_nitro/_local.html.md +2 -0
  248. data/app/views/playbook/guides/use_nitro/_nitro_components.html.md +2 -0
  249. data/app/views/playbook/guides/use_nitro/_versions.html.md +2 -0
  250. data/app/views/playbook/pages/fullscreen.html.slim +10 -0
  251. data/app/views/playbook/pages/grid.html.slim +2 -0
  252. data/app/views/playbook/pages/home.html.slim +4 -0
  253. data/app/views/playbook/pages/kit_show.html.slim +14 -0
  254. data/app/views/playbook/pages/kits.html.slim +10 -0
  255. data/app/views/playbook/pages/principals/_getting_started.html.md +12 -0
  256. data/app/views/playbook/pages/principles.html.slim +5 -0
  257. data/app/views/playbook/pages/tokens.html.slim +15 -0
  258. data/app/views/playbook/pages/tokens/_pb_doc_spacing.html.slim +16 -0
  259. data/app/views/playbook/pages/utilities.html.slim +89 -0
  260. data/app/views/playbook/pages/utilities/_pb_doc_color.html.slim +14 -0
  261. data/components/Avatar/Avatar.jsx +96 -0
  262. data/components/Avatar/AvatarStory.jsx +19 -0
  263. data/components/Avatar/styles.scss +54 -0
  264. data/components/Avatar/styles.scss.flow +14 -0
  265. data/components/Badge/Badge.jsx +40 -0
  266. data/components/Badge/BadgeStory.jsx +40 -0
  267. data/components/Badge/badges.scss +167 -0
  268. data/components/Badge/labels.scss +121 -0
  269. data/components/Badge/styles.scss +4 -0
  270. data/components/Badge/styles.scss.flow +38 -0
  271. data/components/Banner/Banner.jsx +54 -0
  272. data/components/Banner/BannerStory.jsx +22 -0
  273. data/components/Banner/styles.scss +75 -0
  274. data/components/Banner/styles.scss.flow +19 -0
  275. data/components/Button/Button.jsx +75 -0
  276. data/components/Button/ButtonStory.jsx +94 -0
  277. data/components/Capping/CappingStory.jsx +21 -0
  278. data/components/Card/Card.jsx +44 -0
  279. data/components/Card/CardStory.jsx +19 -0
  280. data/components/CircleButton/CircleButton.jsx +51 -0
  281. data/components/CircleButton/CircleButtonStory.jsx +25 -0
  282. data/components/CircleButton/styles.scss +33 -0
  283. data/components/CircleButton/styles.scss.flow +6 -0
  284. data/components/CollapsibleCard/CollapsibleCard.jsx +108 -0
  285. data/components/CollapsibleCard/CollapsibleCardStory.jsx +26 -0
  286. data/components/Color/Color.jsx +55 -0
  287. data/components/Color/ColorStory.jsx +16 -0
  288. data/components/Color/styles.scss +6 -0
  289. data/components/Color/styles.scss.flow +5 -0
  290. data/components/ColorPickerInput/ColorPickerInput.jsx +99 -0
  291. data/components/ColorPickerInput/ColorPickerInputStory.jsx +37 -0
  292. data/components/ColorPickerInput/colorPickerInput.scss +10 -0
  293. data/components/ColorPickerInput/colorPickerInput.scss.flow +6 -0
  294. data/components/DOBInput/index.jsx +35 -0
  295. data/components/DOBInput/story.jsx +20 -0
  296. data/components/DOBInput/styles.scss +11 -0
  297. data/components/DOBInput/styles.scss.flow +7 -0
  298. data/components/DatePicker/DatePicker.jsx +156 -0
  299. data/components/DatePicker/DatePickerStory.jsx +22 -0
  300. data/components/DatePicker/styles.scss +6 -0
  301. data/components/DatePicker/styles.scss.flow +5 -0
  302. data/components/DateTimePicker/DateTimePicker.jsx +109 -0
  303. data/components/DateTimePicker/DateTimePickerStory.jsx +31 -0
  304. data/components/DateTimePicker/story-styles.scss +3 -0
  305. data/components/DateTimePicker/story-styles.scss.flow +5 -0
  306. data/components/DateTimePicker/styles.scss +1 -0
  307. data/components/DateTimePicker/styles.scss.flow +5 -0
  308. data/components/Errors/Errors.jsx +38 -0
  309. data/components/FileCard/FileCard.jsx +183 -0
  310. data/components/FileCard/FileCardStory.jsx +62 -0
  311. data/components/FileCard/styles.scss +81 -0
  312. data/components/FileCard/styles.scss.flow +12 -0
  313. data/components/Flip/Flip.jsx +50 -0
  314. data/components/Flip/FlipStory.jsx +85 -0
  315. data/components/Flip/styles.scss +41 -0
  316. data/components/Flip/styles.scss.flow +11 -0
  317. data/components/FlyoutPanel/FlyoutPanel.jsx +34 -0
  318. data/components/FlyoutPanel/FlyoutPanelStory.jsx +36 -0
  319. data/components/FlyoutPanel/flyout_panel.scss +33 -0
  320. data/components/FlyoutPanel/flyout_panel.scss.flow +11 -0
  321. data/components/Grade/Grade.jsx +55 -0
  322. data/components/Grade/GradeStory.jsx +18 -0
  323. data/components/Grade/grade.scss +39 -0
  324. data/components/Grade/grade.scss.flow +6 -0
  325. data/components/Highlight/Highlight.jsx +39 -0
  326. data/components/Highlight/HighlightStory.jsx +22 -0
  327. data/components/Highlight/styles.scss +24 -0
  328. data/components/Highlight/styles.scss.flow +17 -0
  329. data/components/Icon/Icon.jsx +54 -0
  330. data/components/Icon/IconButtonStory.jsx +20 -0
  331. data/components/Icon/IconStory.jsx +25 -0
  332. data/components/IconToggle/IconToggle.jsx +56 -0
  333. data/components/IconToggle/IconToggleStory.jsx +24 -0
  334. data/components/Milestones/MilestoneItem.jsx +47 -0
  335. data/components/Milestones/MilestoneItemStory.jsx +25 -0
  336. data/components/Milestones/Milestones.jsx +51 -0
  337. data/components/Milestones/MilestonesStory.jsx +30 -0
  338. data/components/Milestones/milestones.scss +19 -0
  339. data/components/Milestones/milestones.scss.flow +7 -0
  340. data/components/Milestones/milestones_item.scss +157 -0
  341. data/components/Milestones/milestones_item.scss.flow +13 -0
  342. data/components/Milestones/milestones_variables.scss +11 -0
  343. data/components/Modal/ModalStory.jsx +29 -0
  344. data/components/MonogramAvatar/MonogramAvatar.jsx +91 -0
  345. data/components/MonogramAvatar/MonogramAvatarStory.jsx +21 -0
  346. data/components/MonogramAvatar/monogram_avatar.scss +54 -0
  347. data/components/MonogramAvatar/monogram_avatar.scss.flow +10 -0
  348. data/components/Panel/Panel.jsx +159 -0
  349. data/components/Panel/PanelStory.jsx +23 -0
  350. data/components/Panel/panel.scss +32 -0
  351. data/components/Panel/panel.scss.flow +12 -0
  352. data/components/PanelGroup/PanelGroup.jsx +121 -0
  353. data/components/PanelGroup/PanelGroup.scss +96 -0
  354. data/components/PanelGroup/PanelGroup.scss.flow +6 -0
  355. data/components/PanelGroup/PanelGroupStory.jsx +112 -0
  356. data/components/SearchCollectionSelect/SearchCollectionSelect.jsx +29 -0
  357. data/components/SearchCollectionSelect/SearchCollectionSelectStory.jsx +48 -0
  358. data/components/SearchCollectionSelect/searchCollectionSelect.scss +0 -0
  359. data/components/SideModal/SideModalStory.jsx +31 -0
  360. data/components/Spinner/Spinner.jsx +80 -0
  361. data/components/Spinner/SpinnerStory.jsx +21 -0
  362. data/components/Spinner/spinner.scss +6 -0
  363. data/components/Spinner/spinner.scss.flow +5 -0
  364. data/components/StepMeter/StepMeter.jsx +75 -0
  365. data/components/StepMeter/StepMeterStory.jsx +25 -0
  366. data/components/StepMeter/step_meter.scss +120 -0
  367. data/components/StepMeter/step_meter.scss.flow +9 -0
  368. data/components/Survey/Survey.jsx +190 -0
  369. data/components/Survey/SurveyStory.jsx +125 -0
  370. data/components/Survey/survey.scss +75 -0
  371. data/components/Survey/survey.scss.flow +11 -0
  372. data/components/Tab/Tab.jsx +70 -0
  373. data/components/Tab/tab.scss +25 -0
  374. data/components/Tab/tab.scss.flow +6 -0
  375. data/components/TabList/TabList.jsx +35 -0
  376. data/components/TabList/TabListStory.jsx +31 -0
  377. data/components/TabList/tabList.scss +5 -0
  378. data/components/TabList/tabList.scss.flow +5 -0
  379. data/components/Text/Text.jsx +53 -0
  380. data/components/Text/TextStory.jsx +23 -0
  381. data/components/Text/styles.scss +3 -0
  382. data/components/Text/styles.scss.flow +123 -0
  383. data/components/Text/text.scss +35 -0
  384. data/components/TextInput/TextInput.jsx +95 -0
  385. data/components/TextInput/TextInputStory.jsx +23 -0
  386. data/components/TextInput/form-control.scss +96 -0
  387. data/components/TextInput/styles.scss +3 -0
  388. data/components/TextInput/styles.scss.flow +7 -0
  389. data/components/TimePicker/TimePicker.jsx +218 -0
  390. data/components/TimePicker/TimePickerStory.jsx +22 -0
  391. data/components/TimePicker/styles.scss +1 -0
  392. data/components/TimePicker/styles.scss.flow +5 -0
  393. data/components/ToggleButton/ToggleButton.jsx +68 -0
  394. data/components/ToggleButton/ToggleButtonStory.jsx +46 -0
  395. data/components/ToggleButton/toggleButton.scss +70 -0
  396. data/components/ToggleButton/toggleButton.scss.flow +14 -0
  397. data/components/UserStamp/UserStamp.jsx +40 -0
  398. data/components/UserStamp/UserStampStory.jsx +22 -0
  399. data/components/UserStamp/styles.scss +6 -0
  400. data/components/UserStamp/styles.scss.flow +7 -0
  401. data/components/Wip/Wip.jsx +34 -0
  402. data/components/index.js +33 -0
  403. data/components/types.js +21 -0
  404. data/db/migrate/20171025045845_devise_create_users.rb +42 -0
  405. data/db/migrate/20171025050917_create_sections.rb +9 -0
  406. data/db/migrate/20171025050923_create_categories.rb +10 -0
  407. data/db/migrate/20171025050930_create_pages.rb +12 -0
  408. data/db/migrate/20171025050935_create_tags.rb +9 -0
  409. data/db/migrate/20171025050941_create_types.rb +10 -0
  410. data/db/migrate/20171025051118_create_page_tags.rb +8 -0
  411. data/db/migrate/20171025051848_add_user_ref_to_pages.rb +5 -0
  412. data/db/migrate/20171025051853_add_type_ref_to_pages.rb +5 -0
  413. data/db/migrate/20171025051859_add_page_ref_to_page_tags.rb +5 -0
  414. data/db/migrate/20171025051904_add_tag_ref_to_page_tags.rb +5 -0
  415. data/db/migrate/20171025052205_add_section_ref_to_categories.rb +5 -0
  416. data/db/migrate/20171025052211_add_category_ref_to_pages.rb +5 -0
  417. data/db/migrate/20180327194658_add_nitro_id_to_user.rb +14 -0
  418. data/db/migrate/20180327195455_create_friendly_id_slugs.rb +15 -0
  419. data/db/migrate/20180328142634_drop_types.rb +5 -0
  420. data/db/migrate/20180328145054_remove_type_id_from_pages.rb +5 -0
  421. data/db/migrate/20180328145144_drop_friendly_id_slugs.rb +6 -0
  422. data/db/migrate/20180518133907_add_page_ref_to_pages.rb +5 -0
  423. data/db/seeds.rb +7 -0
  424. data/fonts/fontawesome.js +1978 -0
  425. data/fonts/regular.js +1217 -0
  426. data/lib/generators/kit/USAGE +32 -0
  427. data/lib/generators/kit/kit_generator.rb +86 -0
  428. data/lib/generators/kit/templates/html.erb +3 -0
  429. data/lib/generators/kit/templates/javascript.erb +4 -0
  430. data/lib/generators/kit/templates/jsx.erb +31 -0
  431. data/lib/generators/kit/templates/logo.txt +28 -0
  432. data/lib/generators/kit/templates/ruby.erb +48 -0
  433. data/lib/generators/kit/templates/scss.erb +0 -0
  434. data/lib/generators/kit/templates/storyrails.erb +2 -0
  435. data/lib/generators/kit/templates/storyreact.erb +2 -0
  436. data/lib/generators/kit/templates/variations.erb +10 -0
  437. data/lib/playbook.rb +32 -0
  438. data/lib/playbook/engine.rb +34 -0
  439. data/lib/playbook/version.rb +3 -0
  440. data/lib/playbook_ui.rb +3 -0
  441. data/lib/tasks/db.rake +8 -0
  442. data/lib/tasks/playbook_tasks.rake +24 -0
  443. data/stories/basic.js +18 -0
  444. data/stories/complex.js +15 -0
  445. data/stories/form.js +2 -0
  446. data/stories/index.js +29 -0
  447. metadata +832 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2505cdf7de275c30953f042a2f9ef0bf6c010a338bb453f553b28426b95f635d
4
+ data.tar.gz: 5574dd698a59039c551ddc6f4d3275c6caf31130a00c376243e76338d51bf9e3
5
+ SHA512:
6
+ metadata.gz: '0395f61c2b7e381e59370b77e7bd341c96dcc82d5aa2506ab025eedee7712f7fcbf523702925b0c85b751b838a5a332505208c54a7b6e70ea4a8e981c27761c1'
7
+ data.tar.gz: 6516079f6f73bd9bc166af275470730385d3e7e2b8e79844e74b33fa8c6c6934b30a99f3eac8d69fa8624639a82ff668d80bc40fbeb5400814c193b4e626c43a
data/README.md ADDED
@@ -0,0 +1,316 @@
1
+ # UI Playbook
2
+
3
+ UIX Styleguide & Documentation
4
+
5
+ #### Demo
6
+ [View Demo](http://afternoon-refuge-87160.herokuapp.com/)
7
+
8
+ ## Requirements
9
+
10
+ - Docker 17.09 or later
11
+ - Docker Compose 1.17.1 or later
12
+
13
+ ## Getting started
14
+
15
+ 1. Run `make start`
16
+ 1. Bootstrap the database: `docker-compose run web bin/rails db:setup`
17
+ 1. open [http://localhost:8080](http://localhost:8080)
18
+
19
+ When making changes to the Gemfile:
20
+
21
+ * Stop the `make start` process
22
+ * Run `make bundle` to (un-)install gems and update the `Gemfile.lock`
23
+ * Re-start the server with `make start`
24
+
25
+ To run the tests, do `make test`. To launch a shell in the container run `make shell`, or to launch a Rails console run `make console`
26
+
27
+ To clean up this project from your local machine, run `make stop`, which will drop all containers and networks associated with this project. To purge all resources, do `make clean`, which also removes images and volumes for a blank slate.
28
+
29
+ ### Configuration
30
+
31
+ The application is configured through a set of environment variables which can be tweaked in the `.env` file for local development; these should not be committed unless they are generally applicable.
32
+
33
+ ## Deployments
34
+
35
+ * A staging environment is automatically deployed on every master build. Manual deployments are possible (via `make deploy cluster=APP-HQ environment=staging tag=PR-X-$SHA1-$BUILDNUMBER`) but are discouraged.
36
+ * A production environment that is automatically deployed on every master build. Manual deployments are strongly discouraged.
37
+
38
+ These environments are deployed from the same container used for local development, which is built by CI on every commit.
39
+
40
+ In order to work with these, you'll need to have [setup APP access](https://github.com/powerhome/APP#getting-access).
41
+
42
+ ### Configuring the application deployed to APP
43
+
44
+ The Helm chart stored in `charts/playbook` defines the resource types deployed to the application platform as templates which are customised with specific values for each environment. The standard values are held in `charts/playbook/values.yaml`, while per-environment overrides (including secrets) are stored in `config/deploy/[environment]/[values|secrets].yaml`. Standard values are in plain text, while secrets (API keys etc) are encrypted (more below). These templates and values may be modified to affect the deployment, but attention must be given to any template or defaults changes to ensure they apply correctly to all environments, and also to minimizing the differences between environments where possible.
45
+
46
+ The most common changes expected to be required are to the set of environment variables passed to the app at runtime. These values are passed to the app via the `spec -> template -> spec -> containers -> env` entry in the deployment template, where the values are extracted from those provided to the template or from a Kubernetes Secret. In the plain-text case, the values simply need to be defined in a values.yaml to be interpolated. In the case of secrets, they must be first passed into the secret template. Examples of both exist and should be followed.
47
+
48
+ #### Dealing with encrypted secrets
49
+
50
+ Encrypted secrets are perhaps the most complex part of the deployment setup. These secrets must be known to the app at runtime, for example to connect to the Nitro API, and must be included in the application repository in order to simplify coordination of configuration changes, but must not be stored at rest in plain text. They are thus encrypted in `secrets.yaml` files in the git repository, in such a way that developers can decrypt them (to make changes) and Jenkins can decrypt them (to pass to Helm for deployment). The encryption is done using GPG keys using [`helm-secrets`](https://github.com/futuresimple/helm-secrets) and [`sops`](https://github.com/mozilla/sops).
51
+
52
+ To begin managing secrets, one must install these dependencies (for local use) or use the `make secrets` container to manage them. An example of usage of the container:
53
+
54
+ ```
55
+ [Thu Feb 22 08:59:09]$ make secrets
56
+ docker run --tty --interactive --rm --volume ~/.kube:/root/.kube --volume ~/.gnupg/secring.gpg:/root/.gnupg/secring.gpg --volume ~/.gnupg/pubring.gpg:/root/.gnupg/pubring.gpg --volume ~/.gnupg/private-keys-v1.d:/root/.gnupg/private-keys-v1.d --volume /Users/garettarrowood/Power/playbook:/app --entrypoint /bin/gpg-agent-background docker-registry.powerhrg.com/platform/deployer:master-6cf477240dd6b4f180f0f8da980805ddf6fc4fe0-18 bash --login
57
+ root@4ead1d121f65:/app# helm secrets view config/deploy/staging/secrets.yaml
58
+ ```
59
+
60
+ #### Common tasks:
61
+
62
+ ##### Requesting access to secrets
63
+
64
+ 1. Find your GPG key fingerprint using `gpg --list-secret-keys`. Generate a key if you don't already have one (see https://help.github.com/articles/generating-a-new-gpg-key/).
65
+ 1. Add your key to the keyring: `make addKeyToRing fingerprint=[FINGERPRINT]`
66
+ 1. Include your key fingerprint in `.sops.yaml`.
67
+ 1. Submit a PR including these changes.
68
+ 1. Ask someone who already has access to follow the grant routine below.
69
+
70
+ ##### Granting access to secrets
71
+
72
+ 1. Checkout the access request PR.
73
+ 1. Run `make grantSecretAccess fingerprint=[THE REQUESTED FINGERPRINT]`.
74
+ 1. Commit the changes to `secrets.yaml` files that result and push to the PR.
75
+ 1. Ask the requester to confirm they can read the secrets, then merge the PR.
76
+
77
+ ##### Reading secrets
78
+
79
+ Run `helm secrets view config/deploy/[ENVIRONMENT]/secrets.yaml`.
80
+
81
+ ##### Editing secrets
82
+
83
+ 1. Run `helm secrets edit config/deploy/[ENVIRONMENT]/secrets.yaml`.
84
+ 1. Make your changes and save the file.
85
+ 1. Commit the modified secrets file.
86
+
87
+
88
+
89
+ ---
90
+
91
+ # Old Storybook
92
+
93
+ This repo provides the tools to implement view components which make up the visual appearance of Nitro.
94
+
95
+ * Stylesheets for the app navigation and general appearance
96
+ * Self-contained React components for use in building views
97
+
98
+ The intent of this repo is to provide a base on which other UIs can be built such that they maintain visual consistency and the Nitro brand.
99
+
100
+
101
+ - [Quick Start](#quick-start)
102
+ - [Local Storybook Development in Nitro-Web](#local-storybook-development-in-nitro-web)
103
+ - [Other options for storybook in Nitro-Web](#other-options-for-storybook-in-nitro-web)
104
+ - [Getting Your Changes Into Nitro-Web](#getting-your-changes-into-nitro-web)
105
+ - [Creating Components](#creating-components)
106
+ - [Converting Existing Components](#converting-existing-components)
107
+
108
+
109
+ ## Quick Start
110
+ From the current project directory, run:
111
+
112
+ 1. ensure you are running proper node version (see `package.json` => `engines`)
113
+ 2. `yarn install`
114
+ 3. `yarn run storybook`
115
+ 4. navigate to [localhost:9001](http://localhost:9001)
116
+
117
+ ---
118
+
119
+ ## Local Storybook Development in Nitro-Web
120
+ Its easy to create and test out a component on nitro in real time, even with hot reload. You can point your local storybook folder as you develop it.
121
+
122
+ ##### Update the storybook in the Gemfile to a local path
123
+ `gem "playbook", :path => "/path/to/storybook/locally"`
124
+
125
+ ##### Update the storybook in package.json to a local path
126
+ `”nitro-storybook": "/path/to/storybook/locally"`
127
+
128
+ > if you have any problems with assets not showing try running:
129
+ `bundle exec rake assets:clobber`
130
+
131
+
132
+ ---
133
+
134
+ ## Other options for storybook in Nitro-Web
135
+ You’ll need to point to a something published on GitHub when your ready to deploy it. Here are some options for you:
136
+
137
+ ##### Gemfile - Tag
138
+ `gem "playbook", git: "git@github.com:powerhome/nitro-styleguide.git", tag: "v1.2.1"`
139
+
140
+ ##### Gemfile - SHA
141
+ `gem "playbook", git: "git@github.com:powerhome/nitro-styleguide.git", ref: "4aded"`
142
+
143
+ ##### Gemfile - Branch
144
+ `gem "playbook", git: "git@github.com:powerhome/nitro-styleguide.git", branch: "branchname"`
145
+
146
+ ##### package.json - Branch
147
+ `"nitro-storybook": "git+ssh://git@github.com/powerhome/nitro-storybook.git#branchname",`
148
+
149
+
150
+ ---
151
+
152
+ ## Getting Your Changes Into Nitro-Web
153
+
154
+ ### 1. Increase your version
155
+
156
+ Check the [releases](https://github.com/powerhome/nitro-storybook/releases) and increase your version by 1 in the following files:
157
+
158
+ ```
159
+ lib/playbook/version.rb
160
+ package.json
161
+ ```
162
+
163
+ Be sure and run the following anytime you version up:
164
+
165
+ `yarn install && bundle install`
166
+
167
+
168
+ ### 2. Prep a Storybook PR
169
+
170
+ Get your `nitro-storybook` PR approved and merged into the `nitro-storybook`'s `master` branch.
171
+
172
+ ### 3. Create a Tag & Release
173
+
174
+ Once your merged you need to create a tag so we can reference this version. Here are some easy ways to create and delete tags:
175
+
176
+ ##### Add A Tag
177
+ ```
178
+ git tag v1.0.1
179
+ git push origin v1.0.1
180
+ ```
181
+
182
+ ##### Remove A Tag
183
+ ```
184
+ git tag -d v1.0.1
185
+ git push --delete origin v1.0.1
186
+ ```
187
+
188
+ ### 4. Update references in Nitro Web
189
+
190
+ ##### Package.json
191
+ `"nitro-storybook": "git+ssh://git@github.com/powerhome/nitro-storybook.git#v1.9.2",`
192
+
193
+ ##### Gemfile (Usually 4 Spots)
194
+ ```
195
+ gem "playbook", git: "git@github.com:powerhome/nitro-storybook.git", tag: "v1.9.2"
196
+ ```
197
+
198
+ If your updated styling doesn’t show up, you may have old assets you need to remove.
199
+ `bundle exec rake assets:clobber`
200
+
201
+ ---
202
+
203
+ ## Creating Components
204
+
205
+ Creation of new components requires a bit of forethought. Ask yourself these questions first:
206
+
207
+ 1. Does the component already exist in `nitro_react` ?
208
+ 1. Yes - see [Converting Existing Components](#converting-existing-components)
209
+ 1. No - continue
210
+ 1. Ensure you are familiar with these concepts:
211
+ - using Flow.js (install tooling in your editor/IDE)
212
+ - creating "dumb components" in React - your new component **will not** need to be concerned with XHR requests, servers, ect.
213
+ - ESLint (install tooling in your editor/IDE)
214
+ - CSSModules
215
+ - Composing complex React components/organisms (so that you don't create them here!)
216
+ - [Storybook]()
217
+
218
+ ### New React Component
219
+
220
+ Here are the steps to creating a new `Foo` component (in order):
221
+
222
+ 1. Create a new directory under `/components` named `Foo`
223
+ 1. Create `Foo.jsx` inside the directory with the contents:
224
+ ```javascript
225
+ /* @flow */
226
+
227
+ import React from 'react'
228
+
229
+ type Props = {}
230
+
231
+ export default class Foo extends React.Component<Props> {
232
+ static defaultProps = {}
233
+ props: Props
234
+ render() {
235
+ return <span>{`I'm a Foo`}</span>
236
+ }
237
+ }
238
+
239
+ ```
240
+ 1. Create `styles.scss` inside the directory with the contents:
241
+ ```scss
242
+ .foo {}
243
+ ```
244
+ 1. Add the stylesheet as an import by adding this line:
245
+ ```javascript
246
+ import styles from './styles.scss'
247
+ ```
248
+ 1. Then make use of the import by adding `styles.foo` as the `className`:
249
+ ```javascript
250
+ render() {
251
+ return <span className={styles.foo}>{`I'm a Foo`}</span>
252
+ }
253
+ ```
254
+ 1. Add `Foo.jsx` to the component index in `components/index.js`
255
+ ```javascript
256
+ export Foo from './Foo/Foo.jsx'
257
+ ```
258
+
259
+ #### Create the Story
260
+
261
+ 1. Within the same directory, create a `FooStory.jsx` with the contents:
262
+ ```javascript
263
+ import React from "react"
264
+ import Foo from "./Foo"
265
+
266
+ import { text, select, boolean } from "@storybook/addon-knobs"
267
+
268
+ export default function FooStory(stories) {
269
+ stories.add("Foo",
270
+ () => {
271
+ let props = {}
272
+ return (
273
+ <Foo {...props}/>
274
+ )
275
+ }
276
+ )
277
+ }
278
+ ```
279
+ 1. Add the story to the appropriate story index. This will depend on the intent of your component. `Foo` is pretty simply 😁, hence we will add it to `/stories/basic.js` like so:
280
+ ```javascript
281
+ export FooStory from '../components/Foo/FooStory'
282
+ ```
283
+ This will add your `Foo` story to the categoy "Basic Components" in Storybook
284
+
285
+ ---
286
+
287
+ ## Converting Existing Components
288
+
289
+ Conversion of existing components in `nitro_react` is a little different since we already have a decent class structure in the jsx component. There are, however, a few considerations:
290
+
291
+ - Use Flow.js types instead of `PropTypes`
292
+ - use `class` instead of `function` (see the examples below)
293
+ - Try and fix as many eslint and Flow warnings as possible - this is your chance and the time is now! 😬 💀
294
+
295
+ 1. Create a `Props` flow type
296
+ ```javascript
297
+ type Props = {
298
+ children?: Array<React.Node>,
299
+ bold: boolean,
300
+ italic: boolean,
301
+ className: string,
302
+ }
303
+ ```
304
+ 1. Add the type to your class
305
+ ```javascript
306
+ export default class Foo extends React.Component<Props> {
307
+ static defaultProps = {}
308
+ props: Props
309
+ ...
310
+ ```
311
+ 1. You can still deconstruct `this.props` in any of your methods in the normal way
312
+ ```javascript
313
+ const {bar} = this.props
314
+ ```
315
+ 1. Lint your code `yarn run lint`
316
+ 1. For some lint warning you can `yarn run lint-fix` which will automagically fix things like indentation.
data/Rakefile ADDED
@@ -0,0 +1,32 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Playbook'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+ load 'rails/tasks/statistics.rake'
21
+
22
+ require 'bundler/gem_tasks'
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'test'
28
+ t.pattern = 'spec/**/*_spec.rb'
29
+ t.verbose = false
30
+ end
31
+
32
+ task default: :test
@@ -0,0 +1,2 @@
1
+ //= link_directory ../javascripts/playbook .js
2
+ //= link_directory ../stylesheets/playbook .css
Binary file
Binary file
@@ -0,0 +1 @@
1
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32px" height="22px"><title>select-arrow</title><g><polygon style="fill:#999999;" points="11.898,14.077 2.389,4.066 0.512,5.963 11.898,17.95 23.488,5.963 21.596,4.049 "/></g></svg>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="15px" height="12px" viewBox="0 0 15 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
4
+ <title>check</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <g id="Icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7
+ <g id="Branding" transform="translate(-432.000000, -324.000000)" fill="#FFFFFF">
8
+ <path d="M445.124968,324.593777 C445.187467,324.531277 445.270801,324.500027 445.374967,324.500027 C445.479133,324.500027 445.572883,324.531277 445.656216,324.593777 L446.531214,325.500025 C446.614547,325.562525 446.656214,325.645858 446.656214,325.750024 C446.656214,325.854191 446.614547,325.94794 446.531214,326.031274 L437.156237,335.406251 C437.093737,335.468751 437.010403,335.500001 436.906237,335.500001 C436.802071,335.500001 436.708321,335.468751 436.624988,335.406251 L432.468748,331.218761 C432.385414,331.156262 432.343748,331.072928 432.343748,330.968762 C432.343748,330.864596 432.385414,330.770846 432.468748,330.687513 L433.343746,329.812515 C433.427079,329.729181 433.520829,329.687515 433.624995,329.687515 C433.729161,329.687515 433.812494,329.729181 433.874994,329.812515 L436.906237,332.843758 L445.124968,324.593777 Z" id="check"></path>
9
+ </g>
10
+ </g>
11
+ </svg>
@@ -0,0 +1,10 @@
1
+ module Playbook
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+
5
+ helper Webpacker::Helper
6
+ helper Playbook::PbKitHelper
7
+ helper Playbook::PbDocHelper
8
+ append_view_path Playbook::Engine.root + "app/pb_kits"
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ require_dependency "playbook/application_controller"
2
+
3
+ module Playbook
4
+ class GuidesController < ApplicationController
5
+ def create_kit; end
6
+ def use_nitro; end
7
+ end
8
+ end
@@ -0,0 +1,50 @@
1
+ require_dependency "playbook/application_controller"
2
+ require 'yaml'
3
+
4
+ module Playbook
5
+ class PagesController < ApplicationController
6
+ before_action :set_kit, only: [:kit_show_rails, :kit_show_react]
7
+
8
+
9
+ def home
10
+ end
11
+
12
+ def utilities
13
+ end
14
+
15
+ def tokens
16
+ end
17
+
18
+ def kits
19
+ params[:type] ||= "rails"
20
+ @type = params[:type]
21
+ end
22
+ def principles
23
+ end
24
+
25
+ def fullscreen
26
+ render layout: "layouts/playbook/fullscreen"
27
+ end
28
+
29
+ def grid
30
+ render layout: "layouts/playbook/grid"
31
+ end
32
+
33
+ def kit_show_rails
34
+ render template: 'playbook/pages/kit_show'
35
+ end
36
+ def kit_show_react
37
+ render template: 'playbook/pages/kit_show'
38
+ end
39
+
40
+ private
41
+ def set_kit
42
+ menu = MENU["kits"]
43
+ unless menu.include?(params[:name])
44
+ redirect_to root_path
45
+ else
46
+ @kit = params[:name]
47
+ end
48
+ end
49
+ end
50
+ end