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
@@ -1,8 +1,8 @@
1
1
  Voom::Presenters.define('pattern_menu') do
2
2
  helpers Voom::Presenters::Helpers::Inflector
3
3
  menu side: :left do
4
- %i(search_select).sort.each do |pattern|
5
- item titleize(pattern) do
4
+ %i(search_select floating_card drag_drop).sort.each do |pattern|
5
+ item titleize(pattern) do
6
6
  event :click do
7
7
  loads pattern
8
8
  end
@@ -0,0 +1,53 @@
1
+ require_relative '../helpers/indented_grid'
2
+
3
+ Voom::Presenters.define(:number_fields) do
4
+ helpers Demo::Helpers::IndentedGrid
5
+ attach :top_nav
6
+ attach :component_drawer
7
+ page_title 'Number Fields'
8
+
9
+ indented_grid do
10
+
11
+ title 'Basic'
12
+ number_field name: :text do
13
+ label 'Enter a number'
14
+ hint 'Enter text or scroll to your desired number'
15
+ end
16
+ blank
17
+
18
+ title 'Min/Max/Step'
19
+ number_field name: :min_max, min: 0, max: 100, step: 5 do
20
+ label 'Min/Max/Step'
21
+ hint 'Arrows will step in increments of 5'
22
+ end
23
+ blank
24
+
25
+ title 'Decimals'
26
+ number_field name: :decimal, min: 1.0, max: 100, step: 0.01 do
27
+ label 'Decimal'
28
+ hint 'Arrows will step in increments of .01'
29
+ end
30
+ blank
31
+
32
+ title 'With Leading Icon'
33
+ number_field name: :amount do
34
+ label 'Amount'
35
+ icon :attach_money, position: :left
36
+ end
37
+
38
+ title 'With Trailing Icon'
39
+ number_field name: :amount2 do
40
+ label 'Amount'
41
+ icon :attach_money, position: :right
42
+ end
43
+ blank
44
+
45
+ title 'Read Only'
46
+ number_field name: :readonly, readonly: true do
47
+ label 'Amount'
48
+ value '500'
49
+ end
50
+
51
+ attach :code, file: __FILE__
52
+ end
53
+ end
@@ -0,0 +1,96 @@
1
+ require_relative '../helpers/indented_grid'
2
+
3
+ Voom::Presenters.define(:padding) do
4
+ helpers Demo::Helpers::IndentedGrid
5
+
6
+ attach :top_nav
7
+ attach :component_drawer
8
+ page_title 'Padding'
9
+
10
+ indented_grid do
11
+
12
+ headline 'Padding'
13
+ text %(Block containers (grid/column, content, card) have default padding that can be modified.)
14
+ blank
15
+ text %(There are four levels of padding: 0 = off, 1 = gutter_width/4, 2 = gutter_width/2, 3 = gutter_width)
16
+ text %(You can also specify :all, :none or true (same as :all) and false (same as :none))
17
+ text %(Each block container defines its default values (top,bottom,right,left) padding differently.)
18
+
19
+
20
+ blank
21
+ title 'Grid padding'
22
+ text %(Top level grid padding by default is level 3: top3, right3, bottom3, left3.
23
+ Specifying padding: top is the same as padding: top3.)
24
+ text %(Column padding defaults to :none. The definition of column padding for [top,bottom,right,left] is equal to [top2,right2,bottom2,left2])
25
+ end
26
+ grid color: :darkgrey do
27
+ column 12, color: :lightgray do
28
+ body 'top level default grid padding'
29
+ end
30
+ end
31
+ indented_grid do
32
+ blank
33
+ text %(A grid nested in another grid turns off padding for the right and left by default: top3, right0, bottom3: left0.)
34
+
35
+ grid color: :darkgrey do
36
+ column 12, color: :lightgray do
37
+ body 'nested default level grid padding'
38
+ end
39
+ end
40
+ blank
41
+ text %(You can control the padding for each dimension.)
42
+
43
+ grid color: :darkgrey, padding: [:left0, :top3, :bottom2, :right1] do
44
+ column 12, color: :lightgray, padding: [:left3, :top1, :bottom2, :right0] do
45
+ body 'Custom padding (view source to see this)'
46
+ end
47
+ end
48
+ blank
49
+
50
+ title 'Content padding'
51
+ text %(A content block by default has `:none` padding. The default level is level 2. So :all is equal to [:top2,:right2,:bottom2,:left2])
52
+ grid color: :darkgrey, padding: :none do
53
+ column 12, color: :lightgray, padding: :none do
54
+ content do
55
+ body 'No padding'
56
+ end
57
+ end
58
+ end
59
+ blank
60
+ grid color: :darkgrey, padding: :none do
61
+ column 12, color: :lightgray, padding: :none do
62
+ content padding: :all do
63
+ body 'default :all padding is level 2'
64
+ end
65
+ end
66
+ end
67
+ blank
68
+ grid color: :darkgrey, padding: :none do
69
+ column 12, color: :lightgray, padding: :none do
70
+ content padding: [:top3, :bottom0, :right1, :left2] do
71
+ body 'Custom padding'
72
+ end
73
+ end
74
+ end
75
+ blank
76
+ title 'Card padding'
77
+ text %(A card defaults its padding to `:all`. The default level is level 2. So :all is equal to [:top2,:right2,:bottom2,:left2])
78
+ grid color: :darkgrey, padding: :none do
79
+ column 12, color: :lightgray, padding: :none do
80
+ card do
81
+ body 'Defaults to :all, level2'
82
+ end
83
+ end
84
+ end
85
+ blank
86
+ grid color: :darkgrey, padding: :none do
87
+ column 12, color: :lightgray, padding: :none do
88
+ card padding: [:top3, :bottom0, :right1, :left2] do
89
+ body 'Custom padding'
90
+ end
91
+ end
92
+ end
93
+ blank
94
+ attach :code, file: __FILE__
95
+ end
96
+ end
@@ -0,0 +1,71 @@
1
+ require_relative '../helpers/indented_grid'
2
+
3
+ Voom::Presenters.define(:progress) do
4
+ helpers Demo::Helpers::IndentedGrid
5
+ attach :top_nav
6
+ attach :component_drawer
7
+ page_title 'Progress'
8
+
9
+ indented_grid do
10
+ body <<~DOC
11
+ Linear Progress bars have special placement and event handling behavior.
12
+
13
+ They automatically show themselves when an posts/updates/deletes action starts and hide themselves when an it finishes.
14
+
15
+ All you need to do is place your progress bars where you want them. (You can have more than one.)
16
+
17
+ The following components allow progress bars: `cards`, `content`, `dialog`, and `grid or column`.
18
+
19
+ You can position them on top and/or on the bottom using `position: :top|:bottom|:both`
20
+ DOC
21
+ title 'Card'
22
+ card do
23
+ progress
24
+ text 'card progress'
25
+ end
26
+
27
+ title 'Content'
28
+ content do
29
+ text 'content progress - top and bottom'
30
+ progress position: :both
31
+ end
32
+
33
+ title 'Dialog'
34
+ dialog id: :progress_dlg do
35
+ text 'dialog progress - bottom'
36
+ progress position: :bottom
37
+ actions do
38
+ button :start do
39
+ event :click do
40
+ posts '/_slow_', seconds: 5
41
+ snackbar 'done'
42
+ end
43
+ end
44
+ end
45
+ end
46
+ button :open do
47
+ event :click do
48
+ dialog :progress_dlg
49
+ end
50
+ end
51
+
52
+ title 'Grid'
53
+ grid do
54
+ progress
55
+ column 6 do
56
+ progress position: :bottom
57
+ text 'column progress bottom'
58
+ end
59
+ end
60
+
61
+ button :start do
62
+ event :click do
63
+ posts '/_slow_', seconds: 5
64
+ snackbar 'done'
65
+ end
66
+ end
67
+
68
+
69
+ attach :code, file: __FILE__
70
+ end
71
+ end
@@ -7,9 +7,9 @@ Voom::Presenters.define(:selects) do
7
7
  page_title 'Select Fields'
