voom-presenters 0.1.10 → 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 (515) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -1
  3. data/.gem_release.yml +1 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  6. data/.github/ISSUE_TEMPLATE/questions-support.md +10 -0
  7. data/.github/workflows/semantic-release.yml +39 -0
  8. data/.gitignore +4 -2
  9. data/.releaserc +8 -0
  10. data/.ruby-version +2 -1
  11. data/CHANGELOG.md +136 -0
  12. data/CODE-OF-CONDUCT.md +73 -0
  13. data/CONTRIBUTING.md +60 -0
  14. data/Gemfile +12 -3
  15. data/Gemfile.lock +106 -64
  16. data/HISTORY.md +61 -0
  17. data/Procfile +1 -0
  18. data/README.md +75 -22
  19. data/app/demo/component_status.pom +1 -1
  20. data/app/demo/components/avatars.pom +40 -0
  21. data/app/demo/components/cards.pom +11 -4
  22. data/app/demo/components/chips.pom +65 -52
  23. data/app/demo/components/content.pom +111 -0
  24. data/app/demo/components/date_fields.pom +1 -1
  25. data/app/demo/components/datetime_fields.pom +6 -0
  26. data/app/demo/components/dialogs.pom +175 -6
  27. data/app/demo/components/drawers.pom +1 -1
  28. data/app/demo/components/file_inputs.pom +52 -0
  29. data/app/demo/components/footers.pom +1 -1
  30. data/app/demo/components/google_maps.pom +22 -0
  31. data/app/demo/components/headers.pom +80 -20
  32. data/app/demo/components/icons.pom +86 -55
  33. data/app/demo/components/image_lists.pom +100 -0
  34. data/app/demo/components/images.pom +45 -0
  35. data/app/demo/components/layouts.pom +15 -5
  36. data/app/demo/components/lists.pom +51 -17
  37. data/app/demo/components/menus.pom +14 -4
  38. data/app/demo/components/nav/menu.pom +40 -2
  39. data/app/demo/components/nav/pattern_drawer.pom +5 -0
  40. data/app/demo/components/nav/pattern_menu.pom +12 -0
  41. data/app/demo/components/number_fields.pom +53 -0
  42. data/app/demo/components/padding.pom +96 -0
  43. data/app/demo/components/progress.pom +71 -0
  44. data/app/demo/components/selects.pom +44 -5
  45. data/app/demo/components/sliders.pom +54 -0
  46. data/app/demo/components/snackbar.pom +10 -0
  47. data/app/demo/components/steppers.pom +178 -0
  48. data/app/demo/components/tab_bars.pom +66 -0
  49. data/app/demo/components/tables.pom +96 -13
  50. data/app/demo/components/text_areas.pom +23 -3
  51. data/app/demo/components/text_fields.pom +75 -17
  52. data/app/demo/components/toggles.pom +83 -16
  53. data/app/demo/components/tooltips.pom +10 -10
  54. data/app/demo/components/unordered_list.pom +81 -0
  55. data/app/demo/custom_css.pom +37 -0
  56. data/app/demo/events/actions/autocomplete.pom +3 -3
  57. data/app/demo/events/actions/clear.pom +25 -0
  58. data/app/demo/events/actions/dialogs/discard.pom +9 -0
  59. data/app/demo/events/actions/dialogs/show_dialog.pom +4 -2
  60. data/app/demo/events/actions/last_response.pom +40 -0
  61. data/app/demo/events/actions/loads.pom +16 -6
  62. data/app/demo/events/actions/posts.pom +1 -1
  63. data/app/demo/events/actions/prompt_if_dirty.pom +54 -0
  64. data/app/demo/events/actions/toggle_visiblity.pom +4 -3
  65. data/app/demo/events/content_as_form.pom +313 -0
  66. data/app/demo/events/nav/drawer.pom +7 -3
  67. data/app/demo/events/parallel.pom +44 -0
  68. data/app/demo/events/tagged_input.pom +37 -0
  69. data/app/demo/hello_world.pom +3 -0
  70. data/app/demo/markdown.pom +1 -0
  71. data/app/demo/namespaces.pom +89 -0
  72. data/app/demo/nav/top_nav.pom +24 -0
  73. data/app/demo/patterns.pom +19 -0
  74. data/app/demo/patterns/drag_drop.pom +89 -0
  75. data/app/demo/patterns/floating_card.pom +29 -0
  76. data/app/demo/patterns/search_select.pom +106 -0
  77. data/app/demo/plugins/chart.pom +254 -0
  78. data/app/demo/plugins/image_crop.pom +44 -0
  79. data/app/demo/plugins/index.pom +29 -0
  80. data/app/demo/plugins/nav/drawer.pom +19 -0
  81. data/app/demo/shared/context_list.pom +2 -2
  82. data/app/demo/styles.pom +24 -12
  83. data/bin/console +4 -4
  84. data/bin/presenters +3 -0
  85. data/component-status.yml +26 -26
  86. data/config.ru +21 -10
  87. data/docs/settings.md +81 -0
  88. data/lib/hash_ext/traverse.rb +14 -0
  89. data/lib/voom.rb +25 -0
  90. data/lib/voom/container_methods.rb +2 -2
  91. data/lib/voom/engine.rb +5 -0
  92. data/lib/voom/presenters/api/app.rb +46 -13
  93. data/lib/voom/presenters/api/router.rb +3 -87
  94. data/lib/voom/presenters/app.rb +3 -3
  95. data/lib/voom/presenters/cli.rb +28 -0
  96. data/lib/voom/presenters/demo/dragon_drop.rb +48 -0
  97. data/lib/voom/presenters/demo/echo.rb +7 -0
  98. data/lib/voom/presenters/demo/slow.rb +18 -0
  99. data/lib/voom/presenters/dsl/components/actions/autocomplete.rb +15 -0
  100. data/lib/voom/presenters/dsl/components/actions/base.rb +65 -0
  101. data/lib/voom/presenters/dsl/components/actions/clear.rb +15 -0
  102. data/lib/voom/presenters/dsl/components/actions/close_dialog.rb +17 -0
  103. data/lib/voom/presenters/dsl/components/actions/deletes.rb +15 -0
  104. data/lib/voom/presenters/dsl/components/actions/dialog.rb +15 -0
  105. data/lib/voom/presenters/dsl/components/actions/loads.rb +31 -0
  106. data/lib/voom/presenters/dsl/components/actions/navigates.rb +15 -0
  107. data/lib/voom/presenters/dsl/components/actions/post_message.rb +17 -0
  108. data/lib/voom/presenters/dsl/components/actions/posts.rb +20 -0
  109. data/lib/voom/presenters/dsl/components/actions/prompt_if_dirty.rb +15 -0
  110. data/lib/voom/presenters/dsl/components/actions/remove.rb +15 -0
  111. data/lib/voom/presenters/dsl/components/actions/replaces.rb +25 -0
  112. data/lib/voom/presenters/dsl/components/actions/snackbar.rb +15 -0
  113. data/lib/voom/presenters/dsl/components/actions/stepper.rb +15 -0
  114. data/lib/voom/presenters/dsl/components/actions/toggle_disabled.rb +15 -0
  115. data/lib/voom/presenters/dsl/components/actions/toggle_visibility.rb +15 -0
  116. data/lib/voom/presenters/dsl/components/actions/updates.rb +20 -0
  117. data/lib/voom/presenters/dsl/components/avatar.rb +5 -10
  118. data/lib/voom/presenters/dsl/components/badge.rb +0 -2
  119. data/lib/voom/presenters/dsl/components/base.rb +37 -21
  120. data/lib/voom/presenters/dsl/components/button.rb +23 -17
  121. data/lib/voom/presenters/dsl/components/card.rb +54 -42
  122. data/lib/voom/presenters/dsl/components/checkbox.rb +2 -2
  123. data/lib/voom/presenters/dsl/components/chip.rb +10 -13
  124. data/lib/voom/presenters/dsl/components/chipset.rb +33 -0
  125. data/lib/voom/presenters/dsl/components/content.rb +33 -13
  126. data/lib/voom/presenters/dsl/components/date_field.rb +1 -1
  127. data/lib/voom/presenters/dsl/components/datetime_base.rb +0 -3
  128. data/lib/voom/presenters/dsl/components/datetime_field.rb +0 -2
  129. data/lib/voom/presenters/dsl/components/dialog.rb +41 -13
  130. data/lib/voom/presenters/dsl/components/drawer.rb +13 -8
  131. data/lib/voom/presenters/dsl/components/event.rb +117 -59
  132. data/lib/voom/presenters/dsl/components/event_base.rb +1 -3
  133. data/lib/voom/presenters/dsl/components/expansion_panel.rb +3 -6
  134. data/lib/voom/presenters/dsl/components/file_input.rb +34 -0
  135. data/lib/voom/presenters/dsl/components/footer.rb +2 -2
  136. data/lib/voom/presenters/dsl/components/form.rb +3 -16
  137. data/lib/voom/presenters/dsl/components/grid.rb +64 -22
  138. data/lib/voom/presenters/dsl/components/header.rb +19 -6
  139. data/lib/voom/presenters/dsl/components/hidden_field.rb +1 -3
  140. data/lib/voom/presenters/dsl/components/icon.rb +3 -6
  141. data/lib/voom/presenters/dsl/components/icon_base.rb +6 -8
  142. data/lib/voom/presenters/dsl/components/icon_toggle.rb +3 -5
  143. data/lib/voom/presenters/dsl/components/image.rb +61 -13
  144. data/lib/voom/presenters/dsl/components/image_list.rb +43 -0
  145. data/lib/voom/presenters/dsl/components/input.rb +14 -5
  146. data/lib/voom/presenters/dsl/components/link.rb +33 -0
  147. data/lib/voom/presenters/dsl/components/list.rb +11 -16
  148. data/lib/voom/presenters/dsl/components/lists/action.rb +11 -14
  149. data/lib/voom/presenters/dsl/components/lists/actions.rb +60 -0
  150. data/lib/voom/presenters/dsl/components/lists/header.rb +2 -2
  151. data/lib/voom/presenters/dsl/components/lists/line.rb +40 -29
  152. data/lib/voom/presenters/dsl/components/lists/separator.rb +2 -2
  153. data/lib/voom/presenters/dsl/components/menu.rb +56 -16
  154. data/lib/voom/presenters/dsl/components/mixins/append.rb +2 -2
  155. data/lib/voom/presenters/dsl/components/mixins/attaches.rb +7 -3
  156. data/lib/voom/presenters/dsl/components/mixins/avatar.rb +1 -4
  157. data/lib/voom/presenters/dsl/components/mixins/buttons.rb +1 -1
  158. data/lib/voom/presenters/dsl/components/mixins/chips.rb +0 -3
  159. data/lib/voom/presenters/dsl/components/mixins/chipset.rb +19 -0
  160. data/lib/voom/presenters/dsl/components/mixins/common.rb +21 -16
  161. data/lib/voom/presenters/dsl/components/mixins/content.rb +1 -1
  162. data/lib/voom/presenters/dsl/components/mixins/date_time_fields.rb +0 -3
  163. data/lib/voom/presenters/dsl/components/mixins/dialogs.rb +0 -3
  164. data/lib/voom/presenters/dsl/components/mixins/event.rb +2 -4
  165. data/lib/voom/presenters/dsl/components/mixins/expansion_panels.rb +1 -1
  166. data/lib/voom/presenters/dsl/components/mixins/file_inputs.rb +16 -0
  167. data/lib/voom/presenters/dsl/components/mixins/google_maps.rb +15 -0
  168. data/lib/voom/presenters/dsl/components/mixins/grids.rb +1 -1
  169. data/lib/voom/presenters/dsl/components/mixins/icons.rb +0 -1
  170. data/lib/voom/presenters/dsl/components/mixins/image_lists.rb +15 -0
  171. data/lib/voom/presenters/dsl/components/mixins/last_response.rb +48 -0
  172. data/lib/voom/presenters/dsl/components/mixins/menus.rb +1 -1
  173. data/lib/voom/presenters/dsl/components/mixins/padding.rb +42 -0
  174. data/lib/voom/presenters/dsl/components/mixins/progress.rb +16 -0
  175. data/lib/voom/presenters/dsl/components/mixins/selects.rb +0 -1
  176. data/lib/voom/presenters/dsl/components/mixins/sliders.rb +15 -0
  177. data/lib/voom/presenters/dsl/components/mixins/snackbars.rb +0 -1
  178. data/lib/voom/presenters/dsl/components/mixins/steppers.rb +15 -0
  179. data/lib/voom/presenters/dsl/components/mixins/tab_bars.rb +17 -0
  180. data/lib/voom/presenters/dsl/components/mixins/tables.rb +15 -0
  181. data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +10 -3
  182. data/lib/voom/presenters/dsl/components/mixins/toggles.rb +0 -5
  183. data/lib/voom/presenters/dsl/components/mixins/tooltips.rb +0 -1
  184. data/lib/voom/presenters/dsl/components/mixins/typography.rb +91 -14
  185. data/lib/voom/presenters/dsl/components/mixins/yield_to.rb +2 -2
  186. data/lib/voom/presenters/dsl/components/number_field.rb +20 -0
  187. data/lib/voom/presenters/dsl/components/page.rb +0 -1
  188. data/lib/voom/presenters/dsl/components/page_title.rb +31 -0
  189. data/lib/voom/presenters/dsl/components/progress.rb +27 -0
  190. data/lib/voom/presenters/dsl/components/radio_button.rb +0 -1
  191. data/lib/voom/presenters/dsl/components/rich_text_area.rb +20 -0
  192. data/lib/voom/presenters/dsl/components/select.rb +23 -12
  193. data/lib/voom/presenters/dsl/components/separator.rb +21 -0
  194. data/lib/voom/presenters/dsl/components/slider.rb +38 -0
  195. data/lib/voom/presenters/dsl/components/snackbar.rb +2 -2
  196. data/lib/voom/presenters/dsl/components/stepper.rb +96 -0
  197. data/lib/voom/presenters/dsl/components/switch.rb +0 -2
  198. data/lib/voom/presenters/dsl/components/tab_bar.rb +50 -0
  199. data/lib/voom/presenters/dsl/components/table.rb +126 -35
  200. data/lib/voom/presenters/dsl/components/text_area.rb +4 -5
  201. data/lib/voom/presenters/dsl/components/text_field.rb +55 -16
  202. data/lib/voom/presenters/dsl/components/time_field.rb +0 -2
  203. data/lib/voom/presenters/dsl/components/toggle_base.rb +8 -6
  204. data/lib/voom/presenters/dsl/components/tooltip.rb +1 -2
  205. data/lib/voom/presenters/dsl/components/typography.rb +6 -7
  206. data/lib/voom/presenters/dsl/components/unordered_list.rb +50 -0
  207. data/lib/voom/presenters/dsl/definer.rb +0 -4
  208. data/lib/voom/presenters/dsl/definition.rb +9 -6
  209. data/lib/voom/presenters/dsl/lockable.rb +1 -5
  210. data/lib/voom/presenters/dsl/protect_from_forgery.rb +43 -0
  211. data/lib/voom/presenters/dsl/user_interface.rb +50 -33
  212. data/lib/voom/presenters/errors.rb +1 -0
  213. data/lib/voom/presenters/errors/invalid_dsl.rb +8 -0
  214. data/lib/voom/presenters/errors/parameter_validation.rb +1 -3
  215. data/lib/voom/presenters/generators/inflectors.rb +59 -0
  216. data/lib/voom/presenters/generators/plugin.rb +115 -0
  217. data/lib/voom/presenters/generators/templates/plugin/.gitignore +12 -0
  218. data/lib/voom/presenters/generators/templates/plugin/Gemfile +6 -0
  219. data/lib/voom/presenters/generators/templates/plugin/LICENSE.txt.tt +21 -0
  220. data/lib/voom/presenters/generators/templates/plugin/README.md +253 -0
  221. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/actions/action.rb.tt +16 -0
  222. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/actions/dsl.rb.tt +22 -0
  223. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/component.rb.tt +18 -0
  224. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/components/dsl.rb.tt +19 -0
  225. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/helpers/helper.rb.tt +15 -0
  226. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/plugin.rb.tt +9 -0
  227. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/web_client/components/actions/data.rb.tt +17 -0
  228. data/lib/voom/presenters/generators/templates/plugin/lib/voom/presenters/plugins/web_client/components/render.rb.tt +23 -0
  229. data/lib/voom/presenters/generators/templates/plugin/presenter_plugin.gemspec.tt +21 -0
  230. data/lib/voom/presenters/generators/templates/plugin/views/assets/css/components/component.css.tt +21 -0
  231. data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/actions/action.js.tt +15 -0
  232. data/lib/voom/presenters/generators/templates/plugin/views/assets/js/components/component.js.tt +39 -0
  233. data/lib/voom/presenters/generators/templates/plugin/views/components/component.erb.tt +14 -0
  234. data/lib/voom/presenters/generators/templates/plugin/views/components/component_header.erb.tt +20 -0
  235. data/lib/voom/presenters/helpers.rb +2 -8
  236. data/lib/voom/presenters/helpers/date.rb +3 -3
  237. data/lib/voom/presenters/helpers/inflector.rb +1 -1
  238. data/lib/voom/presenters/helpers/rails.rb +18 -6
  239. data/lib/voom/presenters/helpers/rails/model_table.rb +14 -6
  240. data/lib/voom/presenters/helpers/redact.rb +13 -0
  241. data/lib/voom/presenters/helpers/route.rb +15 -2
  242. data/lib/voom/presenters/helpers/time.rb +1 -1
  243. data/lib/voom/presenters/namespace.rb +12 -0
  244. data/lib/voom/presenters/pluggable.rb +37 -0
  245. data/lib/voom/presenters/plugins.rb +7 -0
  246. data/lib/voom/presenters/plugins/google_maps.rb +24 -0
  247. data/lib/voom/presenters/plugins/google_maps/google_map.erb +10 -0
  248. data/lib/voom/presenters/plugins/google_maps/google_map.rb +41 -0
  249. data/lib/voom/presenters/{dsl.rb → registry.rb} +14 -10
  250. data/lib/voom/presenters/router.rb +59 -0
  251. data/lib/voom/presenters/settings.rb +70 -39
  252. data/lib/voom/presenters/version.rb +1 -1
  253. data/lib/voom/presenters/web_client/app.rb +125 -38
  254. data/lib/voom/presenters/web_client/component_decorator_factory.rb +27 -0
  255. data/lib/voom/presenters/web_client/component_html_decorator.rb +50 -0
  256. data/lib/voom/presenters/web_client/component_renderer.rb +49 -0
  257. data/lib/voom/presenters/web_client/custom_css.rb +65 -0
  258. data/lib/voom/presenters/web_client/custom_render.rb +31 -0
  259. data/lib/voom/presenters/web_client/helpers/expand_hash.rb +19 -0
  260. data/lib/voom/presenters/web_client/helpers/form_helpers.rb +14 -0
  261. data/lib/voom/presenters/web_client/helpers/padding_helpers.rb +21 -0
  262. data/lib/voom/presenters/web_client/plugin_headers.rb +37 -0
  263. data/lib/voom/presenters/web_client/router.rb +3 -89
  264. data/lib/voom/railtie.rb +37 -0
  265. data/lib/voom/serializer.rb +2 -2
  266. data/lib/voom/symbol/to_str.rb +3 -3
  267. data/lib/voom/trace.rb +0 -2
  268. data/presenters.gemspec +12 -5
  269. data/public/bundle.css +18221 -0
  270. data/public/bundle.js +59949 -0
  271. data/public/img/demo/avatar.jpg +0 -0
  272. data/public/presenters/custom_css.css +26 -0
  273. data/public/wc.js +52704 -0
  274. data/scripts/build.sh +10 -0
  275. data/views/mdc/.babelrc +8 -0
  276. data/views/mdc/.eslintrc.yml +24 -0
  277. data/views/mdc/.nvmrc +1 -0
  278. data/views/mdc/assets/js/app.js +30 -6
  279. data/views/mdc/assets/js/components/base-component.js +160 -2
  280. data/views/mdc/assets/js/components/base-container.js +87 -0
  281. data/views/mdc/assets/js/components/base-toggle.js +56 -0
  282. data/views/mdc/assets/js/components/button.js +71 -9
  283. data/views/mdc/assets/js/components/cards.js +13 -2
  284. data/views/mdc/assets/js/components/checkboxes.js +11 -11
  285. data/views/mdc/assets/js/components/chips.js +104 -7
  286. data/views/mdc/assets/js/components/content.js +14 -0
  287. data/views/mdc/assets/js/components/data-tables.js +15 -0
  288. data/views/mdc/assets/js/components/datetime.js +83 -20
  289. data/views/mdc/assets/js/components/dialogs.js +130 -27
  290. data/views/mdc/assets/js/components/drag_n_drop.js +182 -0
  291. data/views/mdc/assets/js/components/drawer.js +43 -0
  292. data/views/mdc/assets/js/components/events.js +195 -68
  293. data/views/mdc/assets/js/components/events/action_parameter.js +62 -0
  294. data/views/mdc/assets/js/components/events/action_parameter.test.js +62 -0
  295. data/views/mdc/assets/js/components/events/autocomplete.js +15 -17
  296. data/views/mdc/assets/js/components/events/base.js +142 -16
  297. data/views/mdc/assets/js/components/events/clears.js +15 -12
  298. data/views/mdc/assets/js/components/events/close_dialog.js +50 -0
  299. data/views/mdc/assets/js/components/events/dialog.js +32 -14
  300. data/views/mdc/assets/js/components/events/encode.js +8 -0
  301. data/views/mdc/assets/js/components/events/errors.js +175 -92
  302. data/views/mdc/assets/js/components/events/loads.js +50 -10
  303. data/views/mdc/assets/js/components/events/navigates.js +17 -15
  304. data/views/mdc/assets/js/components/events/plugin.js +18 -0
  305. data/views/mdc/assets/js/components/events/post_message.js +21 -0
  306. data/views/mdc/assets/js/components/events/posts.js +169 -47
  307. data/views/mdc/assets/js/components/events/prompt_if_dirty.js +67 -0
  308. data/views/mdc/assets/js/components/events/removes.js +21 -0
  309. data/views/mdc/assets/js/components/events/replaces.js +110 -57
  310. data/views/mdc/assets/js/components/events/snackbar.js +10 -10
  311. data/views/mdc/assets/js/components/events/stepper.js +21 -0
  312. data/views/mdc/assets/js/components/events/toggle_disabled.js +41 -0
  313. data/views/mdc/assets/js/components/events/toggle_visibility.js +62 -16
  314. data/views/mdc/assets/js/components/file-inputs.js +76 -0
  315. data/views/mdc/assets/js/components/form-fields.js +16 -0
  316. data/views/mdc/assets/js/components/forms.js +9 -60
  317. data/views/mdc/assets/js/components/get_event_target.js +15 -0
  318. data/views/mdc/assets/js/components/grid.js +21 -0
  319. data/views/mdc/assets/js/components/header.js +20 -0
  320. data/views/mdc/assets/js/components/hidden-fields.js +44 -0
  321. data/views/mdc/assets/js/components/icon-toggles.js +10 -17
  322. data/views/mdc/assets/js/components/images.js +19 -0
  323. data/views/mdc/assets/js/components/initialize.js +62 -18
  324. data/views/mdc/assets/js/components/lists.js +10 -5
  325. data/views/mdc/assets/js/components/menus.js +66 -20
  326. data/views/mdc/assets/js/components/mixins/dirtyable.js +22 -0
  327. data/views/mdc/assets/js/components/mixins/event-handler.js +7 -7
  328. data/views/mdc/assets/js/components/mixins/visibility-observer.js +35 -0
  329. data/views/mdc/assets/js/components/plugins.js +86 -0
  330. data/views/mdc/assets/js/components/progress.js +31 -0
  331. data/views/mdc/assets/js/components/radios.js +14 -0
  332. data/views/mdc/assets/js/components/rich-text-area.js +227 -0
  333. data/views/mdc/assets/js/components/rich-text-area/horizontal-rule-blot.js +23 -0
  334. data/views/mdc/assets/js/components/root_document.js +5 -0
  335. data/views/mdc/assets/js/components/selects.js +41 -30
  336. data/views/mdc/assets/js/components/sliders.js +67 -0
  337. data/views/mdc/assets/js/components/snackbar.js +17 -23
  338. data/views/mdc/assets/js/components/steppers.js +48 -0
  339. data/views/mdc/assets/js/components/switches.js +10 -32
  340. data/views/mdc/assets/js/components/tab-bars.js +28 -0
  341. data/views/mdc/assets/js/components/text-fields.js +117 -43
  342. data/views/mdc/assets/js/components/tooltip.js +17 -0
  343. data/views/mdc/assets/js/components/typography.js +28 -0
  344. data/views/mdc/assets/js/components/uninitialize.js +7 -0
  345. data/views/mdc/assets/js/config.js +27 -0
  346. data/views/mdc/assets/js/mdl-stepper.js +1108 -0
  347. data/views/mdc/assets/js/utils/compatibility.js +9 -0
  348. data/views/mdc/assets/js/utils/config.js +73 -0
  349. data/views/mdc/assets/js/utils/config.test.js +59 -0
  350. data/views/mdc/assets/js/utils/urls.js +5 -2
  351. data/views/mdc/assets/js/wc.js +111 -0
  352. data/views/mdc/assets/scss/app.scss +20 -5
  353. data/views/mdc/assets/scss/components/avatar.scss +51 -7
  354. data/views/mdc/assets/scss/components/button.scss +20 -7
  355. data/views/mdc/assets/scss/components/card.scss +13 -7
  356. data/views/mdc/assets/scss/components/checkbox.scss +0 -4
  357. data/views/mdc/assets/scss/components/chip.scss +4 -0
  358. data/views/mdc/assets/scss/components/content.scss +36 -0
  359. data/views/mdc/assets/scss/components/data-table.scss +91 -0
  360. data/views/mdc/assets/scss/components/datetime.scss +7 -2
  361. data/views/mdc/assets/scss/components/dialog.scss +7 -2
  362. data/views/mdc/assets/scss/components/drag_n_drop.scss +17 -0
  363. data/views/mdc/assets/scss/components/drawer.scss +82 -0
  364. data/views/mdc/assets/scss/components/expansion-panel.scss +2 -2
  365. data/views/mdc/assets/scss/components/fab.scss +23 -4
  366. data/views/mdc/assets/scss/components/file-input.scss +18 -0
  367. data/views/mdc/assets/scss/components/grid.scss +74 -3
  368. data/views/mdc/assets/scss/components/header.scss +21 -0
  369. data/views/mdc/assets/scss/components/icon-button-toggles.scss +2 -0
  370. data/views/mdc/assets/scss/components/icon.scss +23 -0
  371. data/views/mdc/assets/scss/components/image-list.scss +18 -0
  372. data/views/mdc/assets/scss/components/image.scss +14 -16
  373. data/views/mdc/assets/scss/components/list.scss +23 -0
  374. data/views/mdc/assets/scss/components/menu.scss +14 -3
  375. data/views/mdc/assets/scss/components/progress.scss +1 -0
  376. data/views/mdc/assets/scss/components/radio.scss +4 -0
  377. data/views/mdc/assets/scss/components/rich-text-area.scss +73 -0
  378. data/views/mdc/assets/scss/components/select.scss +10 -3
  379. data/views/mdc/assets/scss/components/separator.scss +3 -0
  380. data/views/mdc/assets/scss/components/slider.scss +1 -0
  381. data/views/mdc/assets/scss/components/snackbar.scss +2 -2
  382. data/views/mdc/assets/scss/components/stepper.scss +235 -0
  383. data/views/mdc/assets/scss/components/switch.scss +13 -4
  384. data/views/mdc/assets/scss/components/tab-bars.scss +4 -0
  385. data/views/mdc/assets/scss/components/textfield.scss +14 -3
  386. data/views/mdc/assets/scss/components/tooltip.scss +3 -0
  387. data/views/mdc/assets/scss/components/typography.scss +10 -0
  388. data/views/mdc/assets/scss/components/unordered-lists.scss +17 -0
  389. data/views/mdc/assets/scss/components/vendor/quill.snow.css +945 -0
  390. data/views/mdc/assets/scss/material.blue_grey-orange.min.css +1 -1
  391. data/views/mdc/assets/scss/media.scss +39 -0
  392. data/views/mdc/assets/scss/palette.scss +16 -0
  393. data/views/mdc/assets/scss/styles.scss +43 -0
  394. data/views/mdc/assets/scss/theme.scss +25 -2
  395. data/views/mdc/body/dismissable-drawer.erb +34 -0
  396. data/views/mdc/body/drawer/divider.erb +1 -0
  397. data/views/mdc/body/drawer/item.erb +13 -0
  398. data/views/mdc/body/drawer/label.erb +1 -0
  399. data/views/mdc/body/drawers/menu.erb +1 -1
  400. data/views/mdc/body/footers/menu_item.erb +2 -2
  401. data/views/mdc/body/header.erb +38 -30
  402. data/views/mdc/body/modal-drawer.erb +35 -0
  403. data/views/mdc/body/snackbar.erb +12 -6
  404. data/views/mdc/components/actions/autocomplete.rb +8 -0
  405. data/views/mdc/components/actions/clear.rb +11 -0
  406. data/views/mdc/components/actions/close_dialog.rb +10 -0
  407. data/views/mdc/components/actions/delete.rb +11 -0
  408. data/views/mdc/components/actions/dialog.rb +11 -0
  409. data/views/mdc/components/actions/loads.rb +17 -0
  410. data/views/mdc/components/actions/navigates.rb +11 -0
  411. data/views/mdc/components/actions/post.rb +14 -0
  412. data/views/mdc/components/actions/post_message.rb +10 -0
  413. data/views/mdc/components/actions/prompt_if_dirty.rb +17 -0
  414. data/views/mdc/components/actions/remove.rb +10 -0
  415. data/views/mdc/components/actions/replaces.rb +16 -0
  416. data/views/mdc/components/actions/resolver.rb +39 -0
  417. data/views/mdc/components/actions/snackbar.rb +12 -0
  418. data/views/mdc/components/actions/stepper.rb +10 -0
  419. data/views/mdc/components/actions/toggle_disabled.rb +10 -0
  420. data/views/mdc/components/actions/toggle_visibility.rb +10 -0
  421. data/views/mdc/components/actions/update.rb +10 -0
  422. data/views/mdc/components/avatar.erb +12 -7
  423. data/views/mdc/components/badge.erb +1 -1
  424. data/views/mdc/components/button.erb +10 -8
  425. data/views/mdc/components/buttons/button.erb +19 -14
  426. data/views/mdc/components/buttons/fab.erb +9 -2
  427. data/views/mdc/components/buttons/icon.erb +12 -5
  428. data/views/mdc/components/buttons/image.erb +11 -5
  429. data/views/mdc/components/{display.erb → caption.erb} +0 -0
  430. data/views/mdc/components/card.erb +67 -41
  431. data/views/mdc/components/checkbox.erb +32 -23
  432. data/views/mdc/components/chip.erb +39 -22
  433. data/views/mdc/components/chipset.erb +18 -0
  434. data/views/mdc/components/content.erb +37 -11
  435. data/views/mdc/components/datetime.erb +12 -17
  436. data/views/mdc/components/dialog.erb +45 -22
  437. data/views/mdc/components/drag_and_drop/drag_and_drop.rb +16 -0
  438. data/views/mdc/components/event.erb +3 -9
  439. data/views/mdc/components/expansion_panel.erb +8 -6
  440. data/views/mdc/components/file_input.erb +17 -0
  441. data/views/mdc/components/form.erb +7 -8
  442. data/views/mdc/components/grid.erb +27 -10
  443. data/views/mdc/components/headline.erb +2 -0
  444. data/views/mdc/components/hidden_field.erb +5 -1
  445. data/views/mdc/components/icon.erb +7 -5
  446. data/views/mdc/components/icon_toggle.erb +9 -8
  447. data/views/mdc/components/image.erb +23 -5
  448. data/views/mdc/components/image_list.erb +38 -0
  449. data/views/mdc/components/link.erb +3 -13
  450. data/views/mdc/components/list.erb +9 -4
  451. data/views/mdc/components/list/actions/switch.erb +1 -1
  452. data/views/mdc/components/list/avatar.erb +2 -1
  453. data/views/mdc/components/list/header.erb +5 -3
  454. data/views/mdc/components/list/hidden_field.erb +3 -0
  455. data/views/mdc/components/list/icon.erb +2 -1
  456. data/views/mdc/components/list/line.erb +24 -13
  457. data/views/mdc/components/list/menu.erb +7 -2
  458. data/views/mdc/components/list/separator.erb +1 -1
  459. data/views/mdc/components/menu.erb +20 -16
  460. data/views/mdc/components/number_field.erb +38 -0
  461. data/views/mdc/components/{subheading.erb → overline.erb} +0 -0
  462. data/views/mdc/components/page_title.erb +2 -2
  463. data/views/mdc/components/progress.erb +11 -0
  464. data/views/mdc/components/radio_button.erb +19 -10
  465. data/views/mdc/components/render.erb +2 -3
  466. data/views/mdc/components/rich_text_area.erb +22 -0
  467. data/views/mdc/components/select.erb +28 -8
  468. data/views/mdc/components/separator.erb +3 -0
  469. data/views/mdc/components/shared/hint_error_display.erb +9 -0
  470. data/views/mdc/components/shared/input_label.erb +7 -0
  471. data/views/mdc/components/slider.erb +43 -0
  472. data/views/mdc/components/snackbar.erb +2 -6
  473. data/views/mdc/components/stepper.erb +47 -0
  474. data/views/mdc/components/stepper/step.erb +33 -0
  475. data/views/mdc/components/{title.erb → subtitle.erb} +0 -0
  476. data/views/mdc/components/switch.erb +28 -12
  477. data/views/mdc/components/tab_bar.erb +35 -0
  478. data/views/mdc/components/table.erb +28 -13
  479. data/views/mdc/components/table/checkbox.erb +20 -0
  480. data/views/mdc/components/table/column.erb +18 -0
  481. data/views/mdc/components/table/footer.erb +8 -0
  482. data/views/mdc/components/table/header.erb +14 -4
  483. data/views/mdc/components/table/pagination.erb +11 -24
  484. data/views/mdc/components/table/row.erb +7 -5
  485. data/views/mdc/components/text_area.erb +15 -7
  486. data/views/mdc/components/text_field.erb +38 -28
  487. data/views/mdc/components/tooltip.erb +2 -2
  488. data/views/mdc/components/typography.erb +7 -5
  489. data/views/mdc/components/unordered_list.erb +10 -0
  490. data/views/mdc/components/unordered_list/icon.erb +3 -0
  491. data/views/mdc/components/unordered_list/list_item.erb +7 -0
  492. data/views/mdc/layout.erb +45 -31
  493. data/views/mdc/package-lock.json +11786 -6868
  494. data/views/mdc/package.json +66 -29
  495. data/views/mdc/web.erb +4 -0
  496. data/views/mdc/webpack.config.js +14 -1
  497. metadata +353 -31
  498. data/app/demo/components/forms.pom +0 -31
  499. data/lib/voom-presenters.rb +0 -9
  500. data/lib/voom/presenters-engine.rb +0 -40
  501. data/lib/voom/presenters.rb +0 -13
  502. data/lib/voom/presenters/dsl/components/action.rb +0 -35
  503. data/lib/voom/presenters/web_client/markdown_render.rb +0 -16
  504. data/public/.gitignore +0 -2
  505. data/scripts/bump.sh +0 -3
  506. data/scripts/deploy-demo.sh +0 -2
  507. data/scripts/release.sh +0 -4
  508. data/views/mdc/assets/js/dialog-polyfill.js +0 -738
  509. data/views/mdc/assets/js/material.js +0 -3996
  510. data/views/mdc/assets/scss/components/icon-toggles.scss +0 -9
  511. data/views/mdc/assets/scss/components/table-pagination.scss +0 -65
  512. data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +0 -13
  513. data/views/mdc/body/drawer.erb +0 -18
  514. data/views/mdc/components/modal.erb +0 -15
  515. data/views/mdc/components/static.erb +0 -7
