voom-presenters 0.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -1
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. data/.github/ISSUE_TEMPLATE/questions-support.md +10 -0
  6. data/.github/workflows/semantic-release.yml +39 -0
  7. data/.gitignore +3 -2
  8. data/.releaserc +8 -0
  9. data/.ruby-version +2 -1
  10. data/CHANGELOG.md +64 -114
  11. data/CONTRIBUTING.md +60 -0
  12. data/Gemfile +12 -3
  13. data/Gemfile.lock +83 -45
  14. data/Procfile +1 -0
  15. data/README.md +41 -39
  16. data/app/demo/component_status.pom +1 -1
  17. data/app/demo/components/avatars.pom +40 -0
  18. data/app/demo/components/cards.pom +11 -4
  19. data/app/demo/components/chips.pom +61 -54
  20. data/app/demo/components/content.pom +96 -16
  21. data/app/demo/components/dialogs.pom +175 -6
  22. data/app/demo/components/file_inputs.pom +38 -2
  23. data/app/demo/components/google_maps.pom +6 -1
  24. data/app/demo/components/headers.pom +80 -20
  25. data/app/demo/components/icons.pom +86 -55
  26. data/app/demo/components/image_lists.pom +100 -0
  27. data/app/demo/components/images.pom +45 -0
  28. data/app/demo/components/layouts.pom +3 -25
  29. data/app/demo/components/lists.pom +24 -4
  30. data/app/demo/components/menus.pom +14 -4
  31. data/app/demo/components/nav/menu.pom +38 -7
  32. data/app/demo/components/nav/pattern_menu.pom +2 -2
  33. data/app/demo/components/number_fields.pom +53 -0
  34. data/app/demo/components/padding.pom +96 -0
  35. data/app/demo/components/progress.pom +71 -0
  36. data/app/demo/components/selects.pom +44 -5
  37. data/app/demo/components/sliders.pom +5 -0
  38. data/app/demo/components/tab_bars.pom +15 -0
  39. data/app/demo/components/tables.pom +51 -40
  40. data/app/demo/components/text_areas.pom +23 -16
  41. data/app/demo/components/text_fields.pom +61 -15
  42. data/app/demo/components/toggles.pom +35 -4
  43. data/app/demo/components/tooltips.pom +8 -4
  44. data/app/demo/components/unordered_list.pom +81 -0
  45. data/app/demo/custom_css.pom +37 -0
  46. data/app/demo/events/actions/autocomplete.pom +32 -0
  47. data/app/demo/events/actions/clear.pom +5 -3
  48. data/app/demo/events/actions/dialogs/discard.pom +9 -0
  49. data/app/demo/events/actions/dialogs/show_dialog.pom +4 -2
  50. data/app/demo/events/actions/last_response.pom +40 -0
  51. data/app/demo/events/actions/prompt_if_dirty.pom +54 -0
  52. data/app/demo/events/content_as_form.pom +313 -0
  53. data/app/demo/events/nav/drawer.pom +7 -3
  54. data/app/demo/events/parallel.pom +44 -0
  55. data/app/demo/nav/top_nav.pom +12 -0
  56. data/app/demo/patterns/drag_drop.pom +89 -0
  57. data/app/demo/patterns/floating_card.pom +29 -0
  58. data/app/demo/patterns/search_select.pom +9 -7
  59. data/app/demo/plugins/chart.pom +254 -0
  60. data/app/demo/plugins/image_crop.pom +44 -0
  61. data/app/demo/plugins/index.pom +29 -0
  62. data/app/demo/plugins/nav/drawer.pom +19 -0
  63. data/app/demo/shared/context_list.pom +1 -1
  64. data/app/demo/styles.pom +3 -1
  65. data/bin/console +4 -4
  66. data/bin/presenters +3 -0
  67. data/component-status.yml +15 -15
  68. data/config.ru +20 -10
  69. data/docs/settings.md +81 -0
  70. data/lib/hash_ext/traverse.rb +14 -0
  71. data/lib/voom.rb +25 -0
  72. data/lib/voom/container_methods.rb +2 -2
  73. data/lib/voom/engine.rb +5 -0
  74. data/lib/voom/presenters/api/app.rb +31 -11
  75. data/lib/voom/presenters/api/router.rb +3 -49
  76. data/lib/voom/presenters/app.rb +3 -3
  77. data/lib/voom/presenters/cli.rb +28 -0
  78. data/lib/voom/presenters/demo/dragon_drop.rb +48 -0
  79. data/lib/voom/presenters/demo/echo.rb +2 -0
  80. data/lib/voom/presenters/demo/slow.rb +18 -0
  81. data/lib/voom/presenters/dsl/components/actions/autocomplete.rb +15 -0
  82. data/lib/voom/presenters/dsl/components/actions/base.rb +36 -8
  83. data/lib/voom/presenters/dsl/components/actions/clear.rb +0 -2
  84. data/lib/voom/presenters/dsl/components/actions/close_dialog.rb +17 -0
  85. data/lib/voom/presenters/dsl/components/actions/deletes.rb +0 -2
  86. data/lib/voom/presenters/dsl/components/actions/dialog.rb +0 -2
  87. data/lib/voom/presenters/dsl/components/actions/loads.rb +5 -6
  88. data/lib/voom/presenters/dsl/components/actions/navigates.rb +0 -2
  89. data/lib/voom/presenters/dsl/components/actions/post_message.rb +17 -0
  90. data/lib/voom/presenters/dsl/components/actions/posts.rb +5 -2
  91. data/lib/voom/presenters/dsl/components/actions/prompt_if_dirty.rb +15 -0
  92. data/lib/voom/presenters/dsl/components/actions/remove.rb +0 -2
  93. data/lib/voom/presenters/dsl/components/actions/replaces.rb +4 -4
  94. data/lib/voom/presenters/dsl/components/actions/snackbar.rb +0 -2
  95. data/lib/voom/presenters/dsl/components/actions/stepper.rb +0 -2
  96. data/lib/voom/presenters/dsl/components/actions/toggle_disabled.rb +15 -0
  97. data/lib/voom/presenters/dsl/components/actions/toggle_visibility.rb +0 -2
  98. data/lib/voom/presenters/dsl/components/actions/updates.rb +5 -2
  99. data/lib/voom/presenters/dsl/components/avatar.rb +4 -8
  100. data/lib/voom/presenters/dsl/components/badge.rb +0 -2
  101. data/lib/voom/presenters/dsl/components/base.rb +25 -18
  102. data/lib/voom/presenters/dsl/components/button.rb +15 -11
  103. data/lib/voom/presenters/dsl/components/card.rb +49 -36
  104. data/lib/voom/presenters/dsl/components/checkbox.rb +0 -2
  105. data/lib/voom/presenters/dsl/components/chip.rb +5 -7
  106. data/lib/voom/presenters/dsl/components/chipset.rb +33 -0
  107. data/lib/voom/presenters/dsl/components/content.rb +28 -18
  108. data/lib/voom/presenters/dsl/components/datetime_base.rb +0 -2
  109. data/lib/voom/presenters/dsl/components/datetime_field.rb +0 -2
  110. data/lib/voom/presenters/dsl/components/dialog.rb +36 -12
  111. data/lib/voom/presenters/dsl/components/drawer.rb +9 -6
  112. data/lib/voom/presenters/dsl/components/event.rb +106 -65
  113. data/lib/voom/presenters/dsl/components/event_base.rb +1 -3
  114. data/lib/voom/presenters/dsl/components/expansion_panel.rb +0 -3
  115. data/lib/voom/presenters/dsl/components/file_input.rb +18 -6
  116. data/lib/voom/presenters/dsl/components/footer.rb +2 -2
  117. data/lib/voom/presenters/dsl/components/form.rb +2 -17
  118. data/lib/voom/presenters/dsl/components/grid.rb +52 -50
  119. data/lib/voom/presenters/dsl/components/header.rb +17 -1
  120. data/lib/voom/presenters/dsl/components/hidden_field.rb +0 -2
  121. data/lib/voom/presenters/dsl/components/icon.rb +2 -4
  122. data/lib/voom/presenters/dsl/components/icon_base.rb +5 -7
  123. data/lib/voom/presenters/dsl/components/icon_toggle.rb +2 -4
  124. data/lib/voom/presenters/dsl/components/image.rb +61 -13
  125. data/lib/voom/presenters/dsl/components/image_list.rb +43 -0
  126. data/lib/voom/presenters/dsl/components/input.rb +14 -5
  127. data/lib/voom/presenters/dsl/components/link.rb +33 -0
  128. data/lib/voom/presenters/dsl/components/list.rb +6 -13
  129. data/lib/voom/presenters/dsl/components/lists/action.rb +9 -11
  130. data/lib/voom/presenters/dsl/components/lists/actions.rb +0 -3
  131. data/lib/voom/presenters/dsl/components/lists/line.rb +27 -15
  132. data/lib/voom/presenters/dsl/components/menu.rb +51 -9
  133. data/lib/voom/presenters/dsl/components/mixins/append.rb +2 -2
  134. data/lib/voom/presenters/dsl/components/mixins/attaches.rb +0 -2
  135. data/lib/voom/presenters/dsl/components/mixins/avatar.rb +1 -3
  136. data/lib/voom/presenters/dsl/components/mixins/chips.rb +0 -2
  137. data/lib/voom/presenters/dsl/components/mixins/chipset.rb +19 -0
  138. data/lib/voom/presenters/dsl/components/mixins/common.rb +13 -14
  139. data/lib/voom/presenters/dsl/components/mixins/dialogs.rb +0 -2
  140. data/lib/voom/presenters/dsl/components/mixins/event.rb +0 -2
  141. data/lib/voom/presenters/dsl/components/mixins/image_lists.rb +15 -0
  142. data/lib/voom/presenters/dsl/components/mixins/last_response.rb +48 -0
  143. data/lib/voom/presenters/dsl/components/mixins/padding.rb +42 -0
  144. data/lib/voom/presenters/dsl/components/mixins/progress.rb +16 -0
  145. data/lib/voom/presenters/dsl/components/mixins/tab_bars.rb +2 -0
  146. data/lib/voom/presenters/dsl/components/mixins/tables.rb +15 -0
  147. data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +5 -0
  148. data/lib/voom/presenters/dsl/components/mixins/toggles.rb +0 -2
  149. data/lib/voom/presenters/dsl/components/mixins/typography.rb +55 -8
  150. data/lib/voom/presenters/dsl/components/mixins/yield_to.rb +2 -2
  151. data/lib/voom/presenters/dsl/components/number_field.rb +20 -0
  152. data/lib/voom/presenters/dsl/components/page_title.rb +31 -0
  153. data/lib/voom/presenters/dsl/components/progress.rb +27 -0
  154. data/lib/voom/presenters/dsl/components/radio_button.rb +0 -1
  155. data/lib/voom/presenters/dsl/components/rich_text_area.rb +5 -11
  156. data/lib/voom/presenters/dsl/components/select.rb +21 -9
  157. data/lib/voom/presenters/dsl/components/separator.rb +21 -0
  158. data/lib/voom/presenters/dsl/components/slider.rb +6 -7
  159. data/lib/voom/presenters/dsl/components/stepper.rb +0 -10
  160. data/lib/voom/presenters/dsl/components/switch.rb +0 -2
  161. data/lib/voom/presenters/dsl/components/tab_bar.rb +0 -3
  162. data/lib/voom/presenters/dsl/components/table.rb +39 -20
  163. data/lib/voom/presenters/dsl/components/text_area.rb +1 -3
  164. data/lib/voom/presenters/dsl/components/text_field.rb +54 -11
  165. data/lib/voom/presenters/dsl/components/time_field.rb +0 -2
  166. data/lib/voom/presenters/dsl/components/toggle_base.rb +8 -6
  167. data/lib/voom/presenters/dsl/components/typography.rb +4 -4
  168. data/lib/voom/presenters/dsl/components/unordered_list.rb +50 -0
  169. data/lib/voom/presenters/dsl/definer.rb +0 -4
  170. data/lib/voom/presenters/dsl/definition.rb +6 -5
  171. data/lib/voom/presenters/dsl/protect_from_forgery.rb +43 -0
  172. data/lib/voom/presenters/dsl/user_interface.rb +37 -22
  173. data/lib/voom/presenters/errors.rb +1 -0
  174. data/lib/voom/presenters/errors/invalid_dsl.rb +8 -0
  175. data/lib/voom/presenters/errors/parameter_validation.rb +1 -3
  176. data/lib/voom/presenters/generators/inflectors.rb +59 -0
  177. data/lib/voom/presenters/generators/plugin.rb +115 -0
  178. data/lib/voom/presenters/generators/templates/plugin/.gitignore +12 -0
  179. data/lib/voom/presenters/generators/templates/plugin/Gemfile +6 -0
  180. data/lib/voom/presenters/generators/templates/plugin/LICENSE.txt.tt +21 -0
  181. data/lib/voom/presenters/generators/templates/plugin/README.md +253 -0
  182. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/actions/action.rb.tt +16 -0
  183. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/actions/dsl.rb.tt +22 -0
  184. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/component.rb.tt +18 -0
  185. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/dsl.rb.tt +19 -0
  186. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/helpers/helper.rb.tt +15 -0
  187. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/plugin.rb.tt +9 -0
  188. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/web_client/components/actions/data.rb.tt +17 -0
  189. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/web_client/components/render.rb.tt +23 -0
  190. data/lib/voom/presenters/generators/templates/plugin/presenter_plugin.gemspec.tt +21 -0
  191. data/lib/voom/presenters/generators/templates/plugin/views/assets/css/components/component.css.tt +21 -0
  192. data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/actions/action.js.tt +15 -0
  193. data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/component.js.tt +39 -0
  194. data/lib/voom/presenters/generators/templates/plugin/views/components/component.erb.tt +14 -0
  195. data/lib/voom/presenters/generators/templates/plugin/views/components/component_header.erb.tt +20 -0
  196. data/lib/voom/presenters/helpers.rb +2 -8
  197. data/lib/voom/presenters/helpers/inflector.rb +1 -1
  198. data/lib/voom/presenters/helpers/rails.rb +15 -8
  199. data/lib/voom/presenters/helpers/redact.rb +13 -0
  200. data/lib/voom/presenters/helpers/route.rb +12 -5
  201. data/lib/voom/presenters/pluggable.rb +37 -0
  202. data/lib/voom/presenters/plugins.rb +7 -0
  203. data/lib/voom/presenters/plugins/google_maps.rb +24 -0
  204. data/lib/voom/presenters/plugins/google_maps/google_map.erb +10 -0
  205. data/lib/voom/presenters/{dsl/components → plugins/google_maps}/google_map.rb +4 -3
  206. data/lib/voom/presenters/{dsl.rb → registry.rb} +13 -15
  207. data/lib/voom/presenters/router.rb +59 -0
  208. data/lib/voom/presenters/settings.rb +18 -8
  209. data/lib/voom/presenters/version.rb +1 -1
  210. data/lib/voom/presenters/web_client/app.rb +86 -29
  211. data/lib/voom/presenters/web_client/component_decorator_factory.rb +27 -0
  212. data/lib/voom/presenters/web_client/component_html_decorator.rb +50 -0
  213. data/lib/voom/presenters/web_client/component_renderer.rb +49 -0
  214. data/lib/voom/presenters/web_client/custom_css.rb +65 -0
  215. data/lib/voom/presenters/web_client/{markdown_render.rb → custom_render.rb} +5 -3
  216. data/lib/voom/presenters/web_client/helpers/expand_hash.rb +19 -0
  217. data/lib/voom/presenters/web_client/helpers/form_helpers.rb +14 -0
  218. data/lib/voom/presenters/web_client/helpers/padding_helpers.rb +21 -0
  219. data/lib/voom/presenters/web_client/plugin_headers.rb +37 -0
  220. data/lib/voom/presenters/web_client/router.rb +3 -54
  221. data/lib/voom/railtie.rb +37 -0
  222. data/lib/voom/symbol/to_str.rb +3 -3
  223. data/lib/voom/trace.rb +0 -2
  224. data/presenters.gemspec +8 -4
  225. data/public/bundle.css +18221 -0
  226. data/public/bundle.js +59949 -0
  227. data/public/img/demo/avatar.jpg +0 -0
  228. data/public/presenters/custom_css.css +26 -0
  229. data/public/wc.js +52704 -0
  230. data/scripts/build.sh +10 -0
  231. data/views/mdc/.eslintrc.yml +1 -0
  232. data/views/mdc/.nvmrc +1 -0
  233. data/views/mdc/assets/js/app.js +13 -2
  234. data/views/mdc/assets/js/components/base-component.js +147 -12
  235. data/views/mdc/assets/js/components/base-container.js +54 -14
  236. data/views/mdc/assets/js/components/base-toggle.js +56 -0
  237. data/views/mdc/assets/js/components/button.js +74 -5
  238. data/views/mdc/assets/js/components/cards.js +3 -3
  239. data/views/mdc/assets/js/components/checkboxes.js +7 -30
  240. data/views/mdc/assets/js/components/chips.js +76 -12
  241. data/views/mdc/assets/js/components/content.js +5 -4
  242. data/views/mdc/assets/js/components/data-tables.js +11 -34
  243. data/views/mdc/assets/js/components/datetime.js +29 -6
  244. data/views/mdc/assets/js/components/dialogs.js +128 -31
  245. data/views/mdc/assets/js/components/drag_n_drop.js +182 -0
  246. data/views/mdc/assets/js/components/drawer.js +43 -0
  247. data/views/mdc/assets/js/components/events.js +190 -73
  248. data/views/mdc/assets/js/components/events/action_parameter.js +62 -0
  249. data/views/mdc/assets/js/components/events/action_parameter.test.js +62 -0
  250. data/views/mdc/assets/js/components/events/autocomplete.js +94 -0
  251. data/views/mdc/assets/js/components/events/base.js +139 -23
  252. data/views/mdc/assets/js/components/events/clears.js +15 -12
  253. data/views/mdc/assets/js/components/events/close_dialog.js +50 -0
  254. data/views/mdc/assets/js/components/events/dialog.js +32 -14
  255. data/views/mdc/assets/js/components/events/encode.js +8 -0
  256. data/views/mdc/assets/js/components/events/errors.js +175 -92
  257. data/views/mdc/assets/js/components/events/loads.js +50 -11
  258. data/views/mdc/assets/js/components/events/navigates.js +17 -15
  259. data/views/mdc/assets/js/components/events/plugin.js +18 -0
  260. data/views/mdc/assets/js/components/events/post_message.js +21 -0
  261. data/views/mdc/assets/js/components/events/posts.js +147 -65
  262. data/views/mdc/assets/js/components/events/prompt_if_dirty.js +67 -0
  263. data/views/mdc/assets/js/components/events/removes.js +7 -6
  264. data/views/mdc/assets/js/components/events/replaces.js +87 -33
  265. data/views/mdc/assets/js/components/events/snackbar.js +10 -10
  266. data/views/mdc/assets/js/components/events/stepper.js +8 -10
  267. data/views/mdc/assets/js/components/events/toggle_disabled.js +41 -0
  268. data/views/mdc/assets/js/components/events/toggle_visibility.js +57 -15
  269. data/views/mdc/assets/js/components/file-inputs.js +68 -21
  270. data/views/mdc/assets/js/components/form-fields.js +16 -0
  271. data/views/mdc/assets/js/components/forms.js +3 -3
  272. data/views/mdc/assets/js/components/get_event_target.js +15 -0
  273. data/views/mdc/assets/js/components/grid.js +7 -6
  274. data/views/mdc/assets/js/components/header.js +20 -0
  275. data/views/mdc/assets/js/components/hidden-fields.js +19 -8
  276. data/views/mdc/assets/js/components/icon-toggles.js +7 -7
  277. data/views/mdc/assets/js/components/images.js +19 -0
  278. data/views/mdc/assets/js/components/initialize.js +52 -27
  279. data/views/mdc/assets/js/components/lists.js +9 -4
  280. data/views/mdc/assets/js/components/menus.js +60 -13
  281. data/views/mdc/assets/js/components/mixins/dirtyable.js +22 -0
  282. data/views/mdc/assets/js/components/mixins/event-handler.js +7 -7
  283. data/views/mdc/assets/js/components/mixins/visibility-observer.js +22 -21
  284. data/views/mdc/assets/js/components/plugins.js +86 -0
  285. data/views/mdc/assets/js/components/progress.js +31 -0
  286. data/views/mdc/assets/js/components/radios.js +6 -31
  287. data/views/mdc/assets/js/components/rich-text-area.js +217 -33
  288. data/views/mdc/assets/js/components/rich-text-area/horizontal-rule-blot.js +23 -0
  289. data/views/mdc/assets/js/components/root_document.js +5 -0
  290. data/views/mdc/assets/js/components/selects.js +18 -8
  291. data/views/mdc/assets/js/components/sliders.js +23 -12
  292. data/views/mdc/assets/js/components/snackbar.js +11 -8
  293. data/views/mdc/assets/js/components/steppers.js +3 -3
  294. data/views/mdc/assets/js/components/switches.js +6 -29
  295. data/views/mdc/assets/js/components/tab-bars.js +18 -4
  296. data/views/mdc/assets/js/components/text-fields.js +94 -22
  297. data/views/mdc/assets/js/components/tooltip.js +17 -0
  298. data/views/mdc/assets/js/components/typography.js +28 -0
  299. data/views/mdc/assets/js/components/uninitialize.js +7 -0
  300. data/views/mdc/assets/js/wc.js +111 -0
  301. data/views/mdc/assets/scss/app.scss +12 -5
  302. data/views/mdc/assets/scss/components/avatar.scss +51 -7
  303. data/views/mdc/assets/scss/components/button.scss +7 -9
  304. data/views/mdc/assets/scss/components/card.scss +6 -5
  305. data/views/mdc/assets/scss/components/chip.scss +4 -0
  306. data/views/mdc/assets/scss/components/content.scss +25 -0
  307. data/views/mdc/assets/scss/components/data-table.scss +12 -1
  308. data/views/mdc/assets/scss/components/datetime.scss +1 -2
  309. data/views/mdc/assets/scss/components/dialog.scss +7 -2
  310. data/views/mdc/assets/scss/components/drag_n_drop.scss +17 -0
  311. data/views/mdc/assets/scss/components/drawer.scss +82 -0
  312. data/views/mdc/assets/scss/components/expansion-panel.scss +2 -2
  313. data/views/mdc/assets/scss/components/fab.scss +23 -5
  314. data/views/mdc/assets/scss/components/file-input.scss +10 -14
  315. data/views/mdc/assets/scss/components/grid.scss +32 -17
  316. data/views/mdc/assets/scss/components/header.scss +21 -0
  317. data/views/mdc/assets/scss/components/icon-button-toggles.scss +2 -0
  318. data/views/mdc/assets/scss/components/icon.scss +23 -0
  319. data/views/mdc/assets/scss/components/image-list.scss +18 -0
  320. data/views/mdc/assets/scss/components/image.scss +13 -21
  321. data/views/mdc/assets/scss/components/list.scss +9 -3
  322. data/views/mdc/assets/scss/components/menu.scss +13 -3
  323. data/views/mdc/assets/scss/components/progress.scss +1 -0
  324. data/views/mdc/assets/scss/components/rich-text-area.scss +38 -2
  325. data/views/mdc/assets/scss/components/select.scss +6 -3
  326. data/views/mdc/assets/scss/components/separator.scss +3 -0
  327. data/views/mdc/assets/scss/components/switch.scss +10 -0
  328. data/views/mdc/assets/scss/components/textfield.scss +8 -4
  329. data/views/mdc/assets/scss/components/tooltip.scss +3 -0
  330. data/views/mdc/assets/scss/components/typography.scss +6 -0
  331. data/views/mdc/assets/scss/components/unordered-lists.scss +17 -0
  332. data/views/mdc/assets/scss/material.blue_grey-orange.min.css +1 -1
  333. data/views/mdc/assets/scss/media.scss +39 -0
  334. data/views/mdc/assets/scss/palette.scss +16 -0
  335. data/views/mdc/assets/scss/styles.scss +39 -1
  336. data/views/mdc/assets/scss/theme.scss +19 -2
  337. data/views/mdc/body/dismissable-drawer.erb +34 -0
  338. data/views/mdc/body/drawer/divider.erb +1 -0
  339. data/views/mdc/body/drawer/item.erb +13 -0
  340. data/views/mdc/body/drawer/label.erb +1 -0
  341. data/views/mdc/body/drawers/menu.erb +1 -1
  342. data/views/mdc/body/footers/menu_item.erb +2 -2
  343. data/views/mdc/body/header.erb +38 -31
  344. data/views/mdc/body/modal-drawer.erb +35 -0
  345. data/views/mdc/body/snackbar.erb +11 -5
  346. data/views/mdc/components/actions/autocomplete.rb +8 -0
  347. data/views/mdc/components/actions/close_dialog.rb +10 -0
  348. data/views/mdc/components/actions/loads.rb +7 -1
  349. data/views/mdc/components/actions/navigates.rb +1 -1
  350. data/views/mdc/components/actions/post.rb +4 -7
  351. data/views/mdc/components/actions/post_message.rb +10 -0
  352. data/views/mdc/components/actions/prompt_if_dirty.rb +17 -0
  353. data/views/mdc/components/actions/replaces.rb +5 -1
  354. data/views/mdc/components/actions/resolver.rb +39 -0
  355. data/views/mdc/components/actions/snackbar.rb +3 -1
  356. data/views/mdc/components/actions/toggle_disabled.rb +10 -0
  357. data/views/mdc/components/avatar.erb +12 -7
  358. data/views/mdc/components/badge.erb +1 -1
  359. data/views/mdc/components/button.erb +2 -3
  360. data/views/mdc/components/buttons/button.erb +12 -12
  361. data/views/mdc/components/buttons/fab.erb +3 -2
  362. data/views/mdc/components/buttons/icon.erb +5 -5
  363. data/views/mdc/components/buttons/image.erb +4 -3
  364. data/views/mdc/components/card.erb +67 -44
  365. data/views/mdc/components/checkbox.erb +32 -35
  366. data/views/mdc/components/chip.erb +38 -30
  367. data/views/mdc/components/chipset.erb +18 -0
  368. data/views/mdc/components/content.erb +35 -14
  369. data/views/mdc/components/datetime.erb +6 -19
  370. data/views/mdc/components/dialog.erb +45 -25
  371. data/views/mdc/components/drag_and_drop/drag_and_drop.rb +16 -0
  372. data/views/mdc/components/event.erb +3 -5
  373. data/views/mdc/components/expansion_panel.erb +8 -6
  374. data/views/mdc/components/file_input.erb +14 -10
  375. data/views/mdc/components/form.erb +4 -19
  376. data/views/mdc/components/grid.erb +20 -17
  377. data/views/mdc/components/hidden_field.erb +3 -4
  378. data/views/mdc/components/icon.erb +7 -5
  379. data/views/mdc/components/icon_toggle.erb +9 -8
  380. data/views/mdc/components/image.erb +23 -5
  381. data/views/mdc/components/image_list.erb +38 -0
  382. data/views/mdc/components/link.erb +3 -13
  383. data/views/mdc/components/list.erb +4 -2
  384. data/views/mdc/components/list/avatar.erb +2 -1
  385. data/views/mdc/components/list/header.erb +5 -3
  386. data/views/mdc/components/list/hidden_field.erb +3 -0
  387. data/views/mdc/components/list/icon.erb +2 -1
  388. data/views/mdc/components/list/line.erb +19 -9
  389. data/views/mdc/components/list/menu.erb +7 -2
  390. data/views/mdc/components/list/separator.erb +1 -1
  391. data/views/mdc/components/menu.erb +14 -6
  392. data/views/mdc/components/number_field.erb +38 -0
  393. data/views/mdc/components/page_title.erb +2 -2
  394. data/views/mdc/components/progress.erb +11 -0
  395. data/views/mdc/components/radio_button.erb +5 -6
  396. data/views/mdc/components/render.erb +2 -3
  397. data/views/mdc/components/rich_text_area.erb +13 -10
  398. data/views/mdc/components/select.erb +28 -12
  399. data/views/mdc/components/separator.erb +3 -0
  400. data/views/mdc/components/shared/hint_error_display.erb +9 -0
  401. data/views/mdc/components/shared/input_label.erb +7 -0
  402. data/views/mdc/components/slider.erb +3 -1
  403. data/views/mdc/components/stepper.erb +1 -1
  404. data/views/mdc/components/stepper/step.erb +1 -1
  405. data/views/mdc/components/switch.erb +8 -7
  406. data/views/mdc/components/tab_bar.erb +7 -1
  407. data/views/mdc/components/table.erb +26 -13
  408. data/views/mdc/components/table/checkbox.erb +6 -3
  409. data/views/mdc/components/table/column.erb +18 -0
  410. data/views/mdc/components/table/footer.erb +8 -0
  411. data/views/mdc/components/table/header.erb +5 -4
  412. data/views/mdc/components/table/pagination.erb +2 -6
  413. data/views/mdc/components/table/row.erb +5 -5
  414. data/views/mdc/components/text_area.erb +9 -11
  415. data/views/mdc/components/text_field.erb +29 -37
  416. data/views/mdc/components/tooltip.erb +2 -2
  417. data/views/mdc/components/typography.erb +7 -5
  418. data/views/mdc/components/unordered_list.erb +10 -0
  419. data/views/mdc/components/unordered_list/icon.erb +3 -0
  420. data/views/mdc/components/unordered_list/list_item.erb +7 -0
  421. data/views/mdc/layout.erb +41 -29
  422. data/views/mdc/package-lock.json +2222 -1327
  423. data/views/mdc/package.json +47 -29
  424. data/views/mdc/web.erb +4 -0
  425. data/views/mdc/webpack.config.js +13 -1
  426. metadata +218 -26
  427. data/lib/voom-presenters.rb +0 -9
  428. data/lib/voom/presenters-engine.rb +0 -44
  429. data/lib/voom/presenters.rb +0 -19
  430. data/public/.gitignore +0 -2
  431. data/scripts/bump.sh +0 -5
  432. data/scripts/changelog.sh +0 -5
  433. data/scripts/deploy-demo.sh +0 -3
  434. data/scripts/release.sh +0 -5
  435. data/scripts/tag.sh +0 -5
  436. data/views/mdc/assets/js/dialog-polyfill.js +0 -738
  437. data/views/mdc/assets/scss/components/icon-toggles.scss +0 -9
  438. data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +0 -13
  439. data/views/mdc/body/drawer.erb +0 -18
  440. data/views/mdc/components/google_map.erb +0 -9
