voom-presenters 0.2.0 → 2.1.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 (447) 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 +42 -0
  7. data/.gitignore +3 -2
  8. data/.releaserc +15 -0
  9. data/.ruby-version +2 -1
  10. data/CHANGELOG.md +71 -108
  11. data/CONTRIBUTING.md +60 -0
  12. data/Gemfile +14 -4
  13. data/Gemfile.lock +93 -46
  14. data/Procfile +1 -0
  15. data/README.md +48 -39
  16. data/app/demo/components/avatars.pom +40 -0
  17. data/app/demo/components/cards.pom +11 -4
  18. data/app/demo/components/chips.pom +61 -54
  19. data/app/demo/components/content.pom +96 -16
  20. data/app/demo/components/dialogs.pom +175 -6
  21. data/app/demo/components/file_inputs.pom +38 -2
  22. data/app/demo/components/google_maps.pom +6 -1
  23. data/app/demo/components/headers.pom +80 -20
  24. data/app/demo/components/icons.pom +86 -55
  25. data/app/demo/components/image_lists.pom +100 -0
  26. data/app/demo/components/images.pom +45 -0
  27. data/app/demo/components/layouts.pom +3 -25
  28. data/app/demo/components/lists.pom +24 -4
  29. data/app/demo/components/menus.pom +14 -4
  30. data/app/demo/components/multi_selects.pom +29 -0
  31. data/app/demo/components/nav/menu.pom +39 -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 +45 -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/index.pom +5 -5
  56. data/app/demo/nav/top_nav.pom +10 -4
  57. data/app/demo/patterns/drag_drop.pom +89 -0
  58. data/app/demo/patterns/floating_card.pom +29 -0
  59. data/app/demo/patterns/search_select.pom +9 -7
  60. data/app/demo/plugins/chart.pom +254 -0
  61. data/app/demo/plugins/image_crop.pom +44 -0
  62. data/app/demo/plugins/index.pom +29 -0
  63. data/app/demo/plugins/nav/drawer.pom +19 -0
  64. data/app/demo/shared/context_list.pom +1 -1
  65. data/app/demo/styles.pom +3 -1
  66. data/bin/console +4 -4
  67. data/component-status.yml +15 -15
  68. data/config.ru +20 -10
  69. data/docs/settings.md +81 -0
  70. data/exe/presenters +3 -0
  71. data/lib/hash_ext/traverse.rb +14 -0
  72. data/lib/voom.rb +25 -0
  73. data/lib/voom/container_methods.rb +2 -2
  74. data/lib/voom/engine.rb +5 -0
  75. data/lib/voom/presenters/api/app.rb +31 -11
  76. data/lib/voom/presenters/api/router.rb +3 -49
  77. data/lib/voom/presenters/app.rb +3 -3
  78. data/lib/voom/presenters/cli.rb +28 -0
  79. data/lib/voom/presenters/demo/dragon_drop.rb +48 -0
  80. data/lib/voom/presenters/demo/echo.rb +2 -0
  81. data/lib/voom/presenters/demo/slow.rb +18 -0
  82. data/lib/voom/presenters/dsl/components/actions/autocomplete.rb +15 -0
  83. data/lib/voom/presenters/dsl/components/actions/base.rb +36 -8
  84. data/lib/voom/presenters/dsl/components/actions/clear.rb +0 -2
  85. data/lib/voom/presenters/dsl/components/actions/close_dialog.rb +17 -0
  86. data/lib/voom/presenters/dsl/components/actions/deletes.rb +0 -2
  87. data/lib/voom/presenters/dsl/components/actions/dialog.rb +0 -2
  88. data/lib/voom/presenters/dsl/components/actions/loads.rb +5 -6
  89. data/lib/voom/presenters/dsl/components/actions/navigates.rb +0 -2
  90. data/lib/voom/presenters/dsl/components/actions/post_message.rb +17 -0
  91. data/lib/voom/presenters/dsl/components/actions/posts.rb +5 -2
  92. data/lib/voom/presenters/dsl/components/actions/prompt_if_dirty.rb +15 -0
  93. data/lib/voom/presenters/dsl/components/actions/remove.rb +0 -2
  94. data/lib/voom/presenters/dsl/components/actions/replaces.rb +4 -4
  95. data/lib/voom/presenters/dsl/components/actions/snackbar.rb +0 -2
  96. data/lib/voom/presenters/dsl/components/actions/stepper.rb +0 -2
  97. data/lib/voom/presenters/dsl/components/actions/toggle_disabled.rb +15 -0
  98. data/lib/voom/presenters/dsl/components/actions/toggle_visibility.rb +0 -2
  99. data/lib/voom/presenters/dsl/components/actions/updates.rb +5 -2
  100. data/lib/voom/presenters/dsl/components/avatar.rb +4 -8
  101. data/lib/voom/presenters/dsl/components/badge.rb +0 -2
  102. data/lib/voom/presenters/dsl/components/base.rb +25 -18
  103. data/lib/voom/presenters/dsl/components/button.rb +15 -11
  104. data/lib/voom/presenters/dsl/components/card.rb +49 -36
  105. data/lib/voom/presenters/dsl/components/checkbox.rb +0 -2
  106. data/lib/voom/presenters/dsl/components/chip.rb +5 -7
  107. data/lib/voom/presenters/dsl/components/chipset.rb +33 -0
  108. data/lib/voom/presenters/dsl/components/content.rb +28 -18
  109. data/lib/voom/presenters/dsl/components/datetime_base.rb +0 -2
  110. data/lib/voom/presenters/dsl/components/datetime_field.rb +0 -2
  111. data/lib/voom/presenters/dsl/components/dialog.rb +36 -12
  112. data/lib/voom/presenters/dsl/components/drawer.rb +9 -6
  113. data/lib/voom/presenters/dsl/components/event.rb +106 -65
  114. data/lib/voom/presenters/dsl/components/event_base.rb +1 -3
  115. data/lib/voom/presenters/dsl/components/expansion_panel.rb +0 -3
  116. data/lib/voom/presenters/dsl/components/file_input.rb +18 -6
  117. data/lib/voom/presenters/dsl/components/footer.rb +2 -2
  118. data/lib/voom/presenters/dsl/components/form.rb +2 -17
  119. data/lib/voom/presenters/dsl/components/grid.rb +52 -50
  120. data/lib/voom/presenters/dsl/components/header.rb +17 -1
  121. data/lib/voom/presenters/dsl/components/hidden_field.rb +0 -2
  122. data/lib/voom/presenters/dsl/components/icon.rb +2 -4
  123. data/lib/voom/presenters/dsl/components/icon_base.rb +5 -7
  124. data/lib/voom/presenters/dsl/components/icon_toggle.rb +2 -4
  125. data/lib/voom/presenters/dsl/components/image.rb +61 -13
  126. data/lib/voom/presenters/dsl/components/image_list.rb +43 -0
  127. data/lib/voom/presenters/dsl/components/input.rb +14 -5
  128. data/lib/voom/presenters/dsl/components/link.rb +33 -0
  129. data/lib/voom/presenters/dsl/components/list.rb +6 -13
  130. data/lib/voom/presenters/dsl/components/lists/action.rb +9 -11
  131. data/lib/voom/presenters/dsl/components/lists/actions.rb +0 -3
  132. data/lib/voom/presenters/dsl/components/lists/line.rb +27 -15
  133. data/lib/voom/presenters/dsl/components/menu.rb +51 -9
  134. data/lib/voom/presenters/dsl/components/mixins/append.rb +2 -2
  135. data/lib/voom/presenters/dsl/components/mixins/attaches.rb +0 -2
  136. data/lib/voom/presenters/dsl/components/mixins/avatar.rb +1 -3
  137. data/lib/voom/presenters/dsl/components/mixins/chips.rb +0 -2
  138. data/lib/voom/presenters/dsl/components/mixins/chipset.rb +19 -0
  139. data/lib/voom/presenters/dsl/components/mixins/common.rb +13 -14
  140. data/lib/voom/presenters/dsl/components/mixins/dialogs.rb +0 -2
  141. data/lib/voom/presenters/dsl/components/mixins/event.rb +0 -2
  142. data/lib/voom/presenters/dsl/components/mixins/image_lists.rb +15 -0
  143. data/lib/voom/presenters/dsl/components/mixins/last_response.rb +48 -0
  144. data/lib/voom/presenters/dsl/components/mixins/padding.rb +42 -0
  145. data/lib/voom/presenters/dsl/components/mixins/progress.rb +16 -0
  146. data/lib/voom/presenters/dsl/components/mixins/selects.rb +6 -0
  147. data/lib/voom/presenters/dsl/components/mixins/tab_bars.rb +2 -0
  148. data/lib/voom/presenters/dsl/components/mixins/tables.rb +15 -0
  149. data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +5 -0
  150. data/lib/voom/presenters/dsl/components/mixins/toggles.rb +0 -2
  151. data/lib/voom/presenters/dsl/components/mixins/typography.rb +55 -8
  152. data/lib/voom/presenters/dsl/components/mixins/yield_to.rb +2 -2
  153. data/lib/voom/presenters/dsl/components/multi_select.rb +56 -0
  154. data/lib/voom/presenters/dsl/components/number_field.rb +20 -0
  155. data/lib/voom/presenters/dsl/components/page_title.rb +31 -0
  156. data/lib/voom/presenters/dsl/components/progress.rb +27 -0
  157. data/lib/voom/presenters/dsl/components/radio_button.rb +0 -1
  158. data/lib/voom/presenters/dsl/components/rich_text_area.rb +5 -11
  159. data/lib/voom/presenters/dsl/components/select.rb +18 -9
  160. data/lib/voom/presenters/dsl/components/separator.rb +21 -0
  161. data/lib/voom/presenters/dsl/components/slider.rb +6 -7
  162. data/lib/voom/presenters/dsl/components/stepper.rb +0 -10
  163. data/lib/voom/presenters/dsl/components/switch.rb +0 -2
  164. data/lib/voom/presenters/dsl/components/tab_bar.rb +0 -3
  165. data/lib/voom/presenters/dsl/components/table.rb +39 -20
  166. data/lib/voom/presenters/dsl/components/text_area.rb +1 -3
  167. data/lib/voom/presenters/dsl/components/text_field.rb +54 -11
  168. data/lib/voom/presenters/dsl/components/time_field.rb +0 -2
  169. data/lib/voom/presenters/dsl/components/toggle_base.rb +8 -6
  170. data/lib/voom/presenters/dsl/components/typography.rb +4 -4
  171. data/lib/voom/presenters/dsl/components/unordered_list.rb +50 -0
  172. data/lib/voom/presenters/dsl/definer.rb +0 -4
  173. data/lib/voom/presenters/dsl/definition.rb +6 -5
  174. data/lib/voom/presenters/dsl/protect_from_forgery.rb +43 -0
  175. data/lib/voom/presenters/dsl/user_interface.rb +37 -22
  176. data/lib/voom/presenters/errors.rb +1 -0
  177. data/lib/voom/presenters/errors/invalid_dsl.rb +8 -0
  178. data/lib/voom/presenters/errors/parameter_validation.rb +1 -3
  179. data/lib/voom/presenters/generators/inflectors.rb +59 -0
  180. data/lib/voom/presenters/generators/plugin.rb +115 -0
  181. data/lib/voom/presenters/generators/templates/plugin/.gitignore +12 -0
  182. data/lib/voom/presenters/generators/templates/plugin/Gemfile +6 -0
  183. data/lib/voom/presenters/generators/templates/plugin/LICENSE.txt.tt +21 -0
  184. data/lib/voom/presenters/generators/templates/plugin/README.md +253 -0
  185. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/actions/action.rb.tt +16 -0
  186. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/actions/dsl.rb.tt +22 -0
  187. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/component.rb.tt +18 -0
  188. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/dsl.rb.tt +19 -0
  189. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/helpers/helper.rb.tt +15 -0
  190. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/plugin.rb.tt +9 -0
  191. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/web_client/components/actions/data.rb.tt +17 -0
  192. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/web_client/components/render.rb.tt +23 -0
  193. data/lib/voom/presenters/generators/templates/plugin/presenter_plugin.gemspec.tt +21 -0
  194. data/lib/voom/presenters/generators/templates/plugin/views/assets/css/components/component.css.tt +21 -0
  195. data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/actions/action.js.tt +15 -0
  196. data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/component.js.tt +39 -0
  197. data/lib/voom/presenters/generators/templates/plugin/views/components/component.erb.tt +14 -0
  198. data/lib/voom/presenters/generators/templates/plugin/views/components/component_header.erb.tt +20 -0
  199. data/lib/voom/presenters/helpers.rb +2 -8
  200. data/lib/voom/presenters/helpers/inflector.rb +1 -1
  201. data/lib/voom/presenters/helpers/rails.rb +15 -8
  202. data/lib/voom/presenters/helpers/redact.rb +13 -0
  203. data/lib/voom/presenters/helpers/route.rb +12 -5
  204. data/lib/voom/presenters/pluggable.rb +37 -0
  205. data/lib/voom/presenters/plugins.rb +7 -0
  206. data/lib/voom/presenters/plugins/google_maps.rb +24 -0
  207. data/lib/voom/presenters/plugins/google_maps/google_map.erb +10 -0
  208. data/lib/voom/presenters/{dsl/components → plugins/google_maps}/google_map.rb +4 -3
  209. data/lib/voom/presenters/{dsl.rb → registry.rb} +13 -15
  210. data/lib/voom/presenters/router.rb +59 -0
  211. data/lib/voom/presenters/settings.rb +18 -8
  212. data/lib/voom/presenters/version.rb +3 -1
  213. data/lib/voom/presenters/web_client/app.rb +86 -29
  214. data/lib/voom/presenters/web_client/component_decorator_factory.rb +27 -0
  215. data/lib/voom/presenters/web_client/component_html_decorator.rb +50 -0
  216. data/lib/voom/presenters/web_client/component_renderer.rb +49 -0
  217. data/lib/voom/presenters/web_client/custom_css.rb +65 -0
  218. data/lib/voom/presenters/web_client/{markdown_render.rb → custom_render.rb} +5 -3
  219. data/lib/voom/presenters/web_client/helpers/expand_hash.rb +19 -0
  220. data/lib/voom/presenters/web_client/helpers/form_helpers.rb +14 -0
  221. data/lib/voom/presenters/web_client/helpers/padding_helpers.rb +21 -0
  222. data/lib/voom/presenters/web_client/plugin_headers.rb +37 -0
  223. data/lib/voom/presenters/web_client/router.rb +3 -54
  224. data/lib/voom/railtie.rb +37 -0
  225. data/lib/voom/symbol/to_str.rb +3 -3
  226. data/lib/voom/trace.rb +0 -2
  227. data/presenters.gemspec +10 -6
  228. data/public/bundle.css +18256 -0
  229. data/public/bundle.js +60106 -0
  230. data/public/img/demo/avatar.jpg +0 -0
  231. data/public/presenters/custom_css.css +26 -0
  232. data/public/wc.js +52861 -0
  233. data/scripts/build.sh +10 -0
  234. data/views/mdc/.eslintrc.yml +1 -0
  235. data/views/mdc/.nvmrc +1 -0
  236. data/views/mdc/assets/js/app.js +13 -2
  237. data/views/mdc/assets/js/components/base-component.js +147 -12
  238. data/views/mdc/assets/js/components/base-container.js +54 -14
  239. data/views/mdc/assets/js/components/base-toggle.js +56 -0
  240. data/views/mdc/assets/js/components/button.js +74 -5
  241. data/views/mdc/assets/js/components/cards.js +3 -3
  242. data/views/mdc/assets/js/components/checkboxes.js +7 -30
  243. data/views/mdc/assets/js/components/chips.js +76 -12
  244. data/views/mdc/assets/js/components/content.js +5 -4
  245. data/views/mdc/assets/js/components/data-tables.js +11 -34
  246. data/views/mdc/assets/js/components/datetime.js +29 -6
  247. data/views/mdc/assets/js/components/dialogs.js +128 -31
  248. data/views/mdc/assets/js/components/drag_n_drop.js +182 -0
  249. data/views/mdc/assets/js/components/drawer.js +43 -0
  250. data/views/mdc/assets/js/components/events.js +190 -73
  251. data/views/mdc/assets/js/components/events/action_parameter.js +62 -0
  252. data/views/mdc/assets/js/components/events/action_parameter.test.js +62 -0
  253. data/views/mdc/assets/js/components/events/autocomplete.js +94 -0
  254. data/views/mdc/assets/js/components/events/base.js +139 -23
  255. data/views/mdc/assets/js/components/events/clears.js +15 -12
  256. data/views/mdc/assets/js/components/events/close_dialog.js +50 -0
  257. data/views/mdc/assets/js/components/events/dialog.js +32 -14
  258. data/views/mdc/assets/js/components/events/encode.js +8 -0
  259. data/views/mdc/assets/js/components/events/errors.js +175 -92
  260. data/views/mdc/assets/js/components/events/loads.js +50 -11
  261. data/views/mdc/assets/js/components/events/navigates.js +17 -15
  262. data/views/mdc/assets/js/components/events/plugin.js +18 -0
  263. data/views/mdc/assets/js/components/events/post_message.js +21 -0
  264. data/views/mdc/assets/js/components/events/posts.js +147 -65
  265. data/views/mdc/assets/js/components/events/prompt_if_dirty.js +67 -0
  266. data/views/mdc/assets/js/components/events/removes.js +7 -6
  267. data/views/mdc/assets/js/components/events/replaces.js +87 -33
  268. data/views/mdc/assets/js/components/events/snackbar.js +10 -10
  269. data/views/mdc/assets/js/components/events/stepper.js +8 -10
  270. data/views/mdc/assets/js/components/events/toggle_disabled.js +41 -0
  271. data/views/mdc/assets/js/components/events/toggle_visibility.js +57 -15
  272. data/views/mdc/assets/js/components/file-inputs.js +68 -21
  273. data/views/mdc/assets/js/components/form-fields.js +16 -0
  274. data/views/mdc/assets/js/components/forms.js +3 -3
  275. data/views/mdc/assets/js/components/get_event_target.js +15 -0
  276. data/views/mdc/assets/js/components/grid.js +7 -6
  277. data/views/mdc/assets/js/components/header.js +20 -0
  278. data/views/mdc/assets/js/components/hidden-fields.js +19 -8
  279. data/views/mdc/assets/js/components/icon-toggles.js +7 -7
  280. data/views/mdc/assets/js/components/images.js +19 -0
  281. data/views/mdc/assets/js/components/initialize.js +54 -27
  282. data/views/mdc/assets/js/components/lists.js +9 -4
  283. data/views/mdc/assets/js/components/menus.js +60 -13
  284. data/views/mdc/assets/js/components/mixins/dirtyable.js +22 -0
  285. data/views/mdc/assets/js/components/mixins/event-handler.js +7 -7
  286. data/views/mdc/assets/js/components/mixins/visibility-observer.js +22 -21
  287. data/views/mdc/assets/js/components/multi-select.js +75 -0
  288. data/views/mdc/assets/js/components/plugins.js +86 -0
  289. data/views/mdc/assets/js/components/progress.js +31 -0
  290. data/views/mdc/assets/js/components/radios.js +6 -31
  291. data/views/mdc/assets/js/components/rich-text-area.js +217 -33
  292. data/views/mdc/assets/js/components/rich-text-area/horizontal-rule-blot.js +23 -0
  293. data/views/mdc/assets/js/components/root_document.js +5 -0
  294. data/views/mdc/assets/js/components/selects.js +18 -8
  295. data/views/mdc/assets/js/components/sliders.js +23 -12
  296. data/views/mdc/assets/js/components/snackbar.js +11 -8
  297. data/views/mdc/assets/js/components/steppers.js +3 -3
  298. data/views/mdc/assets/js/components/switches.js +6 -29
  299. data/views/mdc/assets/js/components/tab-bars.js +18 -4
  300. data/views/mdc/assets/js/components/text-fields.js +94 -22
  301. data/views/mdc/assets/js/components/tooltip.js +17 -0
  302. data/views/mdc/assets/js/components/typography.js +28 -0
  303. data/views/mdc/assets/js/components/uninitialize.js +7 -0
  304. data/views/mdc/assets/js/wc.js +111 -0
  305. data/views/mdc/assets/scss/app.scss +13 -5
  306. data/views/mdc/assets/scss/components/avatar.scss +51 -7
  307. data/views/mdc/assets/scss/components/button.scss +7 -9
  308. data/views/mdc/assets/scss/components/card.scss +6 -5
  309. data/views/mdc/assets/scss/components/chip.scss +4 -0
  310. data/views/mdc/assets/scss/components/content.scss +25 -0
  311. data/views/mdc/assets/scss/components/data-table.scss +12 -1
  312. data/views/mdc/assets/scss/components/datetime.scss +1 -2
  313. data/views/mdc/assets/scss/components/dialog.scss +7 -2
  314. data/views/mdc/assets/scss/components/drag_n_drop.scss +17 -0
  315. data/views/mdc/assets/scss/components/drawer.scss +82 -0
  316. data/views/mdc/assets/scss/components/expansion-panel.scss +2 -2
  317. data/views/mdc/assets/scss/components/fab.scss +23 -5
  318. data/views/mdc/assets/scss/components/file-input.scss +10 -14
  319. data/views/mdc/assets/scss/components/grid.scss +32 -17
  320. data/views/mdc/assets/scss/components/header.scss +21 -0
  321. data/views/mdc/assets/scss/components/icon-button-toggles.scss +2 -0
  322. data/views/mdc/assets/scss/components/icon.scss +23 -0
  323. data/views/mdc/assets/scss/components/image-list.scss +18 -0
  324. data/views/mdc/assets/scss/components/image.scss +13 -21
  325. data/views/mdc/assets/scss/components/list.scss +9 -3
  326. data/views/mdc/assets/scss/components/menu.scss +13 -3
  327. data/views/mdc/assets/scss/components/multi-select.scss +44 -0
  328. data/views/mdc/assets/scss/components/progress.scss +1 -0
  329. data/views/mdc/assets/scss/components/rich-text-area.scss +38 -2
  330. data/views/mdc/assets/scss/components/select.scss +6 -3
  331. data/views/mdc/assets/scss/components/separator.scss +3 -0
  332. data/views/mdc/assets/scss/components/switch.scss +10 -0
  333. data/views/mdc/assets/scss/components/textfield.scss +8 -4
  334. data/views/mdc/assets/scss/components/tooltip.scss +3 -0
  335. data/views/mdc/assets/scss/components/typography.scss +6 -0
  336. data/views/mdc/assets/scss/components/unordered-lists.scss +17 -0
  337. data/views/mdc/assets/scss/material.blue_grey-orange.min.css +1 -1
  338. data/views/mdc/assets/scss/media.scss +39 -0
  339. data/views/mdc/assets/scss/palette.scss +16 -0
  340. data/views/mdc/assets/scss/styles.scss +39 -1
  341. data/views/mdc/assets/scss/theme.scss +19 -2
  342. data/views/mdc/body/dismissable-drawer.erb +34 -0
  343. data/views/mdc/body/drawer/divider.erb +1 -0
  344. data/views/mdc/body/drawer/item.erb +13 -0
  345. data/views/mdc/body/drawer/label.erb +1 -0
  346. data/views/mdc/body/drawers/menu.erb +1 -1
  347. data/views/mdc/body/footers/menu_item.erb +2 -2
  348. data/views/mdc/body/header.erb +38 -31
  349. data/views/mdc/body/modal-drawer.erb +35 -0
  350. data/views/mdc/body/snackbar.erb +11 -5
  351. data/views/mdc/components/actions/autocomplete.rb +8 -0
  352. data/views/mdc/components/actions/close_dialog.rb +10 -0
  353. data/views/mdc/components/actions/loads.rb +7 -1
  354. data/views/mdc/components/actions/navigates.rb +1 -1
  355. data/views/mdc/components/actions/post.rb +4 -7
  356. data/views/mdc/components/actions/post_message.rb +10 -0
  357. data/views/mdc/components/actions/prompt_if_dirty.rb +17 -0
  358. data/views/mdc/components/actions/replaces.rb +5 -1
  359. data/views/mdc/components/actions/resolver.rb +39 -0
  360. data/views/mdc/components/actions/snackbar.rb +3 -1
  361. data/views/mdc/components/actions/toggle_disabled.rb +10 -0
  362. data/views/mdc/components/avatar.erb +12 -7
  363. data/views/mdc/components/badge.erb +1 -1
  364. data/views/mdc/components/button.erb +2 -3
  365. data/views/mdc/components/buttons/button.erb +12 -12
  366. data/views/mdc/components/buttons/fab.erb +3 -2
  367. data/views/mdc/components/buttons/icon.erb +5 -5
  368. data/views/mdc/components/buttons/image.erb +4 -3
  369. data/views/mdc/components/card.erb +67 -44
  370. data/views/mdc/components/checkbox.erb +32 -35
  371. data/views/mdc/components/chip.erb +38 -30
  372. data/views/mdc/components/chipset.erb +18 -0
  373. data/views/mdc/components/content.erb +35 -14
  374. data/views/mdc/components/datetime.erb +6 -19
  375. data/views/mdc/components/dialog.erb +45 -25
  376. data/views/mdc/components/drag_and_drop/drag_and_drop.rb +16 -0
  377. data/views/mdc/components/event.erb +3 -5
  378. data/views/mdc/components/expansion_panel.erb +8 -6
  379. data/views/mdc/components/file_input.erb +14 -10
  380. data/views/mdc/components/form.erb +4 -19
  381. data/views/mdc/components/grid.erb +20 -17
  382. data/views/mdc/components/hidden_field.erb +3 -4
  383. data/views/mdc/components/icon.erb +7 -5
  384. data/views/mdc/components/icon_toggle.erb +9 -8
  385. data/views/mdc/components/image.erb +23 -5
  386. data/views/mdc/components/image_list.erb +38 -0
  387. data/views/mdc/components/link.erb +3 -13
  388. data/views/mdc/components/list.erb +4 -2
  389. data/views/mdc/components/list/avatar.erb +2 -1
  390. data/views/mdc/components/list/header.erb +5 -3
  391. data/views/mdc/components/list/hidden_field.erb +3 -0
  392. data/views/mdc/components/list/icon.erb +2 -1
  393. data/views/mdc/components/list/line.erb +19 -9
  394. data/views/mdc/components/list/menu.erb +7 -2
  395. data/views/mdc/components/list/separator.erb +1 -1
  396. data/views/mdc/components/menu.erb +14 -6
  397. data/views/mdc/components/multi_select.erb +33 -0
  398. data/views/mdc/components/number_field.erb +38 -0
  399. data/views/mdc/components/page_title.erb +2 -2
  400. data/views/mdc/components/progress.erb +11 -0
  401. data/views/mdc/components/radio_button.erb +5 -6
  402. data/views/mdc/components/render.erb +2 -3
  403. data/views/mdc/components/rich_text_area.erb +13 -10
  404. data/views/mdc/components/select.erb +28 -12
  405. data/views/mdc/components/separator.erb +3 -0
  406. data/views/mdc/components/shared/hint_error_display.erb +9 -0
  407. data/views/mdc/components/shared/input_label.erb +7 -0
  408. data/views/mdc/components/slider.erb +3 -1
  409. data/views/mdc/components/stepper.erb +1 -1
  410. data/views/mdc/components/stepper/step.erb +1 -1
  411. data/views/mdc/components/switch.erb +8 -7
  412. data/views/mdc/components/tab_bar.erb +7 -1
  413. data/views/mdc/components/table.erb +26 -13
  414. data/views/mdc/components/table/checkbox.erb +6 -3
  415. data/views/mdc/components/table/column.erb +18 -0
  416. data/views/mdc/components/table/footer.erb +8 -0
  417. data/views/mdc/components/table/header.erb +5 -4
  418. data/views/mdc/components/table/pagination.erb +2 -6
  419. data/views/mdc/components/table/row.erb +5 -5
  420. data/views/mdc/components/text_area.erb +9 -11
  421. data/views/mdc/components/text_field.erb +29 -37
  422. data/views/mdc/components/tooltip.erb +2 -2
  423. data/views/mdc/components/typography.erb +7 -5
  424. data/views/mdc/components/unordered_list.erb +10 -0
  425. data/views/mdc/components/unordered_list/icon.erb +3 -0
  426. data/views/mdc/components/unordered_list/list_item.erb +7 -0
  427. data/views/mdc/layout.erb +41 -29
  428. data/views/mdc/package-lock.json +2241 -1332
  429. data/views/mdc/package.json +47 -29
  430. data/views/mdc/web.erb +4 -0
  431. data/views/mdc/webpack.config.js +13 -1
  432. metadata +228 -32
  433. data/app/demo/component_status.pom +0 -76
  434. data/lib/voom-presenters.rb +0 -9
  435. data/lib/voom/presenters-engine.rb +0 -44
  436. data/lib/voom/presenters.rb +0 -19
  437. data/public/.gitignore +0 -2
  438. data/scripts/bump.sh +0 -5
  439. data/scripts/changelog.sh +0 -5
  440. data/scripts/deploy-demo.sh +0 -3
  441. data/scripts/release.sh +0 -5
  442. data/scripts/tag.sh +0 -5
  443. data/views/mdc/assets/js/dialog-polyfill.js +0 -738
  444. data/views/mdc/assets/scss/components/icon-toggles.scss +0 -9
  445. data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +0 -13
  446. data/views/mdc/body/drawer.erb +0 -18
  447. data/views/mdc/components/google_map.erb +0 -9
