voom-presenters 0.1.11 → 2.0.1

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 +42 -0
  8. data/.gitignore +4 -2
  9. data/.releaserc +15 -0
  10. data/.ruby-version +2 -1
  11. data/CHANGELOG.md +143 -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/component-status.yml +26 -26
  85. data/config.ru +21 -10
  86. data/docs/settings.md +81 -0
  87. data/exe/presenters +3 -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 +355 -32
  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
@@ -1,15 +1,19 @@
1
1
  Voom::Presenters.define(:events_drawer) do
2
2
  helpers Voom::Presenters::Helpers::Inflector
3
+
4
+ events = %i[field_level_events form_level_events tagged_input parallel_events].sort
5
+ actions = %i[dialog replaces loads toggle_visibility snackbar updates deletes posts clear last_response prompt_if_dirty].sort
6
+
3
7
  drawer 'Events' do
4
8
  menu do
5
- %i(field_level_events form_level_events).sort.each do |comp|
9
+ events.each do |comp|
6
10
  item titleize(comp) do
7
11
  event :click do
8
12
  loads comp
9
13
  end
10
14
  end
11
15
  end
12
- %i(dialog autocomplete replaces toggle_visibility snackbar updates deletes posts).sort.each do |comp|
16
+ actions.each do |comp|
13
17
  item titleize(comp) do
14
18
  event :click do
15
19
  loads "#{comp}_action"
@@ -18,4 +22,4 @@ Voom::Presenters.define(:events_drawer) do
18
22
  end
19
23
  end
20
24
  end
21
- end
25
+ end
@@ -0,0 +1,44 @@
1
+ Voom::Presenters.define(:parallel_content) do
2
+ content id: context['id'] do
3
+ heading6 Time.now
4
+ end
5
+ end
6
+
7
+ Voom::Presenters.define(:parallel_events) do
8
+ helpers Demo::Helpers::IndentedGrid
9
+ attach :top_nav
10
+ attach :events_drawer
11
+
12
+ indented_grid do
13
+ display 'Parallel Events'
14
+ body 'This demonstrates multiple event handlers for the same event, running in parallel.
15
+ It also shows the onload event running in parallel.'
16
+
17
+ event :onload do
18
+ replaces :first, :parallel_content, id: :first
19
+ end
20
+ event :onload do
21
+ replaces :second, :parallel_content, id: :second
22
+ end
23
+
24
+ button :load_in_parallel do
25
+ event :click do
26
+ replaces :third, :parallel_content, id: :third
27
+ end
28
+ event :click do
29
+ replaces :forth, :parallel_content, id: :forth
30
+ end
31
+
32
+ event :click do
33
+ replaces :fifth, :parallel_content, id: :fifth
34
+ end
35
+ end
36
+
37
+ content id: :first
38
+ content id: :second
39
+ content id: :third
40
+ content id: :forth
41
+ content id: :fifth
42
+ end
43
+ attach :code, file: __FILE__
44
+ end
@@ -0,0 +1,37 @@
1
+ Voom::Presenters.define(:tagged_input) do
2
+ helpers Demo::Helpers::IndentedGrid
3
+
4
+ attach :top_nav
5
+ attach :events_drawer
6
+
7
+ indented_grid do
8
+ display 'Tagged Input'
9
+ body %(This demonstrates the ability to tag containers or components and then to post those values in an event action.
10
+ Sometimes you need to pull values from different nesting levels on a page to post.
11
+ Tags let you collect all tagged inputs from anywhere on the page and post them to some server side action.
12
+ An example of this can be found in the [search select](/search_select) pattern demo.)
13
+
14
+ blank
15
+ body 'Tags can be applied to containers and/or components.
16
+ Containers include content blocks, grids, forms, steppers, dialogs and cards.
17
+ All input components accept tags.'
18
+
19
+ title 'Example'
20
+
21
+ content tag: :somefields do
22
+ radio_button text: :on, name: :check_me, value: :on, checked: true
23
+ radio_button text: :off, name: :check_me, value: :off
24
+ end
25
+ text_field name: :myfield2, tag: :somefields do
26
+ label 'More Data to post'
27
+ end
28
+
29
+ button 'Press me' do
30
+ event :click do
31
+ replaces :context_list, :context_list, input_tag: :somefields
32
+ end
33
+ end
34
+ attach :context_list
35
+ attach :code, file: __FILE__
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ Voom::Presenters.define(:hello_world) do
2
+ headline 'Hello World'
3
+ end
@@ -62,5 +62,6 @@ Voom::Presenters.define(:markdown) do
62
62
  ## changelog