@@ -5,7 +5,7 @@ Voom::Presenters.define(:icons) do
5
5
 
6
6
  helpers do
7
7
  def small_card(&block)
8
- card height: '100px', width: '100px' do
8
+ card height: '100px', width: '100%' do
9
9
  yield_to(&block) # Special method that yields in the correct binding context
10
10
  end
11
11
  end
@@ -16,65 +16,96 @@ Voom::Presenters.define(:icons) do
16
16
  column 10 do
17
17
  body 'An icon is commonly used on a menu, button, chip, list or card. They can be used standalone as well.'
18
18
 
19
- headline 'Plain'
20
- title 'Material design icons'
21
- body 'By default the icon name will be assumed to be [material design](https://material.io/icons/).'
22
- icon :thumb_up
23
-
24
- title 'Font awesome icons'
25
- body "[Font awesome](https://fontawesome.com/icons?d=gallery) icons can also be used."\
26
- 'You provide the font awesome class.'
27
- body 'For example: `fa-thumbs-up`:', level: 2
28
- icon 'fa-thumbs-up'
29
- body 'You can also optionally add the font awesome style prefix, if not provided it defaults to `fas` (solid).', level: 2
30
- body 'For example: `far fa-thumbs-up`:', level: 2
31
- icon 'far fa-thumbs-up'
32
-
33
-
34
- headline 'Color'
35
- title 'primary'
36
- icon :thumb_up, color: :primary
37
- title 'secondary'
38
- icon :thumb_up, color: :secondary
39
- title 'custom'
40
- icon :thumb_up, color: :hotpink
41
-
42
- headline 'Size'
43
- body 'You can specify the size of an icon'
44
- icon :thumb_up, color: :hotpink, size: '64px'
45
-
46
- title 'Position'
47
- body "'Icon's can be positioned to left, right, top, and bottom"
48
-
49
19
  grid do