@@ -0,0 +1,37 @@
1
+ require_relative 'helpers/indented_grid'
2
+
3
+ Voom::Presenters.define(:custom_css) do
4
+ helpers Demo::Helpers::IndentedGrid
5
+ attach :top_nav
6
+
7
+ page_title 'Custom CSS' do
8
+ icon :settings
9
+ end
10
+
11
+
12
+ indented_grid do
13
+ headline 'CSS', level: 1
14
+
15
+ body 'You can define custom CSS globally and for each namespace/presenter.'
16
+ blank
17
+ title 'Global CSS'
18
+ body 'Define global css in the file `public/presenters/global.css`. Styles defined here will be loaded after default styling.'
19
+
20
+ title 'Presenter CSS'
21
+ body 'Each `[namespace/]presenter` can have custom css.'
22
+ body 'Simply create a file `public/presenters/[namspace]/[presenter].css` that matches your namespace and presenter.'
23
+ body 'This page has a presenter css file that is located at: `public/presenters/custom_css.css`'
24
+
25
+ title 'Settings'
26
+ body 'You can set the default path to load css from using the following:'
27
+ body <<-HTML
28
+ ```
29
+ Voom::Presenters::Settings.configure do |config|
30
+ config.presenters.web_client.custom_css = 'public/presenters'
31
+ end
32
+ ```
33
+ HTML
34
+
35
+ end
36
+ attach :code, file: __FILE__
37
+ end
@@ -9,8 +9,8 @@ Voom::Presenters.define(:autocomplete_action) do
9
9
  title 'Work In Progress'
