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,16 +1,3 @@
1
- require 'voom/presenters/dsl/components/menu'
2
- require 'voom/presenters/dsl/components/typography'
3
- require 'voom/presenters/dsl/components/mixins/common'
4
- require 'voom/presenters/dsl/components/mixins/event'
5
- require 'voom/presenters/dsl/components/mixins/attaches'
6
- require 'voom/presenters/dsl/components/mixins/avatar'
7
- require 'voom/presenters/dsl/components/mixins/text_fields'
8
- require 'voom/presenters/dsl/components/mixins/icons'
9
- require 'voom/presenters/dsl/components/mixins/selects'
10
- require 'voom/presenters/dsl/components/mixins/snackbars'
11
- require 'voom/presenters/dsl/components/mixins/date_time_fields'
12
- require 'voom/presenters/dsl/components/mixins/chips'
13
-
14
1
  module Voom
15
2
  module Presenters
16
3
  module DSL
@@ -23,10 +10,19 @@ module Voom
23
10
  include Mixins::Icons
24
11
  include Mixins::Selects
25
12
  include Mixins::Snackbars
26
- include Mixins::Chips
27
-
28
- attr_reader :height, :width, :selected, :components, :shows_errors
29
-
13
+ include Mixins::Chipset
14
+ include Mixins::FileInputs
15
+ include Mixins::Dialogs
16
+ include Mixins::Progress
17
+
18
+ attr_reader :height,
19
+ :width,
20
+ :selected,
21
+ :components,
22
+ :shows_errors,
23
+ :padding,
24
+ :hidden,
25
+ :background_color
30
26
 
31
27
  def initialize(**attribs_, &block)
32
28
  super(type: :card, **attribs_, &block)
@@ -34,7 +30,11 @@ module Voom
34
30
  @width = attribs.delete(:width)
35
31
  @selected = attribs.delete(:selected) {false}
36
32
  self.text(attribs.delete(:text)) if attribs.key?(:text)
37
- @shows_errors = attribs.delete(:shows_errors){true}
33
+ @shows_errors = attribs.delete(:shows_errors) {true}
34
+ padding = attribs.delete(:padding) {:all}
35
+ @padding = validate_padding(coerce_padding(padding)).uniq if padding != nil
36
+ @hidden = attribs.delete(:hidden){false}
37
+ @background_color = attribs.delete(:background_color)
38
38
 
39
39
  @components = []
40
40
  expand!
@@ -46,27 +46,19 @@ module Voom
46
46
  **attribs, &block)
47
47
  end
48
48
 
49
- # def overflow_menu(**attribs, &block)
50
- # return @overflow_menu if locked?
51
- # icon = attribs.delete(:icon){:more_vert}
52
- # position = attribs.delete(:position){ [:top, :right]}
53
- # @overflow_menu = Components::Button.new(parent: self,
54
- # icon: icon,
55
- # position: position,
56
- # context: context,
57
- # **attribs, &block)
58
- # end
59
-
60
49
  class Media < Base
61
- include Mixins::Avatar
62
- attr_reader :height, :width, :color
50
+ include Mixins::Attaches
51
+ include Mixins::Common
52
+ attr_reader :height, :width, :color, :hidden, :components
63
53
 
64
54
  def initialize(**attribs_, &block)
65
55
  super(type: :media, **attribs_, &block)
66
56
  @height = attribs.delete(:height)
67
57
  @width = attribs.delete(:width)
68
58
  @color = attribs.delete(:color)
59
+ @hidden = attribs.delete(:hidden) {false}
69
60
 
61
+ @components = []
70
62
  expand!
71
63
  end
72
64
 
@@ -79,14 +71,25 @@ module Voom
79
71
  **attribs, &block)
80
72
  end
81
73
 
82
- def image(image=nil, **attribs, &block)
74
+ def subtitle(*text, **attribs, &block)
75
+ return @subtitle if locked?
76
+ @subtitle = Components::Typography.new(parent: self, type: :subtitle, text: text, **attribs, &block)
77
+ end
78
+
79
+ def avatar(avatar = nil, **attribs, &block)
80
+ return @avatar if locked?
81
+ @avatar = Avatar.new(parent: self, avatar: avatar,
82
+ **attribs, &block)
83
+ end
84
+
85
+ def image(image = nil, **attribs, &block)
83
86
  return @image if locked?