50
- column 1 do
51
- small_card do
52
- icon :face, position: :left
53
- end
54
- end
55
- column 1 do
56
- small_card do
57
- icon :face, position: :right
58
- end
20
+ column 12 do
21
+ headline 'Plain'
22
+ subtitle 'Material design icons'
23
+ body 'By default the icon name will be assumed to be [material design](https://material.io/icons/).'
24
+ icon :thumb_up
59
25
  end
60
- column 1 do
61
- small_card do
62
- icon :face, position: :top
63
- end
26
+ end
27
+
28
+ grid do
29
+ column 12 do
30
+ headline 'Font awesome icons'
31
+ body "[Font awesome](https://fontawesome.com/icons?d=gallery) icons can also be used."\
32
+ 'You provide the font awesome class.'
33
+ body 'For example: `fa-thumbs-up`:', level: 2
34
+ icon 'fa-thumbs-up'
35
+ body 'You can also optionally add the font awesome style prefix, if not provided it defaults to `fas` (solid).', level: 2
36
+ body 'For example: `far fa-thumbs-up`:', level: 2
37
+ icon 'far fa-thumbs-up'
64
38
  end
65
- column 1 do
66
- small_card do
67
- icon :face, position: :bottom
68
- end
39
+ end
40
+
41
+ grid do
42
+ column 12 do
43
+ headline 'Color'
44
+ body '**primary**'
45
+ icon :thumb_up, color: :primary
46
+ body '**secondary**'
47
+ icon :thumb_up, color: :secondary
48
+ body '**custom from palette**'
49
+ icon :thumb_up, color: :red
50
+ body '**custom**'
51
+ icon :thumb_up, color: :hotpink
69
52
  end