10
10
  body 'Provides a text field that when typed into will fetch a set of items to select base on what was typed.',
11
11
  'Useful for providing search clues as the user types.',
12
- 'The search command returned should either an array of text terms found,
13
- or optionally an id that will also be sumbitted using the same name as plus `_id` as the text field.'
12
+ 'The search command returned should either be an array of text terms found,
13
+ or optionally an id that will also be submitted using the same name as plus `_id` as the text field.'
14
14
 
15
15
 
16
16
  heading 'Search'
@@ -29,4 +29,4 @@ Voom::Presenters.define(:autocomplete_action) do
29
29
  end
30
30
 
31
31
  attach :code, file: __FILE__
32
- end
32
+ end
@@ -0,0 +1,25 @@
1
+ Voom::Presenters.define(:clear_action) do
2
+ helpers Demo::Helpers::IndentedGrid
3
+ attach :top_nav
4
+ attach :events_drawer
5
+
6
+ indented_grid do
7
+ heading 'Clear'
8
+ body 'Allows you to clear a component.',
9
+ 'Takes the id of the element to clear.'
10
+
11
+ text_field id: :input_to_clear do
12
+ label 'Input to clear'
13
+ value 'Value to clear'
14
+ end
15
+
16
+ subtitle 'Text to clear', id: :text_to_clear
17
+
18
+ button 'clear' do
19
+ event :click do
20
+ clear :input_to_clear, :text_to_clear
21
+ end
22
+ end
23
+ end
24
+ attach :code, file: __FILE__
25
+ end
@@ -0,0 +1,9 @@
1
+ Voom::Presenters.define(:discard_dialog) do
2
+ dialog id: :discard_dialog do
3
+ title 'Discard unsaved changes?'
4
+ actions do
5
+ button :discard, id: :discard_button
6
+ button :cancel, type: :raised, id: :cancel_button
7
+ end
8
+ end
9
+ end
@@ -3,7 +3,9 @@ Voom::Presenters.define(:show_dialog) do
3
3
  title "Show Dialog"