63
63
  * 17-Feb-2013 re-design
64
64
  HEREDOC
65
+ attach :code, file: __FILE__
65
66
  end
66
67
  end
@@ -0,0 +1,89 @@
1
+ require_relative 'helpers/indented_grid'
2
+
3
+ Voom::Presenters.define(:namespaces) do
4
+ helpers Demo::Helpers::IndentedGrid
5
+ attach :top_nav
6
+ page_title 'Namespaces' do
7
+ icon 'far fa-object-group'
8
+ end
9
+
10
+ indented_grid do
11
+ body 'Presenters support namespaces. The namespace is an optional parameter to the define method:'
12
+ blank
13
+ body "`Voom::Presenters.define(:mypresenter, namespace: :namespace1)` or"
14
+ attach 'namespace2:alternate_namespacing'
15
+
16
+ body %(When defined in a namespace all other presenters in the same namespace are accessable without scoping the namespace.
17
+ When accessing a presenter outside your current namespace, simple provide the namespace(s) with `:` as the separator.
18
+ attach, loads and replaces all accept namespaced presenters:)
19
+ blank
20
+ attach 'namespace1:attach_with_namespace'
21
+ blank
22
+ body 'Both loads and replaces are namespace aware. To call a presenter in the ame namespace, no scoping is needed.
23
+ To call a presenter in another namespace, you need to fully qualify it.'
24
+ button 'Load' do
25
+ event :click do
26
+ loads 'namespace1:attach_with_namespace', replaced: 'I was loaded'
27
+ end
28
+ end
29
+ button 'Replace' do
30
+ event :click do
31
+ replaces :attach_with_namespace_id, 'namespace1:attach_with_namespace', replaced: 'I was replaced'
32
+ end
33
+ end
34
+ blank
35
+ attach 'namespace1:namespace2:nested_namespaces'
36
+ button 'Load' do
37
+ event :click do
38
+ loads 'namespace1:namespace2:nested_namespaces', replaced: 'I was loaded'
39
+ end
40
+ end
41
+ button 'Replace' do
42
+ event :click do
43
+ replaces :nested_namespaces_id, 'namespace1:namespace2:nested_namespaces', replaced: 'I was replaced'
44
+ end
45
+ end
46
+ blank
47
+ body %(Routes add the namespace(s) as a prefix: /namespace1/mypresenter)
48
+ blank
49
+ overline 'Notes:'
50
+ attach 'namespace1:namespace2:notes'
51
+ end
52
+ attach :code, file: __FILE__
53
+ end
54
+
55
+ Voom::Presenters.define(:attach_with_namespace, namespace: :namespace1) do
56
+ content id: :attach_with_namespace_id do
57
+ body "For example: `attach 'namespace1:mypresenter'` to insert/attach a presenter in a different namespace."
58
+ attach :replaced # Demonstrates calling top level presenters from a namespaced presenter
59
+ end
60
+ end
61
+
62
+ Voom::Presenters.define(:nested_namespaces, namespace: [:namespace1, :namespace2]) do
63
+ content id: :nested_namespaces_id do
64
+ body %(Namespaces can be nested two levels deep by passing an array of namespaces:
65
+ `Voom::Presenters.define(:mypresenter, namespace: [:foo,:bar])`)
66
+ attach :replaced # Demonstrates calling top level presenters from a namespaced presenter
67
+ end
68
+ end
69
+
70
+ Voom::Presenters.define(:replaced) do
71
+ body "#{context[:replaced]}"
72
+ end
73
+
74
+ Voom::Presenters.define('namespace2:alternate_namespacing') do
75
+ body "`Voom::Presenters.define('namespace1:mypresenter')`"
76
+ attach :blank_line # demonstrates attaching a presenter in the same namespace mixing alternate naming
77
+ end
78
+
79
+ Voom::Presenters.define(:blank_line, namespace: :namespace2) do
80
+ blank
81
+ end
82
+
83
+ Voom::Presenters.define('namespace2:notes', namespace: :namespace1) do
84
+ body <<~HEREDOC
85
+ * You can mix the two syntax's. `Voom::Presenters.define('namespace2:mypresenter', namespace: 'namespace1')`
86
+ * With this syntax attach/loads and replaces will operate in namespace1, unless fully qualified
87
+ * Unlike ruby modules you are either inside a namespace and can call presenters without qualification, or you are not and you must fully qualify them.
88
+ HEREDOC
89
+ end
@@ -29,6 +29,30 @@ Voom::Presenters.define('top_nav') do
29
29
  end