70
- column 1 do
71
- small_card do
72
- icon :face, position: [:top, :right]
73
- end
53
+ end
54
+
55
+ grid do
56
+ column 12 do
57
+ headline 'Size'
58
+ body 'You can specify the size of an icon'
59
+ subtitle '**x-small**'
60
+ icon :thumb_up, size: 'x-small'
61
+ subtitle '**small**'
62
+ icon :thumb_up, size: 'small'
63
+ subtitle '**medium** (default)'
64
+ icon :thumb_up, size: 'medium'
65
+ subtitle '**large**'
66
+ icon :thumb_up, size: 'large'
67
+ subtitle '**x-large**'
68
+ icon :thumb_up, size: 'x-large'
69
+ subtitle '**xx-large**'
70
+ icon :thumb_up, size: 'xx-large'
74
71
  end
75
- column 1 do
76
- small_card do
77
- icon :face, position: [:bottom, :right]
72
+ end
73
+
74
+ grid do
75
+ column 12 do
76
+ headline 'Position'
77
+ body "Icon's can be positioned to the left, right, top, and bottom"
78
+ grid padding: false do
79
+ column 1 do
80
+ small_card do
81
+ icon :face, position: :left
82
+ end
83
+ end
84
+ column 1 do
85
+ small_card do
86
+ icon :face, position: :right
87
+ end
88
+ end
89
+ column 1 do
90
+ small_card do
91
+ icon :face, position: :top
92
+ end
93
+ end
94
+ column 1 do
95
+ small_card do
96
+ icon :face, position: :bottom
97
+ end
98
+ end
99
+ column 1 do
100
+ small_card do
101
+ icon :face, position: [:top, :right]
102
+ end
103
+ end
104
+ column 1 do
105
+ small_card do
106
+ icon :face, position: [:bottom, :right]
107
+ end
108
+ end
78
109
  end