4
4
  body 'This is an example and event opening a dialog'
5
5
 
6
- button 'Disabled action', disabled: true
7
- button 'Close'
6
+ actions do
7
+ button 'Close'
8
+ button 'Disabled action', disabled: true
9
+ end
8
10
  end
9
11
  end
@@ -0,0 +1,40 @@
1
+ Voom::Presenters.define(:last_response_action) do
2
+ helpers Demo::Helpers::IndentedGrid
3
+ attach :top_nav
4
+ attach :events_drawer
5
+
6
+ indented_grid do
7
+ heading 'Last Response'
8
+ body 'You can access the last response and forward its data to a snackbar or posts|updates|deletes|replaces|loads.'
9
+ title 'Posts'
10
+ button 'quote' do
11
+ event :click do
12
+ posts '_echo_', {quote: 'Compromise is the shared hypotenuse of the conjoined triangles of success.'}
13
+ posts '_echo_', echo: {quote: last_response.quote}, headers: {'X-Custom'=>'Boom!'}
14
+ snackbar last_response.echo.quote
15
+ end
16
+ end
17
+
18
+ title 'Replaces'
19
+ button 'replaces' do
20
+ event :click do
21
+ posts '_echo_', {quote: 'Compromise is the shared hypotenuse of the conjoined triangles of success.'}
22
+ replaces :replace_me, :replace_text, text: last_response.quote
23
+ end
24
+ end
25
+ attach :replace_text
26
+
27
+ blank
28
+ title "Loads another presesnter"
29
+ text "Will reload this page passing a value from the last response of another action"
30
+ text "Quote from last response: {c:blue}#{context.fetch(:quote, nil)}{/c}" unless context.fetch(:quote, nil).nil?
31
+ button 'Reloads this page' do
32
+ event :click do
33
+ posts '_echo_', {quote: 'Compromise is the shared hypotenuse of the conjoined triangles of success.'}
34
+ loads :last_response_action, reloaded: true, quote: last_response.quote
35
+ end
36
+ end
37
+ heading context['reloaded'] ? "Reloaded" : 'Loaded'
38
+ end
39
+ attach :code, file: __FILE__
40
+ end
@@ -1,4 +1,4 @@
1
- Voom::Presenters.define(:toggle_visibility_action) do
1
+ Voom::Presenters.define(:loads_action) do
2
2
  helpers Demo::Helpers::IndentedGrid