84
87
  @image = Image.new(parent: self, image: image, **attribs, &block)
85
88
  end
86
89
 
87
- def button(icon=nil, **attributes, &block)
90
+ def button(icon = nil, **attributes, &block)
88
91
  return @button if locked?
89
- @button = Components::Button.new(icon: icon, position:[:top, :right], parent: self, **attributes, &block)
92
+ @button = Components::Button.new(icon: icon, position: [:top, :right], parent: self, **attributes, &block)
90
93
  end
91
94
  end
92
95
 
@@ -102,19 +105,29 @@ module Voom
102
105
  end
103
106
 
104
107
  class Actions < Base
105
- attr_accessor :buttons
108
+ attr_accessor :buttons, :switches
106
109
 
107
110
  def initialize(**attribs_, &block)
108
111
  super(type: :action, **attribs_, &block)
109
112
  @buttons = []
113
+ @switches = []
110
114
  expand!
111
115
  end
112
116
 
113
- def button(text=nil, **options, &block)
117
+ def button(text = nil, **options, &block)
114
118
  @buttons << Components::Button.new(parent: self, text: text,
115
119
  **options, &block)
116
120
  end
121
+
122
+ def switch(text = nil, **options, &block)
123
+ @switches << Components::Switch.new(parent: self, text: text,
124
+ **options, &block)
125
+ end
117
126
  end
127
+
128
+ private
129
+
130
+ include Mixins::Padding
118
131
  end
119
132
  end
120
133
  end
@@ -1,5 +1,3 @@
1
- require 'voom/presenters/dsl/components/toggle_base'
2
-
3
1
  module Voom
4
2
  module Presenters
5
3
  module DSL
@@ -1,15 +1,11 @@
1
- require 'voom/presenters/dsl/components/icon_base'
2
- require 'voom/presenters/dsl/components/mixins/event'
3
- require 'voom/presenters/dsl/components/mixins/tooltips'
4
-
5
1
  module Voom
6
2
  module Presenters
7
3
  module DSL
8
4
  module Components
9
5
  class Chip < EventBase
10
6
  include Mixins::Tooltips
11
- attr_reader :icons, :color, :name, :value
12
-
7
+ attr_reader :icons, :color, :name, :value, :chipset_variant, :selected
8
+
13
9
  def initialize(**attribs_, &block)
14
10
  super(type: :chip,
15
11
  **attribs_, &block)
@@ -19,7 +15,9 @@ module Voom
19
15
  @color = attribs.delete(:color)
20
16
  @name = attribs.delete(:name)
21
17
  @value = attribs.delete(:value)
18
+ @selected = attribs.delete(:selected){false}
22
19
  expand!
20
+ @chipset_variant = self.parent(:chipset)&.variant.to_s
23
21
  end
24
22
 
25
23
  def text(*text, **attribs, &block)
@@ -36,7 +34,7 @@ module Voom
36
34
  return @menu if locked?
37
35
  @menu = Components::Menu.new(parent: self, **attributes, &block)
38
36
  end
39
-
37
+
40
38
  class Icon < Components::IconBase
41
39
 
42
40
  def initialize(**attribs_, &block)
@@ -0,0 +1,33 @@
1
+ module Voom
2
+ module Presenters
3
+ module DSL
4
+ module Components
5
+ class Chipset < EventBase
6
+ include Mixins::Chips
7
+ attr_reader :variant, :components
8
+
9
+ VALID_VARIANTS = %i[choice filter input].freeze
10
+
11
+ def initialize(chipset_variant = nil, **attribs_, &block)
12
+ super(type: :chipset, **attribs_, &block)
13
+ @variant = validate_variant(chipset_variant)
14
+ @components = []
15
+ expand!
16
+ end
17
+
18
+ private
19
+
20
+ def validate_variant(chipset_variant)
21
+ return unless chipset_variant
22
+ chipset_variant = chipset_variant.to_sym
23
+ unless VALID_VARIANTS.include?(chipset_variant)
24
+ raise Errors::ParameterValidation, "Invalid chipset variant specified: #{chipset_variant}"
25
+ end
26
+ chipset_variant
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,18 +1,3 @@
1
- require 'voom/presenters/dsl/components/menu'
2
- require 'voom/presenters/dsl/components/mixins/common'
3
- require 'voom/presenters/dsl/components/mixins/event'
4
- require 'voom/presenters/dsl/components/mixins/attaches'
5
- require 'voom/presenters/dsl/components/mixins/text_fields'
6
- require 'voom/presenters/dsl/components/mixins/selects'
7
- require 'voom/presenters/dsl/components/mixins/snackbars'
8
- require 'voom/presenters/dsl/components/mixins/date_time_fields'
9
- require 'voom/presenters/dsl/components/mixins/images'
10
- require 'voom/presenters/dsl/components/mixins/steppers'
11
- require 'voom/presenters/dsl/components/mixins/sliders'
12
- require 'voom/presenters/dsl/components/mixins/chips'
13
- require 'voom/presenters/dsl/components/mixins/icons'
14
- require 'voom/presenters/dsl/components/mixins/dialogs'
15
-
16
1
  module Voom