79
110
  end
80
111
  end
@@ -0,0 +1,100 @@
1
+ Voom::Presenters.define(:image_lists) do
2
+ attach :top_nav
3
+ attach :component_drawer
4
+ page_title 'Image Lists'
5
+
6
+ grid do
7
+ column 1
8
+ column 8 do
9
+
10
+ grid do
11
+ column 12 do
12
+ headline 'Standard with 5 columns'
13
+ image_list do
14
+ image 'img/demo/dog.png', label: 'Dog'
15
+ image 'img/demo/dog.png', label: 'Dog'
16
+ image 'img/demo/dog.png', label: 'Cat'
17
+ image 'img/demo/dog.png'
18
+ image 'img/demo/dog.png'
19
+ image 'img/demo/dog.png', label: 'I have an action' do
20
+ event :click do
21
+ snackbar 'Clicked a dog!'
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ grid do
29
+ column 12 do
30
+ headline 'Text protection with 3 columns'
31
+ image_list list_type: 'text-protection', columns: 3 do
32
+ image 'img/demo/dog.png', label: 'Dog'
33
+ image 'img/demo/dog.png', label: 'Dog'
34
+ image 'img/demo/dog.png', label: 'Cat'
35
+ end
36
+ end
37
+ end
38
+
39
+ grid do
40
+ column 12 do
41
+ headline 'Masonry with 4 columns'
42
+ image_list list_type: 'masonry', columns: 4 do
43
+ image 'img/demo/image_card.jpg', label: 'Person'
44
+ image 'img/demo/dog.png', label: 'Dog'
45
+ image 'img/demo/dog.png', label: 'Cat'
46
+ image 'img/demo/dog.png'
47
+ image 'img/demo/dog.png'
48
+ image 'img/demo/dog.png'
49
+ image 'img/demo/dog.png'
50
+ image 'img/demo/dog.png'
51
+ image 'img/demo/dog.png'
52
+ end
53
+ end
54
+ end
55
+
56
+ grid do
57
+ column 12 do
58
+ headline 'Inherits image component border attributes'
59
+ image_list list_type: 'standard', columns: 4 do
60
+ image 'img/demo/image_card.jpg', label: 'No border'
61
+ image 'img/demo/dog.png', label: 'Round', border_radius: '50%'
62
+ image 'img/demo/image_card.jpg', label: 'Rounded Corners', border_radius: '5%'
63
+ image 'img/demo/dog.png', label: 'Thick Border', border: '10px'
64
+ image 'img/demo/image_card.jpg', label: 'Thin secondary border', border: '1px', border_color: :secondary
65
+ end
66
+ end
67
+ end
68
+
69
+ grid do
70
+ column 12 do
71
+ headline 'Image attributes applied globally'
72
+ image_list list_type: 'standard', columns: 4, border_radius: '50%' do
73
+ image 'img/demo/image_card.jpg'
74
+ image 'img/demo/dog.png'
75
+ image 'img/demo/image_card.jpg'
76
+ image 'img/demo/dog.png'
77
+ image 'img/demo/image_card.jpg'
78
+ end
79
+ end
80
+ end
81
+
82
+ grid do
83
+ column 12 do
84
+ headline 'Primary color border with spacing'
85
+ image_list list_type: 'standard', columns: 4, border: '2px', border_color: :primary, spacing: '10px' do
86
+ image 'img/demo/image_card.jpg'
87
+ image 'img/demo/dog.png'
88
+ image 'img/demo/image_card.jpg'
89
+ image 'img/demo/dog.png'
90
+ image 'img/demo/image_card.jpg'
91
+ end
92
+ end
93
+ end
94
+
95
+ attach :code, file: __FILE__
96
+
97
+ end
98
+ end
99
+ end
100
+
@@ -0,0 +1,45 @@
1
+ Voom::Presenters.define(:images) do
2
+ attach :top_nav
3
+ attach :component_drawer
4
+ page_title 'Icons'
5
+
6
+ grid do
7
+ column 1
8
+ column 10 do
9
+
10
+ headline 'Plain'
11
+ image 'img/demo/welcome_card.jpg', width: 512, height: 176
12
+
13
+ headline 'With a Border'
14
+ image 'img/demo/dog.png', border: '1px'
15
+
16
+ headline 'With a Thick Border'
17
+ image 'img/demo/welcome_card.jpg', width: 512, height: 176, border: '10px'
18
+
19
+ headline 'Framed in a Circle'
20
+ image 'img/demo/image_card.jpg', width: 200, height: 'auto', border_radius: '50%'
21
+
22
+ headline 'With rounded corders'
23
+ image 'img/demo/image_card.jpg', width: 200, height: 'auto', border_radius: '5%'
24
+
25
+
26
+ headline 'Image Fit'
27
+ grid do
28
+ column 4 do
29
+ headline ':cover'
30
+ image 'img/demo/image_card.jpg', width: '100%', height: '256px', fit: :cover
31
+ end
32
+ column 4 do
33
+ headline ':fill'
34
+ image 'img/demo/image_card.jpg', width: '100%', height: '256px', fit: :fill
35
+ end
36
+ column 4 do
37
+ headline ':contain'
38
+ image 'img/demo/image_card.jpg', width: '100%', height: '256px', fit: :contain
39
+ end
40
+ end
41
+
42
+ attach :code, file: __FILE__
43
+ end
44
+ end
45
+ end
@@ -46,31 +46,9 @@ Voom::Presenters.define(:layouts) do
46
46
  end