3
3
  attach :top_nav
4
4
  attach :events_drawer
@@ -7,13 +7,23 @@ Voom::Presenters.define(:toggle_visibility_action) do
7
7
  heading 'Loads'
8
8
  body 'Loads a new presenter, replacing the whole page.'
9
9
 
10
- subheading context['reloaded'] ? "Reloaded" : 'Loads'
11
- button 'loads' do
12
- event :click do
13
- loads :events, reloaded: true
10
+ content do
11
+ subheading "#{context['reloaded'] ? "Reloaded" : 'Loads'} another presenter"
12
+ button 'loads this page' do
13
+ event :click do
14
+ loads :loads_action, reloaded: true, nil_value:nil
15
+ end
16
+ end
17
+ heading context['reloaded'] ? "Reloaded" : 'Loaded'
18
+ end
19
+ content do
20
+ subheading "An absolute URL loads another page"
21
+ button 'loads google.com' do
22
+ event :click do
23
+ loads 'https://google.com'
24
+ end
14
25
  end
15
26
  end
16
- heading context['reloaded'] ? "Reloaded" : 'Loaded'
17
27
  end
18
28
  attach :code, file: __FILE__
19
29
  end
@@ -14,7 +14,7 @@ Voom::Presenters.define(:posts_action) do
14
14
  content shows_errors: false do