@@ -4,28 +4,108 @@ Voom::Presenters.define(:content) do
4
4
  helpers Demo::Helpers::IndentedGrid
5
5
  attach :top_nav
6
6
  attach :component_drawer
7
- page_title 'Forms'
7
+ page_title 'Content'
8
8
 
9
- grid do
10
- column 1
11
- column 4 do
12
- card do
13
- headline 'Posts in Form'
14
- body 'This demonstrates that a change event on **ANY** form input will send all the form inputs to the event action. '\
15
- 'This works with posts and replace actions'
16
- content do
17
- text_field name: :myfield do
18
- label 'Data to post'
9
+ indented_grid do
10
+ headline 'Content blocks are wrappers for content and layout'
11
+ body %(They have many uses this demo will outline their attributes and their common use cases.)
12
+ blank
13
+ body %(See the [padding demo](#{presenters_path(:padding)}) for example on how padding works in content blocks.)
14
+ blank
15
+
16
+ title 'Content as a block element'
17
+ content do
18
+ text 'A content block with no attributes can turn an inline element into a block element', inline: true
19
+ end
20
+ text '..continuing text', inline: true
21
+ blank
22
+
23
+ title 'Attribute: `inline`'
24
+ content padding: :bottom3 do
25
+ text 'Inline controls the behavior of the content block within its context. It does not afffect the layout or flow' +
26
+ 'of components within it. This provides a powerful method for building custom layouts'
27
+ content do
28
+ content inline: true, width: '500px', background_color: :cyan, padding: :full do
29
+ card do
30
+ text 'Section One (Chips in a block)'
31
+ chipset do
32
+ chip 'Chip 1'
33
+ chip 'Chip 1', color: :primary
34
+ chip 'Chip 2', color: :secondary
35
+ chip color: :hotpink do
36
+ text 'Chip 3', color: :white
37
+ end
38
+ end
19
39
  end
20
- text_field name: :myfield2 do
21
- label 'More Data to post'
40
+ end
41
+ content inline: false, width: '20%', position: [:top, :right] do
42
+ card do
43
+ text 'Section Two'
22
44
  end
23
- event :change do
24
- replaces :context_list, :context_list
45
+ end
46
+ content inline: true, width: '20%' do
47
+ card do
48
+ text 'Section Three'
25
49
  end
26
50
  end
27
- attach :context_list
28
51
  end
29
52
  end
53
+ blank
54
+
55
+ title 'Attribute: `hidden`'
56
+ text 'A content block can be hidden and shown in response to page events.'
57
+ content id: :peekaboo, hidden: true do
58
+ title 'Peekabo'
59
+ end
60
+ button :show_hide do
61
+ event :click do
62
+ toggle_visibility :peekaboo
63
+ end
64
+ end
65
+ blank
66
+
67
+ title 'Attributes: `width` and `height`'
68
+ text 'A content block can set its width and height. Units can be pixels, rems or percentages.'
69
+ content width: '50%', height: '8rem' do
70
+ card do
71
+ title "I'm wider! and taller!"
72
+ end
73
+ end
74
+ blank
75
+
76
+ title 'Attributes: `position`'
77
+ text 'A content block can be positioned to be :top, :right, :bottom, :left or a combination of the container its inside'
78
+ content id: :parent, width: '50%', height: '8rem' do
79
+ content position: [:bottom, :right] do
80
+ card do
81
+ title "I'm on the bottom right"
82
+ end
83
+ end
84
+ end
85
+ blank
86
+
87
+ title 'Attributes: `text_align`'
88
+ text %(A content block can define how its typography will be alligned inside it.
89
+ Valid values: left|right|center|justify)
90
+ content width: '50%', height: '8rem' do
91
+ content text_align: :center do
92
+ title "I'm centered text", inline: 'true'
93
+ title ".. me 2", inline: 'true'
94
+ end
95
+ end
96
+ blank
97
+
98
+ title 'Attribute: `float`'
99
+ text 'A content block can float above the other content. This is useful for things like type ahead previews. Or hovering previews.'
100
+ content float: true do
101
+ card do
102
+ title "I'm floating!"
103
+ end
104
+ end
105
+ text "xxxxxxxxxxxxxxxx I'm text that is obscured by the floating card in the content block above me"
106
+ blank
107
+
108
+
109
+ attach :code, file: __FILE__
30
110
  end
31
111
  end
@@ -2,11 +2,79 @@ require_relative '../helpers/indented_grid'
2
2
 
3
3
  Voom::Presenters.define(:dialogs) do
4
4
  helpers Demo::Helpers::IndentedGrid
5
+ helpers do
6
+ def dlg_form
7
+ form do
8
+ text_field name: :myfield do
9
+ label 'Data to post'
10
+ end
11
+ grid padding: :none do
12
+ column 4, padding: :none do
13
+ date_field do
14
+ label 'Date Field'
15
+ end
16
+ end
17
+ column 4
18
+ column 4 do
19
+ time_field do
20
+ label 'Time Field'
21
+ end
22
+ end
23
+ end
24
+ text_field name: :myfield2 do
25
+ label 'More Data to post'
26
+ end
27
+ end
28
+ end
29
+
30
+ def shakespeare
31
+ <<-HEREDOC
32
+ This is a really really long description. Shakespeare once said:
33
+ To be, or not to be: that is the question:
34
+ Whether 'tis nobler in the mind to suffer
35
+ The slings and arrows of outrageous fortune,
36
+ Or to take arms against a sea of troubles,
37
+ And by opposing end them? To die: to sleep;
38
+ No more; and by a sleep to say we end
39
+ The heart-ache and the thousand natural shocks
40
+ That flesh is heir to, 'tis a consummation
41
+ Devoutly to be wish'd. To die, to sleep;
42
+ To sleep: perchance to dream: ay, there's the rub;
43
+ For in that sleep of death what dreams may come
44
+ When we have shuffled off this mortal coil,
45
+ Must give us pause: there's the respect
46
+ That makes calamity of so long life;
47
+ For who would bear the whips and scorns of time,
48
+ The oppressor's wrong, the proud man's contumely,
49
+ The pangs of despised love, the law's delay,
50
+ The insolence of office and the spurns
51
+ That patient merit of the unworthy takes,
52
+ When he himself might his quietus make
53
+ With a bare bodkin? who would fardels bear,
54
+ To grunt and sweat under a weary life,
55
+ But that the dread of something after death,
56
+ The undiscover'd country from whose bourn
57
+ No traveller returns, puzzles the will
58
+ And makes us rather bear those ills we have
59
+ Than fly to others that we know not of?
60
+ Thus conscience does make cowards of us all;
61
+ And thus the native hue of resolution
62
+ Is sicklied o'er with the pale cast of thought,
63
+ And enterprises of great pith and moment
64
+ With this regard their currents turn awry,
65
+ And lose the name of action.--Soft you now!
66
+ The fair Ophelia! Nymph, in thy orisons
67
+ Be all my sins remember'd!
68
+ HEREDOC
69
+ end
70
+ end
5
71
  attach :top_nav
6
72
  attach :component_drawer
7
73
  page_title 'Dialogs'
8
74
 
75
+
9
76
  indented_grid do
77
+ body 'Simple dialog with disabled button'
10
78
  button 'Show Dialog' do
11
79
  event :click do
12
80
  dialog :hold_on
@@ -14,13 +82,114 @@ Voom::Presenters.define(:dialogs) do
14
82
  end
15
83
 
16
84
  dialog id: :hold_on do
17
- title "MDL Dialog"
18
- body 'This is an example of the Material Design Lite dialog component. Please use responsibly.'
85
+ title "MDC Dialog"
86
+ body 'This is an example of the Material Design Component for the web dialog component. Please use responsibly.'
87
+
88
+ actions do
89
+ button 'Close'
90
+ button 'Disabled action', disabled: true
91
+ end
92
+ end
93
+
94
+ body 'Dialog with width set'
95
+ button 'Show Dialog' do
96
+ event :click do
97
+ dialog :width_demo
98
+ end
99
+ end
100
+
101
+ dialog id: :width_demo, width: '400px' do
102
+ title "MDC Dialog"
103
+ body shakespeare
104
+
105
+ actions do
106
+ button 'Close'
107
+ end
108
+ end
109
+
110
+ grid do
111
+ column 9 do
112
+ body 'Dialog with form'
113
+ button 'With Form' do
114
+ event :click do
115
+ dialog :with_form
116
+ end
117
+ end
118
+ body 'Dialog with multiple forms'
119
+ button 'Muliple Forms' do
120
+ event :click do
121
+ dialog :multi_form_dialog
122
+ end
123
+ end
124
+ body 'Dialog with height and width'
125
+ button 'Height/Width' do
126
+ event :click do
127
+ dialog :height_width_dialog
128
+ end
129
+ end
130
+
131
+ end
132
+ column 3 do
133
+ attach :context_list
134
+ end
135
+ end
136
+
137
+ dialog id: :with_form do
138
+ title "Dialog with Form"
139
+ dlg_form
140
+ actions do
141
+ button 'Close'
142
+ button 'Update' do
143
+ event :click do
144
+ replaces :context_list, :context_list
145
+ end
146
+ end
147
+ end
148
+ end
19
149
 
20
- button 'Disabled action', disabled: true
21
- button 'Close'
150
+ dialog id: :multi_form_dialog do
151
+ title "Dialog with Multiple Forms"
152
+ subtitle
153
+ form do
154
+ text_field name: :myfield do
155
+ label 'Data to post'
156
+ end
157
+ text_field name: :myfield2 do
158
+ label 'More Data to post'
159
+ end
160
+ subtitle "These are normal buttons and will not automatically close the dialog. However, you can call 'close_dialog' to programatically close the dialog."
161
+ button 'Close' do
162
+ event :click do
163
+ close_dialog :multi_form_dialog
164
+ end
165
+ end
166
+ button 'Update (and remain open)' do
167
+ event :click do
168
+ replaces :context_list, :context_list
169
+ end
170
+ end
171
+ end
172
+ separator
173
+ content tag: :second_form_input do
174
+ dlg_form
175
+ end
176
+ subtitle 'The buttons below are Dialog Action buttons. When clicked, they will process any configured actions, then automatically clsoe the dialog.'
177
+ actions do
178
+ button 'Close'
179
+ button 'Update' do
180
+ event :click do
181
+ replaces :context_list, :context_list, input_tag: :second_form_input
182
+ end
183
+ end
184
+ end
22
185
  end
23
186
 
24
- attach :code, file: __FILE__
187
+ dialog id: :height_width_dialog, height: '500px', width: '500px' do
188
+ title "Dialog with set dimensions"
189
+ body "MDC dialogs have default styles of max-width 560px (for 592px viewport or larger) and min-width 280px."
190
+ end
25
191
  end
26
- end
192
+
193
+ attach :code, file: __FILE__
194
+ end
195
+
@@ -7,9 +7,45 @@ Voom::Presenters.define(:file_inputs) do
7
7
  page_title 'File Inputs'
8
8
 
9
9
  indented_grid do
10
- form do
11
- file_input name: :upload
10
+
11
+ file_input name: :event_image, preview: [:preview_id, :filename] do
12
+ grid do
13
+ column 6 do
14
+ card do
15
+ image width: 200, id: :preview_id
16
+ text id: :filename
17
+ text 'Drag and drop or click this button to upload'
18
+ button icon: :cloud_upload
19
+ end
20
+ end
21
+ column 6 do
22
+ end
23
+ end
24
+ end
25
+
26
+
27
+ title 'Simple'
28
+ file_input name: :upload
29
+
30
+ title 'With image preview'
31
+ file_input preview: :image_id, accept: 'image/png, image/jpeg, image/gif, image/svg+xml'
32
+ image 'http://geotix.com/application/files/3514/5564/7308/MyNorthTicketsLogo.png', width: 100, id: :image_id
33
+
34
+ title 'With image button preview'
35
+ file_input preview: :button_id, accept: 'image/png, image/jpeg, image/gif, image/svg+xml'
36
+ button type: :image, id: :button_id do
37
+ image 'http://geotix.com/application/files/3514/5564/7308/MyNorthTicketsLogo.png'
12
38
  end
39
+ text 'Note: it binds to the button id, not the nested image id.'
40
+
41
+ title 'With text_area preview'
42
+ file_input preview: :text_area_id, accept: 'text/plain, text/markdown'
43
+ text_area id: :text_area_id
44
+
45
+ title 'With image and file_name preview'
46
+ file_input preview: [:text_area_id2, :filename_id], accept: 'text/plain, text/markdown'
47
+ subtitle2 id: :filename_id
48
+ text_area id: :text_area_id2
13
49
 
14
50
  attach :code, file: __FILE__
15
51
  end
@@ -9,7 +9,12 @@ Voom::Presenters.define(:maps) do
9
9
  indented_grid do
10
10
  subheading 'Static Maps'
11
11
 
12
- google_map address: '125 Park Street, Traverse City, MI', height: 300, width: 400
12
+ address = '125 Park Street, Traverse City, MI'
13
+ google_map address: address, height: 300, width: 400 do
14
+ event :click do
15
+ loads "https://www.google.com/maps/place/#{address}"
16
+ end
17
+ end
13
18
 
14
19
  attach :code, file: __FILE__
15
20
  end
@@ -1,41 +1,101 @@
1
1
  require_relative '../helpers/indented_grid'
2
2
 
3
+ Voom::Presenters.define(:static_header, namespace: :headers) do
4
+ helpers Demo::Helpers::IndentedGrid
5
+
6
+ attach :component_drawer
7
+
8
+ indented_grid do
9
+ text 'The **static header** disappears when scrolling.'
10
+ text 'It is the default header type and will never cover page content.'
11
+ text 'You can expand the **Show Source** area below to see it in action.'
12
+ end
13
+
14
+ header title: 'Static Header', placement: :static do
15
+ nav do
16
+ item 'Headers' do
17
+ event :click do
18
+ loads '/headers'
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ indented_grid do
25
+ headline 'Headers'
26
+
27
+ attach :code, file: __FILE__
28
+ end
29
+ end
30
+
31
+ Voom::Presenters.define(:fixed_header, namespace: :headers) do
32
+ helpers Demo::Helpers::IndentedGrid
33
+
34
+ attach :component_drawer
35
+
36
+ indented_grid do
37
+ text 'The **fixed header** remains fixed to the top of the viewport when scrolling.'
38
+ text 'A header can be made fixed via `placement: :fixed`, and can cover page content.'
39
+ text 'You can expand the **Show Source** area below to see it in action.'
40
+ end
41
+
42
+ header title: 'Fixed Header', placement: :fixed do
43
+ nav do
44
+ item 'Headers' do
45
+ event :click do
46
+ loads '/headers'
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ indented_grid do
53
+ headline 'Headers'
54
+
55
+ attach :code, file: __FILE__
56
+ end
57
+ end
58
+
3
59
  Voom::Presenters.define(:headers) do
4
60
  helpers Demo::Helpers::IndentedGrid
5
61
 
6
62
  attach :top_nav
7
63
  attach :component_drawer
8
64
 
9
-
10
65
  header 'Presenters Demo' do
11
66
  nav do
12
67
  item 'About (Header)' do
13
- event :click do
14
- loads :index
15
- end
16
- end
17
-
18
- item 'Components (Header)' do
19
- event :click do
20
- loads :components
21
- end
22
- end
23
-
24
- item 'Styles (Header)' do
25
- event :click do
26
- loads :styles
27
- end
28
- end
68
+ event :click do
69
+ loads :index
70
+ end
71
+ end
72
+
73
+ item 'Components (Header)' do
74
+ event :click do
75
+ loads :components
76
+ end
77
+ end
78
+
79
+ item 'Styles (Header)' do
80
+ event :click do
81
+ loads :styles
82
+ end
83
+ end
29
84
  end
30
85
  end
86
+
31
87
  page_title 'Page about headers' do
32
88
  icon :subtitles
33
89
  end
34
90
 
35
-
36
91
  indented_grid do
37
92
  headline 'Headers'
38
-
93
+
94
+ text '* [Static](/headers/static_header): Hides when the viewport is scrolled'
95
+ text '* [Fixed](/headers/fixed_header): Remains fixed at the top of the viewport'
96
+ end
97
+
98
+ indented_grid do
39
99
  attach :code, file: __FILE__
40
100
  end
41
- end
101
+ end