47
47
  end
48
48
 
49
- headline 'Grid Padding'
50
- body 'You can control the grid padding with the `padding` attribute.',
51
- 'By default a top most grid has padding on all four sides.',
52
- 'A nested grid has top and bottom padding only. (No right and left padding.)',
53
- 'Vaid values are `:all`, `:none` and an array that specifies sides to pad: `[:top, :right, :bottom, :left]`. (Same as `:none`)',
54
- 'You can also pad columns. Column padding is half as wide as grid padding. '
55
- grid padding: :top do
56
- column 6, color: :lightgray do
57
- body '6 wide with sub-grid of 12'
58
- grid padding: :none do
59
- (1..12).each do |size|
60
- column 1, color: :white do
61
- body '1'
62
- end
63
- end
64
- end
65
- end
66
- column 4, color: :lightgray, padding: [:top, :left, :bottom] do
67
- body '4'
68
- end
69
- column 2, color: :lightgray do
70
- body '2'
71
- end
72
- end
49
+ headline 'Padding'
50
+ body "See the [padding demo](#{presenters_path(:padding)})"
73
51
 
74
52
  attach :code, file: __FILE__
75
53
  end
76
- end
54
+ end
@@ -62,8 +62,28 @@ Voom::Presenters.define(:lists) do
62
62
  line do