15
15
  button 'posts' do
16
16
  event :click do
17
- posts 'postpath', {optional: :params}
17
+ posts 'postpath', {optional: :params, its_nil: nil}
18
18
  end
19
19
  end
20
20
  end
@@ -0,0 +1,54 @@
1
+ Voom::Presenters.define(:dirtyable_container) do
2
+ content id: :dirtyable_container do
3
+ grid do
4
+ column 6 do
5
+ text_field name: :a_text_field do
6
+ label 'Input'
7
+ value 'initial value'
8
+ end
9
+
10
+ button :save, type: :raised do
11
+ event :click do
12
+ snackbar 'Saved!'
13
+ replaces :dirtyable_container, :dirtyable_container
14
+ end
15
+ end
16
+ button :cancel do
17
+ event :click do
18
+ prompt_if_dirty :discard_dialog
19
+ replaces :dirtyable_container, :dirtyable_container
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ Voom::Presenters.define(:prompt_if_dirty_action) do
28
+ helpers Demo::Helpers::IndentedGrid
29
+ attach :top_nav
30
+ attach :events_drawer
31
+ attach :discard_dialog
32
+
33
+ indented_grid do
34
+ heading 'Prompt if dirty'
35
+ body 'Allows you to prompt users to discard changes in fields which have unsaved changes.'
36
+ blank
37
+ body <<~MARKDOWN
38
+ Takes the ID of a dialog to display when one or more fields in the
39
+ closest container has changed.\n
40
+ Optionally takes an `input_tag` which has priority over the closest
41
+ container and can be used if no closest container is present.
42
+ MARKDOWN
43
+ blank
44
+ body <<~MARKDOWN
45
+ If the user dismisses the dialog (via the scrim or cancel button), the
46
+ actions following `prompt_if_dirty` are not executed.
47
+ MARKDOWN
48
+
49
+ blank
50
+ attach :dirtyable_container
51
+ end
52
+
53
+ attach :code, file: __FILE__
54
+ end
@@ -7,9 +7,10 @@ Voom::Presenters.define(:toggle_visibility_action) do
7
7
  heading 'Toggle Visibility'