17
2
  module Presenters
18
3
  module DSL
@@ -26,20 +11,45 @@ module Voom
26
11
  include Mixins::Snackbars
27
12
  include Mixins::Steppers
28
13
  include Mixins::Sliders
29
- include Mixins::Chips
14
+ include Mixins::Chipset
30
15
  include Mixins::Icons
31
16
  include Mixins::Dialogs
17
+ include Mixins::FileInputs
18
+ include Mixins::Avatar
19
+ include Mixins::Progress
20
+
21
+ attr_reader :hidden,
22
+ :float,
23
+ :components,
24
+ :shows_errors,
25
+ :width,
26
+ :height,
27
+ :position,
28
+ :text_align,
29
+ :padding,
30
+ :inline,
31
+ :background_color
32
32
 
33
- attr_reader :hidden, :float, :components, :shows_errors
34
-
35
33
  def initialize(**attribs_, &block)
36
34
  super(type: :content, **attribs_, &block)
37
35
  @components = []
38
36
  @hidden = attribs.delete(:hidden){false}
39
37
  @float = attribs.delete(:float){false}
38
+ @width = attribs.delete(:width){nil}
39
+ @height = attribs.delete(:height){nil}
40
40
  @shows_errors = attribs.delete(:shows_errors){false}
41
+ @position = Array(attribs.delete(:position)).compact
42
+ @text_align = attribs.delete(:text_align){'left'}
43
+ padding = attribs.delete(:padding) {nil}
44
+ @padding = validate_padding(coerce_padding(padding)).uniq if padding != nil
45
+ @inline = attribs.delete(:inline){false}
46
+ @background_color = attribs.delete(:background_color)
41
47
  expand!
42
48
  end
49
+
50
+ private
51
+ include Mixins::Padding
52
+
43
53
  end
44
54
  end
45
55
  end
@@ -1,5 +1,3 @@
1
- require 'voom/presenters/dsl/components/text_field'
2
-
3
1
  module Voom
4
2
  module Presenters
5
3
  module DSL
@@ -1,5 +1,3 @@
1
- require 'voom/presenters/dsl/components/datetime_base'
2
-
3
1
  module Voom
4
2
  module Presenters
5
3
  module DSL
@@ -1,24 +1,31 @@
1
- require 'voom/presenters/dsl/components/mixins/common'
2
- require 'voom/presenters/dsl/components/mixins/attaches'
3
- require 'voom/presenters/dsl/components/mixins/steppers'
4
- require 'voom/presenters/dsl/components/mixins/sliders'
5
-
6
1
  module Voom
7
2
  module Presenters
8
3
  module DSL
9
4
  module Components
10
- class Dialog < Base
5
+ class Dialog < EventBase
11
6
  include Mixins::Common
12
7
  include Mixins::Attaches
13
8
  include Mixins::Steppers
14
9
  include Mixins::Sliders
10
+ include Mixins::Event
11
+ include Mixins::Progress
15
12
 
16
- attr_accessor :width, :height, :buttons, :components, :shows_errors
13
+ attr_accessor :percent_width,
14
+ :percent_height,
15
+ :px_width,
16
+ :px_height,
17
+ :buttons,
18
+ :components,
19
+ :shows_errors
17
20
 
18
21
  def initialize(**attribs_, &block)
19
22
  super(type: :dialog, **attribs_, &block)