63
63
  text actor.name
64
64
  avatar :person
65
+
66
+ event :click do
67
+ loads 'http://www.yahoo.com', target: '_blank'
68
+ end
69
+
65
70
  actions do
66
- icon :star
71
+ icon :stardo do
72
+ tooltip 'Person'
73
+ end
74
+ button icon: :more_vert do
75
+ menu position: :right do
76
+ item 'Some Action' do
77
+ event :click do
78
+ snackbar 'Hey there'
79
+ end
80
+ end
81
+ item 'Another Action'
82
+ divider
83
+ item 'Disabled Action', disabled: true
84
+ item 'Yet Another Action'
85
+ end
86
+ end
67
87
  end
68
88
  end
69
89
  end
@@ -84,7 +104,7 @@ Voom::Presenters.define(:lists) do
84
104
  when 2
85
105
  switch
86
106
  when 3
87
- icon_toggle :star
107
+ icon_toggle :star_border, on_icon: :star
88
108
  end
89
109
  end
90
110
  end
@@ -108,7 +128,7 @@ Voom::Presenters.define(:lists) do
108
128
  switch
109
129
  icon :delete
110
130
  when 3
111
- icon_toggle :star
131
+ icon_toggle :star_border
112
132
  icon :delete
113
133
  end
114
134
  end