8
8
 
9
9
  indented_grid do
10
- form do
11
- select do
12
- label 'Text...'
10
+ content do
11
+ select full_width: false do
12
+ label 'Default (outlined) style ...'
13
13
  option do
14
14
  value 'value1'
15
15
  text 'First value'
@@ -18,10 +18,49 @@ Voom::Presenters.define(:selects) do
18
18
  value 'value2'
19
19
  text 'Second value'
20
20
  end
21
- event :change do
22
- snackbar 'item changed'
21
+ # event :change do
22
+ # snackbar 'item changed'
23
+ # end
24
+ end
25
+ blank
26
+
27
+ select outlined: false do
28
+ label 'Alternate style ...'
29
+ option do
30
+ value 'value1'
31
+ text 'First value'
23
32
  end
33
+ option do
34
+ value 'value2'
35
+ text 'Second value'
36
+ end
37
+ # event :change do
38
+ # snackbar 'item changed'
39
+ # end
24
40
  end
41
+
42
+ blank
43
+
44
+ select full_width: false do
45
+ icon :filter_list
46
+ label 'Default (outlined) style ...'
47
+ option disabled: true do
48
+ text 'Pick One'
49
+ end
50
+ option do
51
+ value 'value1'
52
+ text '&nbsp;&nbsp;&nbsp;&nbsp;One value'
53
+ end
54
+ option do
55
+ value 'value2'
56
+ text '&nbsp;&nbsp;&nbsp;&nbsp;Second value'
57
+ end
58
+ event :change do
59
+ snackbar 'item changed'
60
+ end
61
+ end
62
+
63
+
25
64
  end
26
65
 
27
66
  attach :code, file: __FILE__
@@ -28,6 +28,11 @@ Voom::Presenters.define(:sliders) do
28
28
  end
29
29
  end
30
30
 
31
+ title 'Disabled slider'
32
+ slider disabled: true, value_min: 0, value_max: 100 do
33
+ value 42
34
+ end
35
+
31
36
  button 'Show hidden slider', type: :flat, color: :secondary do
32
37
  event :click do
33
38
  toggle_visibility :hidden_slider, action: :show