20
- @width = attribs.delete(:width)
21
- @height = attribs.delete(:height)
23
+ width = attribs.delete(:width)
24
+ height = attribs.delete(:height)
25
+ @percent_width = width&.end_with?("%") ? width : nil
26
+ @percent_height = height&.end_with?("%") ? height : nil
27
+ @px_width = !width&.end_with?("%") ? width : nil
28
+ @px_height = !height&.end_with?("%") ? height : nil
22
29
  @shows_errors = attribs.delete(:shows_errors){true}
23
30
 
24
31
  @buttons = []
@@ -29,7 +36,7 @@ module Voom
29
36
  def title(*title, **options, &block)
30
37
  return @title if locked?
31
38
  @title = Components::Typography.new(parent: self, type: :title,
32
- text: title,
39
+ text: title,
33
40
  **options, &block)
34
41
  end
35
42
 
@@ -45,10 +52,27 @@ module Voom
45
52
  **options, &block)
46
53
  end
47
54
 
48
- def button(text=nil, **attribs, &block)
49
- @buttons << Button.new(parent: self, text: text,
55
+ def actions(**attribs, &block)
56
+ return @actions if locked?
57
+ @actions = Actions.new(parent: self,
50
58
  **attribs, &block)
51
59
  end
60
+
61
+ class Actions < Base
62
+ attr_accessor :buttons
63
+
64
+ def initialize(**attribs_, &block)
65
+ super(type: :action, **attribs_, &block)
66
+ @buttons = []
67
+ expand!
68
+ end
69
+
70
+ def button(text = nil, **options, &block)
71
+ @buttons << Components::Button.new(parent: self, text: text,
72
+ **options, &block)
73
+ end
74
+ end
75
+
52
76
  end
53
77
  end
54
78
  end
@@ -1,6 +1,3 @@
1
- require 'voom/presenters/dsl/components/mixins/common'
2
- require 'voom/presenters/dsl/components/mixins/attaches'
3
-
4
1
  module Voom
5
2
  module Presenters
6
3
  module DSL
@@ -9,11 +6,11 @@ module Voom
9
6
  include Mixins::Common
10
7
  include Mixins::Attaches
11
8
 
12
- attr_accessor :title, :components
9
+ attr_accessor :title, :subtitle, :components
13
10
 
14
11
  def initialize(**attribs_, &block)
15
12
  super(type: :drawer, **attribs_, &block)
16
- self.title(attribs.delete(:title)) if attribs.key?(:title)
13
+ self.title(attribs.delete(:title)) if attribs.fetch(:title){nil}
17
14
  @components = []
18
15
 
19
16
  expand!
@@ -27,7 +24,7 @@ module Voom
27
24
 
28
25
  def attach(presenter, **params, &block)
29
26
  pom = super
30
- @menu = pom.components.select {|i| i.type==:menu}.first
27
+ @menu = pom.components.select {|i| i.type == :menu}.first
31
28
  end
32
29
 
33
30
  def title(*text, **attribs, &block)
@@ -35,6 +32,12 @@ module Voom
35
32
  @title = Components::Typography.new(parent: self, type: :text, text: text, **attribs, &block)
36
33
  end
37
34
 
35
+
36
+ def subtitle(*text, **attribs, &block)
37
+ return @subtitle if locked?
38
+ @subtitle = Components::Typography.new(parent: self, type: :text, text: text, **attribs, &block)
39
+ end
40
+
38
41
  end
39
42
  end
40
43
  end
@@ -1,16 +1,3 @@
1
- require 'voom/presenters/dsl/components/actions/loads'
2
- require 'voom/presenters/dsl/components/actions/replaces'
3
- require 'voom/presenters/dsl/components/actions/posts'
4
- require 'voom/presenters/dsl/components/actions/updates'
5
- require 'voom/presenters/dsl/components/actions/deletes'
6
- require 'voom/presenters/dsl/components/actions/remove'
7
- require 'voom/presenters/dsl/components/actions/dialog'
8
- require 'voom/presenters/dsl/components/actions/toggle_visibility'
9
- require 'voom/presenters/dsl/components/actions/snackbar'
10
- require 'voom/presenters/dsl/components/actions/clear'
11
- require 'voom/presenters/dsl/components/actions/navigates'
12
- require 'voom/presenters/dsl/components/actions/stepper'
13
-
14
1
  module Voom
15
2
  module Presenters
16
3
  module DSL
@@ -18,7 +5,7 @@ module Voom
18
5
  class Event < Base
19
6
  attr_accessor :event, :actions
20
7
  # Alias common event names
21
- EVENT_MAP = {focus: :focusin, blur: :focusout}
8
+ EVENT_MAP = {focus: :focusin, blur: :focusout, onload: :after_init}
22
9
 
23
10
  def initialize(**attribs_, &block)
24
11
  super(type: :event, **attribs_, &block)
@@ -27,86 +14,118 @@ module Voom
27
14
  expand!
28
15
  end
29
16
 
30
- def loads(presenter=nil, path: nil, target: nil, **params, &block)
31
- @actions << Actions::Loads.new(parent: self,
32
- presenter: presenter,
33
- path: path,
34
- target: target,
35
- params: params, &block)
17
+ def <<(comp)
18
+ @actions << comp
36
19
  end
37
20
 
38
- def replaces(target, presenter, input_tag: nil, **params, &block)
39
- @actions << Actions::Replaces.new(parent: self,
40
- target: target,
41
- presenter: presenter,
42
- input_tag: input_tag,
43
- params: params, &block)
21
+ def loads(presenter = nil, path: nil, target: nil, input_tag: nil, wait_for_download: nil, **params, &block)
22
+ self << Actions::Loads.new(parent: self,
23
+ presenter: presenter,
24
+ path: path,
25
+ target: target,
26
+ input_tag: input_tag,
27
+ wait_for_download: wait_for_download,
28
+ params: params, &block)
29
+ end
30
+
31
+ def replaces(target, presenter, input_tag: nil, ignore_input_values: [], **params, &block)
32
+ self << Actions::Replaces.new(parent: self,
33
+ target: target,
34
+ presenter: presenter,
35
+ input_tag: input_tag,
36
+ ignore_input_values: Array(ignore_input_values),
37
+ params: params, &block)
44
38
  end
45
39
 
46
40
  # Method can be one of :post, :put, :delete or :patch
47
- def posts(path, input_tag: nil, **params, &block)
48
- @actions << Actions::Posts.new(parent: self,
49
- path: path,
50
- input_tag: input_tag,
51
- params: params, &block)
41
+ def posts(path, input_tag: nil, headers: nil, **params, &block)
42
+ self << Actions::Posts.new(parent: self,
43
+ path: path,
44
+ input_tag: input_tag,
45
+ headers: headers,
46
+ params: params, &block)
52
47
  end
53
48
 
54
49
  alias creates posts
55
50
 
56
- def updates(path, input_tag: nil, **params, &block)
57
- @actions << Actions::Updates.new(parent: self,
58
- path: path,
59
- input_tag: input_tag,
60
- params: params, &block)
51
+ def updates(path, input_tag: nil, headers: nil, **params, &block)
52
+ self << Actions::Updates.new(parent: self,
53
+ path: path,
54
+ input_tag: input_tag,
55
+ headers: headers,
56
+ params: params, &block)
61
57
  end
62
58
 
63
- def deletes(path, input_tag: nil, **params, &block)
64
- @actions << Actions::Deletes.new(parent: self,
65
- path: path,
66
- input_tag: input_tag,
67
- params: params, &block)
59
+ def deletes(path, input_tag: nil, headers: nil, **params, &block)
60
+ self << Actions::Deletes.new(parent: self,
61
+ path: path,
62
+ input_tag: input_tag,
63
+ headers: headers,
64
+ params: params, &block)
68
65
  end
69
66
 
70
67
  def dialog(dialog_id, **params, &block)
71
- @actions << Actions::Dialog.new(parent: self,
72
- target: dialog_id,
73
- params: params, &block)
68
+ self << Actions::Dialog.new(parent: self,
69
+ target: dialog_id,
70
+ params: params, &block)
74
71
  end
75
72
 
76
73
  def toggle_visibility(component_id, **params, &block)
77
- @actions << Actions::ToggleVisibility.new(parent: self,
78
- target: component_id,
74
+ self << Actions::ToggleVisibility.new(parent: self,
75
+ target: component_id,
76
+ params: params, &block)
77
+ end
78
+
79
+ def toggle_disabled(component_id, **params, &block)
80
+ self << Actions::ToggleDisabled.new(parent: self,
81
+ target: component_id,
82
+ params: params, &block)
83
+ end
84
+
85
+ def prompt_if_dirty(dialog_id, input_tag: nil, **params, &block)
86
+ self << Actions::PromptIfDirty.new(parent: self,
87
+ target: dialog_id,
88
+ input_tag: input_tag,
79
89
  params: params, &block)
80
90
  end
81
91
 
82
92
  # Removes the component and all its children
83
93
  # Takes either an id or a list of ids.
84
94
  def remove(*ids, **params, &block)
85
- @actions << Actions::Remove.new(parent: self,
86
- params: params.merge(ids: ids), &block)
95
+ self << Actions::Remove.new(parent: self,
96
+ params: params.merge(ids: ids), &block)
87
97
  end
98
+
88
99
  alias removes remove
89
100
 
90
101
  def show(component_id, **params, &block)
91
- @actions << Actions::ToggleVisibility.new(parent: self,
92
- target: component_id,
93
- params: params.merge(action: :show), &block)
102
+ self << Actions::ToggleVisibility.new(parent: self,
103
+ target: component_id,
104
+ params: params.merge(action: :show), &block)
94
105
  end
95
106
 
96
107
  def hide(component_id, **params, &block)
97
- @actions << Actions::ToggleVisibility.new(parent: self,
98
- target: component_id,
99
- params: params.merge(action: :hide), &block)
108
+ self << Actions::ToggleVisibility.new(parent: self,
109
+ target: component_id,
110
+ params: params.merge(action: :hide), &block)
100
111
  end
101
112
 
102
113
  def snackbar(text, **params, &block)
103
- @actions << Actions::Snackbar.new(parent: self,
104
- params: params.merge(text: text), &block)
114
+ self << Actions::Snackbar.new(parent: self,
115
+ params: params.merge(text: text), &block)
116
+ end
117
+
118
+ def autocomplete(path, **params, &block)
119
+ @actions << Actions::Autocomplete.new(parent: self,
120
+ type: :autocomplete,
121
+ path: path,
122
+ target: "#{parent(:text_field).id}-list",
123
+ params: params, &block)
105
124
  end
106
-
125
+
107
126
  def navigates(direction, **params, &block)
108
- @actions << Actions::Navigates.new(parent: self,
109
- params: params.merge(direction: direction), &block)
127
+ self << Actions::Navigates.new(parent: self,
128
+ params: params.merge(direction: direction), &block)
110
129
  end
111
130
 
112
131
  alias navigate navigates
@@ -115,21 +134,43 @@ module Voom
115
134
  # Takes either an id or a list of ids.
116
135
  # If the id is that of a form then all the clearable inputs on the form will be cleared.
117
136
  def clear(*ids, **params, &block)
118
- @actions << Actions::Clear.new(parent: self,
119
- params: params.merge(ids: ids), &block)
137
+ self << Actions::Clear.new(parent: self,
138
+ params: params.merge(ids: ids), &block)
120
139
  end
121
-
122
140
  alias clears clear
123
141
 
142
+ def close_dialog(component_id, **params, &block)
143
+ self << Actions::CloseDialog.new(parent: self,
144
+ target: component_id,
145
+ params: params, &block)
146
+ end
147
+
148
+ def post_message(msg, **params, &block)
149
+ self << Actions::PostMessage.new(parent: self,
150
+ params: params.merge(message: msg), &block)
151
+ end
152
+
124
153
  def stepper(navigate, **params, &block)
125
- @actions << Actions::Stepper.new(parent: self,
126
- params: params.merge(navigate: navigate, stepper_id: parent(:stepper).id), &block)
154
+ self << Actions::Stepper.new(parent: self,
155
+ params: params.merge(navigate: navigate, stepper_id: parent(:stepper).id), &block)
127
156
  end
128
157
 
129
158
  private
159
+
130
160
  def alias_event(event)
131
- EVENT_MAP.fetch(event.to_sym){event.to_sym}
161
+ EVENT_MAP.fetch(event.to_sym) {event.to_sym}
162
+ end
163
+
164
+ def initialize_plugins
165
+ self.class.include_plugins(:DSLEventActions, :DSLHelpers, plugins: _plugins_)
132
166
  end
167
+
168
+ def _plugins_
169
+ @parent.send(:_plugins_) if @parent
170
+ end
171
+
172
+
173
+ include Voom::Presenters::DSL::Components::Mixins::LastResponse
133
174
  end
134
175
  end
135
176
  end