@@ -125,7 +145,7 @@ Voom::Presenters.define(:lists) do
125
145
  avatar :person
126
146
  info 'actor' if index == 0
127
147
  actions do
128
- icon_toggle :star
148
+ icon_toggle :star
129
149
  end
130
150
  subtitle "#{actor.episodes} episodes"
131
151
  end
@@ -6,15 +6,25 @@ Voom::Presenters.define(:menus) do
6
6
  attach :component_drawer
7
7
  page_title 'Menus'
8
8
 
9
- indented_grid do
9
+ dialog id: :hello_world do
10
+ title "Hello World!"
11
+ actions do
12
+ button 'Close'
13
+ end
14
+ end
10
15
 
16
+ indented_grid do
11
17
  grid do
12
18
  column 1
13
19
  column 5 do
14
20
  card height: '300px' do
15
21
  button icon: :more_vert do
16
- menu do
17
- item 'Some Action'
22
+ menu id: :dialog_test do
23
+ item 'Some Dialog Action' do
24
+ event :click do
25
+ dialog :hello_world
26
+ end
27
+ end
18
28
  item 'Another Action'
19
29
  divider
20
30
  item 'Disabled Action', disabled: true
@@ -26,7 +36,7 @@ Voom::Presenters.define(:menus) do
26
36
  column 5 do
27
37
  card height: '300px' do
28
38
  button icon: :more_vert, position: :right do
29
- menu do
39
+ menu do
30
40
  item 'Some Action'
31
41
  item 'Another Action'
32
42
  divider
@@ -2,13 +2,44 @@ Voom::Presenters.define('component_menu') do
2
2
  helpers Voom::Presenters::Helpers::Inflector
3
3
  menu side: :left do
4
4
  %i(
5
- cards lists expansion_panels tables text_fields
6
- selects buttons fabs fabs_mini dialogs
7
- layouts headers drawers footers menus
8
- toggles chips snackbar badges tooltips
9
- hidden_fields text_areas steppers sliders tab_bars
10
- content icons datetime_fields date_fields time_fields
11
- maps file_inputs
5
+ avatars
6
+ badges
7
+ buttons
8
+ cards
9
+ chips
10
+ content
11
+ date_fields
12
+ datetime_fields
13
+ dialogs
14
+ drawers
15
+ expansion_panels
16
+ fabs
17
+ fabs_mini
18
+ file_inputs
19
+ footers
20
+ headers
21
+ hidden_fields
22
+ icons
23
+ images
24
+ image_lists
25
+ layouts
26
+ lists
27
+ number_fields
28
+ maps
29
+ menus
30
+ progress
31
+ selects
32
+ sliders
33
+ snackbar
34
+ steppers
35
+ tab_bars
36
+ tables
37
+ text_areas
38
+ text_fields
39
+ time_fields
40
+ toggles
41
+ tooltips
42
+ unordered_lists
12
43
  ).sort.each do |comp|
13
44
  item titleize(comp) do
14
45
  event :click do