8
8
  body 'Allows you to toggle visibility of content on and off on events.',
9
9
  'Takes the id of the element to toggle.',
10
- "Optionally takes :on or :off to force visibility."
11
-
12
- subheading 'Toggle Visibility'
10
+ "Optionally takes :on or :off to force visibility.",
11
+ "`show :toggle_me` **is the same as** `toggle_visibility :toggle_me, on: true`",
12
+ "`hide :toggle_me` **is the same as** `toggle_visibility :toggle_me, on: false`"
13
+
13
14
  button 'toggle visibility' do
14
15
  event :click do
15
16
  toggle_visibility :toggle_me
@@ -0,0 +1,313 @@
1
+ Voom::Presenters.define(:response_content) do
2
+ helpers do
3
+ def params
4
+ return {} unless context[:id]
5
+
6
+ {tag: context[:id]}
7
+ end
8
+ end
9
+
10
+ content id: :response_content, **params do
11
+ text context[:content]
12
+ end
13
+ end
14
+
15
+ Voom::Presenters.define(:content_as_form) do
16
+ helpers Demo::Helpers::IndentedGrid
17
+
18
+ attach :top_nav
19
+ attach :events_drawer
20
+
21
+ attach :response_content
22
+
23
+ indented_grid do
24
+ card id: :form_1 do
25
+ title 'Form'
26
+ form do
27
+ text_field name: :text1 do
28
+ label 'Text 1'
29
+ end
30
+
31
+ checkbox name: :on, value: true, off_value: false, text: 'Checkbox'
32
+
33
+ blank
34
+
35
+ grid padding: :none do
36
+ column 12 do
37
+ button 'Submit, grid > column', type: :raised do
38
+ event :click do
39
+ posts '/_echo_'
40
+ replaces :response_content, :response_content,
41
+ content: last_response,
42
+ id: 1
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ content do
49
+ button 'Submit, content', type: :raised do
50
+ event :click do
51
+ posts '/_echo_'
52
+ replaces :response_content, :response_content,
53
+ content: last_response,
54
+ id: 2
55
+ end
56
+ end
57
+ end
58
+
59
+ button 'Submit', type: :raised do
60
+ event :click do
61
+ posts '/_echo_'
62
+ replaces :response_content, :response_content,
63
+ content: last_response,
64
+ id: 3
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ indented_grid do
72
+ card do
73
+ title 'Content'
74
+ content id: :content_1 do
75
+ text_field name: :text1 do
76
+ label 'Text 1'
77
+ end
78
+
79
+ checkbox name: :on, value: true, off_value: false, text: 'Checkbox'
80
+
81
+ blank
82
+
83
+ grid padding: :none do
84
+ column 12 do
85
+ button 'Submit, grid > column', type: :raised do
86
+ event :click do
87
+ posts '/_echo_'
88
+ replaces :response_content, :response_content,
89
+ content: last_response,
90
+ id: 1
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ content do
97
+ button 'Submit, content', type: :raised do
98
+ event :click do
99
+ posts '/_echo_'
100
+ replaces :response_content, :response_content,
101
+ content: last_response,
102
+ id: 2
103
+ end
104
+ end
105
+ end
106
+
107
+ button 'Submit', type: :raised do
108
+ event :click do
109
+ posts '/_echo_'
110
+ replaces :response_content, :response_content,
111
+ content: last_response,
112
+ id: 3
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ grid do
120
+ column 12 do
121
+ text_field id: :input_tag_extra, name: :whatever, tag: :test_input_tag do
122
+ value 'foo bar'
123
+ end
124
+ end
125
+ end
126
+
127
+ indented_grid do
128
+ card do
129
+ title 'Content with input_tag'
130
+ content id: :content_2, tag: :test_input_tag do
131
+ text_field name: :text1 do
132
+ label 'Text 1'
133
+ end
134
+
135
+ checkbox name: :on, value: true, off_value: false, text: 'Checkbox'
136
+
137
+ blank
138
+
139
+ grid padding: :none do
140
+ column 12 do
141
+ button 'Submit, grid > column', type: :raised do
142
+ event :click do
143
+ posts '/_echo_',
144
+ input_tag: :test_input_tag
145
+ replaces :response_content, :response_content,
146
+ content: last_response,
147
+ id: 1
148
+ end
149
+ end
150
+ end
151
+ end
152
+
153
+ content do
154
+ button 'Submit, content', type: :raised do
155
+ event :click do
156
+ posts '/_echo_',
157
+ input_tag: :test_input_tag
158
+ replaces :response_content, :response_content,
159
+ content: last_response,
160
+ id: 2
161
+ end
162
+ end
163
+ end
164
+
165
+ button 'Submit', type: :raised do
166
+ event :click do
167
+ posts '/_echo_',
168
+ input_tag: :test_input_tag
169
+ replaces :response_content, :response_content,
170
+ content: last_response,
171
+ id: 3
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
177
+
178
+ indented_grid do
179
+ content id: :content_array do
180
+ card do
181
+ title 'Array'
182
+
183
+ content do
184
+ text_field name: 'inputs[]' do
185
+ value 'Value1'
186
+ end
187
+
188
+ text_field name: 'inputs[]' do
189
+ value 'Value2'
190
+ end
191
+
192
+ text_field name: 'inputs[]' do
193
+ value 'Value3'
194
+ end
195
+
196
+ checkbox name: :on, value: true, off_value: false, text: 'Checkbox'
197
+
198
+ button :submit, type: :raised do
199
+ event :click do
200
+ posts '/_echo_'
201
+ replaces :response_content, :response_content,
202
+ content: last_response,
203
+ id: 1
204
+ end
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
210
+
211
+ # Dialog tests:
212
+ attach :dialog_a
213
+ attach :dialog_b
214
+ attach :dialog_c
215
+ attach :dialog_d
216
+
217
+ button 'dialog_a' do
218
+ event :click do
219
+ dialog :dialog_a
220
+ end
221
+ end
222
+
223
+ button 'dialog_b' do
224
+ event :click do
225
+ dialog :dialog_b
226
+ end
227
+ end
228
+
229
+ button 'dialog_c' do
230
+ event :click do
231
+ dialog :dialog_c
232
+ end
233
+ end
234
+
235
+ button 'dialog_d' do
236
+ event :click do
237
+ dialog :dialog_d
238
+ end
239
+ end
240
+ end
241
+
242
+ Voom::Presenters.define(:dialog_a) do
243
+ dialog id: :dialog_a do
244
+ form do
245
+ text_field name: :dialog_text_field do
246
+ value 'whatever'
247
+ end
248
+ end
249
+ actions do
250
+ button 'Submit', type: :raised do
251
+ event :click do
252
+ posts '/_echo_'
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
258
+
259
+ Voom::Presenters.define(:dialog_b) do
260
+ dialog id: :dialog_b do
261
+ content do
262
+ text_field name: :dialog_text_field do
263
+ value 'whatever'
264
+ end
265
+ end
266
+ actions do
267
+ button 'Submit, untagged content', type: :raised do
268
+ event :click do
269
+ posts '/_echo_'
270
+ end
271
+ end
272
+ end
273
+ end
274
+ end
275
+
276
+ Voom::Presenters.define(:dialog_c) do
277
+ dialog id: :dialog_c do
278
+ content tag: :some_dialog_tag do
279
+ text_field name: :dialog_text_field do
280
+ value 'whatever'
281
+ end
282
+ end
283
+
284
+ actions do
285
+ button 'Submit, input_tag', type: :raised do
286
+ event :click do
287
+ posts '/_echo_',
288
+ input_tag: :some_dialog_tag
289
+ end
290
+ end
291
+ end
292
+ end
293
+ end
294
+
295
+ Voom::Presenters.define(:dialog_d) do
296
+ dialog id: :dialog_d do
297
+ grid do
298
+ column 12 do
299
+ text_field name: :dialog_text_field do
300
+ value 'whatever'
301
+ end
302
+ end
303
+ end
304
+
305
+ actions do
306
+ button 'Submit, no viable container', type: :raised do
307
+ event :click do
308
+ posts '/_echo_'
309
+ end
310
+ end
311
+ end
312
+ end
313
+ end