@@ -42,6 +42,21 @@ Voom::Presenters.define(:tab_bars) do
42
42
  end
43
43
  end
44
44
  end
45
+ separator
46
+
47
+ title 'Content is automatically displayed/hidden'
48
+ tab_bar do
49
+ tab 'One', selected: true do
50
+ heading3 'Tab 1'
51
+ end
52
+ tab 'Two' do
53
+ heading3 'Tab 2'
54
+ end
55
+ tab 'Three' do
56
+ heading3 'Tab 3'
57
+ end
58
+ end
59
+
45
60
  end
46
61
 
47
62
  attach :code, file: __FILE__
@@ -27,61 +27,72 @@ Voom::Presenters.define(:tables) do
27
27
  end
28
28
 
29
29
  indented_grid do
30
- grid do
31
- column 12 do
32
- content id: :drivers do
33
- title 'Non-Selectable'
34
- table do
35
- header do
36
- column 'Name'
37
- column 'Team'
38
- column 'Country'
39
- end
40
- drivers.each do |driver|
41
- row do
42
- column driver.name
43
- column driver.team
44
- column driver.country
45
- end
46
- end
47
- pagination page_size: 5,
48
- total: drivers.count,
49
- current_page: context.fetch(:page){ 1 },
50
- replace_id: 'drivers',
51
- replace_presenter: 'drivers_presenter'
30
+ content padding: :bottom3 do
31
+ title 'Non-Selectable'
32
+ table do
33
+ header do
34
+ column 'Name'
35
+ column 'Team'
36
+ column 'Country'
37
+ end
38
+ drivers.each do |driver|
39
+ row do
40
+ column driver.name
41
+ column driver.team
42
+ column driver.country
52
43
  end
53
44
  end
45
+ pagination page_size: 5,
46
+ total: drivers.count,
47
+ current_page: context.fetch(:page) { 1 },
48
+ replace_id: 'drivers',
49
+ replace_presenter: 'drivers_presenter'
54
50
  end
55
51
  end
56
52
 
57
- form do
58
- grid do
59
- column 12 do
53
+ content padding: [:top3, :bottom3] do
54
+ title 'Headerless Table'
55
+ table do
56
+ drivers.each do |driver|
57
+ row do
58
+ column driver.name
59
+ column driver.team
60
+ column driver.country
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ grid padding: :top3 do
67
+ column 6 do
68
+ form do
60
69
  title 'Selectable (with form)'
61
- table selectable: true do
62
- header do
63
- column 'Material'
64
- column 'Quantity'
65
- column 'Unit price'
66
- end
67
- items.each do |item|
68
- row name: :id, value: item.id do
69
- column item.material
70
- column item.quantity
71
- column item.price
70
+ content padding: :bottom2 do
71
+ table selectable: true do
72
+ header do
73
+ column 'Material'
74
+ column 'Quantity'
75
+ column 'Unit price'
76
+ end
77
+ items.each do |item|
78
+ row name: :id, value: item.id do
79
+ column item.material
80
+ column item.quantity
81
+ column item.price
82
+ end
72
83
  end
73
84
  end
74
85
  end
75
- end
76
- column 12 do
77
86
  button 'SUBMIT', type: :raised do
78
87
  event :click do
79
- replaces :context_list, :context_list
88
+ replaces :context_list, :context_list
80
89
  end
81
90
  end
82
- attach :context_list
83
91
  end
84
92
  end
93
+ column 6 do
94
+ attach :context_list
95
+ end
85
96
  end
86
97
 
87
98
  grid wide: true do
@@ -9,23 +9,30 @@ Voom::Presenters.define(:text_areas) do
9
9
  indented_grid do
10
10
  headline 'Multiple line'
11
11
 
12
- text_area name: :notes, rows: 3 do
13
- label 'Text lines...'
14
- hint 'Default behavior is full width'
12
+ form do
13
+ text_area name: :notes, rows: 3, required: true do
14
+ label 'Text lines...'
15
+ hint 'Default behavior is full width'
16
+ end
17
+
18
+ text_area name: :notes, rows: 5, cols: 60, full_width: false do
19
+ label 'Five by Sixty'
20
+ hint 'Or specify using rows and columns'
21
+ end
22
+
23
+ rich_text_area name: :notes, placeholder: 'Text entered here is saved as HTML', rows: 10 do
24
+ label 'Rich Text Area'
25
+ hint 'Default is full width and 25 rows'
26
+ end
27
+
28
+ button 'Submit' do
29
+ event :click do
30
+ posts '/_echo_'
31
+ snackbar 'Posted to _echo_'
32
+ end
33
+ end
15
34
  end
16
35
 
17
-
18
- text_area name: :notes, rows: 5, cols: 60, full_width: false do
19
- label 'Five by Sixty'
20
- hint 'Or specify using rows and columns'
21
- end
22
-
23
- rich_text_area name: :notes, placeholder: 'Text entered here is saved as HTML' do
24
- label 'Rich Text Area'
25
- hint 'Default is full width and 25 rows'
26
- end
27
-
28
-
29
36
  attach :code, file: __FILE__
30
37
  end
31
- end
38
+ end