30
30
  end
31
31
 
32
+ item 'Patterns' do
33
+ event :click do
34
+ loads :patterns
35
+ end
36
+ end
37
+
38
+ item 'Namespaces' do
39
+ event :click do
40
+ loads :namespaces
41
+ end
42
+ end
43
+
44
+ item 'Custom CSS' do
45
+ event :click do
46
+ loads :custom_css
47
+ end
48
+ end
49
+
50
+ item 'Plugins' do
51
+ event :click do
52
+ loads :plugins
53
+ end
54
+ end
55
+
32
56
  item 'Status' do
33
57
  event :click do
34
58
  loads :component_status
@@ -0,0 +1,19 @@
1
+ require_relative 'helpers/indented_grid'
2
+
3
+ Voom::Presenters.define('patterns') do
4
+ helpers Demo::Helpers::IndentedGrid
5
+ attach 'top_nav'
6
+ attach 'pattern_drawer'
7
+ page_title 'Patterns'
8
+
9
+ indented_grid do
10
+ grid do
11
+ column 12 do
12
+ icon 'fa-hand-point-left', position: :left
13
+ subheading 'Select a pattern'
14
+ end
15
+ end
16
+ end
17
+ attach :code, file: __FILE__
18
+
19
+ end
@@ -0,0 +1,89 @@
1
+ require_relative '../helpers/indented_grid'
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'ostruct'
5
+
6
+ Voom::Presenters.define(:drag_drop) do
7
+ helpers Demo::Helpers::IndentedGrid
8
+
9
+ attach :top_nav
10
+ attach :pattern_drawer
11
+ page_title 'Drag and Drop Example'
12
+
13
+ helpers do
14
+ def dragons
15
+ session = context[:session]
16
+ return [] if session.nil?
17
+ session[:dragons] ||=
18
+ [{id: 1, sort: 4, name: 'Jabberwocky', body: 'Alice in Wonderland, Alice Through the Looking Glass'},
19
+ {id: 2, sort: 3, name: 'Hydra', body: 'Hercules, Jason and the Argonauts'},
20
+ {id: 3, sort: 2, name: 'Drogon, Viserion, Rhaegal', body: 'Game of Thrones'},
21
+ {id: 4, sort: 1, name: 'Spike', body: 'My Little Pony: The Movie'}].to_json
22
+ JSON.parse(session[:dragons], object_class: OpenStruct)
23
+ end
24
+ end
25
+
26
+ indented_grid do
27
+ grid do
28
+ column 7 do
29
+ headline 'Select a Dragon'
30
+ subtitle 'Drag and Drop to reorder the dragons, or drop on card to right to learn more about your Dragon'
31
+ list do
32
+ dragons.sort_by(&:sort).each do |dragon|
33
+ line draggable: {zone: :drag_zone_1, source_id: dragon.id, dragon_name: dragon.name, dragon_info: dragon.body},
34
+ drop_zone: {zone: :drag_zone_1} do
35
+ text dragon.name
36
+
37
+ event :drag do
38
+ snackbar "#{dragon.name} is a real drag!"
39
+ end
40
+
41
+ event :dragend do
42
+ snackbar "Done dragging #{dragon.name} around!"
43
+ end
44
+
45
+ event :drop do
46
+ posts '_dragon_drop_change_order_', target_id: dragon.id
47
+ loads :drag_drop
48
+ end
49
+
50
+ event :dropped do
51
+ snackbar "Dropped the #{dragon.name}. Whoops!"
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ column 5 do
58
+ attach :drop_zone
59
+ content drop_zone: {zone: :drag_zone_2}, padding: :top do
60
+ card do
61
+ blank
62
+ text "Try to drop something here"
63
+ blank
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ attach :code, file: __FILE__
70
+ end
71
+ end
72
+
73
+ Voom::Presenters.define(:drop_zone) do
74
+
75
+ content id: :drop_zone, drop_zone: {zone: 'drag_zone_1'} do
76
+ card do
77
+ blank
78
+ text "Drop a dragon here..."
79
+ text "Last dropped dragon: **#{context.fetch(:dragon_name)}**" if context.key?(:dragon_name)
80
+ text "Appeard In: **#{context.fetch(:dragon_info)}**" if context.key?(:dragon_info)
81
+ blank
82
+ end
83
+
84
+ event :drop do
85
+ # posts '_echo_'
86
+ replaces :drop_zone, :drop_zone #, dragon_name: last_response.dragon_name
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../helpers/indented_grid'
2
+
3
+ Voom::Presenters.define(:floating_card) do
4
+ helpers Demo::Helpers::IndentedGrid
5
+ attach :top_nav
6
+ attach :pattern_drawer
7
+
8
+ page_title 'Floating Card'
9
+ indented_grid do
10
+ button icon: :open_in_new do
11
+ event :click do
12
+ toggle_visibility :card
13
+ end
14
+ end
15
+ content id: :card, hidden: true, float: true do
16
+ card do
17
+ media do
18
+ title "Hi I'm floating"
19
+ button icon: :close do
20
+ event :click do
21
+ hide :card
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ attach :code, file: __FILE__
28
+ end
29
+ end
@@ -0,0 +1,106 @@
1
+ require_relative '../helpers/indented_grid'
2
+
3
+ module Demo
4
+ module Helpers
5
+ module SearchSelectDemo
6
+ def searches
7
+ search = context.fetch(:search) {nil}
8
+ searches = context.fetch(:searches) {[]}
9
+ searches << search unless search.nil? || search == ''
10
+ searches.select{|s| s != ''}
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+
17
+ Voom::Presenters.define(:search_select) do
18
+ helpers Demo::Helpers::IndentedGrid
19
+ attach :top_nav
20
+ attach :pattern_drawer
21
+
22
+ page_title 'Search and Select Pattern'
23
+ indented_grid do
24
+ grid tag: :input_data_container do
25
+ column 6 do
26
+ grid do
27
+ column 4 do
28
+ content do
29
+ text_field id: :search_field, name: :search, full_width: false do
30
+ label 'Search Tickets'
31
+ event :input do
32
+ replaces :ticket_list, :ticket_list, input_tag: :input_data_container
33
+ end
34
+ event :change do
35
+ replaces :ticket_list, :ticket_list, input_tag: :input_data_container
36
+ replaces :completed_searches, :completed_searches, input_tag: :input_data_container
37
+ clears :search_field
38
+ end
39
+ end
40
+ end
41
+ end
42
+ column 8 do
43
+ attach :completed_searches
44
+ end
45
+ end
46
+ attach :ticket_list, title: 'Search Results'
47
+ end
48
+ end
49
+ attach :code, file: __FILE__
50
+ end
51
+ end
52
+
53
+ Voom::Presenters.define(:ticket_list) do
54
+ helpers Demo::Helpers::SearchSelectDemo
55
+ helpers do
56
+ def ticket_data
57
+ [OpenStruct.new(id: 1, event_name: 'Pearl Jam', type: 'General Admission', amount: 10.00),
58
+ OpenStruct.new(id: 2, event_name: 'Pearl Jam', type: 'Reserved Seating', amount: 25.00),
59
+ OpenStruct.new(id: 3, event_name: 'Temple of the Dog', type: 'General Admission', amount: 5.00),
60
+ OpenStruct.new(id: 4, event_name: 'Temple of the Dog', type: 'Reserved Seating', amount: 10.00),
61
+ OpenStruct.new(id: 5, event_name: 'Japandroids', type: 'General Admission', amount: 7.50),
62
+ OpenStruct.new(id: 6, event_name: 'Japandroids', type: 'Reserved Seating', amount: 15.00)]
63
+ end
64
+
65
+ def tickets
66
+ re = Regexp.union(searches)
67
+ ticket_data.select {|ticket| re.match(ticket.event_name)}
68
+ end
69
+
70
+ def ticket_ids
71
+ context.fetch(:ticket_id) {[]}
72
+ end
73
+ end
74
+
75
+ content id: :ticket_list do
76
+ list selectable: true do
77
+ tickets.each do |ticket|
78
+ line name: :ticket_id, value: ticket.id, checked: ticket_ids.include?(ticket.id.to_s) do
79
+ text ticket.event_name
80
+ subtitle ticket.type
81
+ info "$#{ticket.amount}"
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ Voom::Presenters.define(:completed_searches) do
89
+ helpers Demo::Helpers::SearchSelectDemo
90
+ content id: :completed_searches do
91
+ chipset do
92
+ searches.each do |search|
93
+ chip color: :primary, name: 'searches[]', value: search, id: search do
94
+ text search
95
+ icon :delete, position: :right do
96
+ event :click do
97
+ remove search
98
+ replaces :ticket_list, :ticket_list, input_tag: :input_data_container
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+