voom-presenters 0.1.13 → 0.2.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 (305) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +186 -0
  4. data/Gemfile.lock +37 -38
  5. data/HISTORY.md +61 -0
  6. data/README.md +23 -1
  7. data/app/demo/components/chips.pom +6 -0
  8. data/app/demo/components/{forms.pom → content.pom} +3 -3
  9. data/app/demo/components/date_fields.pom +1 -1
  10. data/app/demo/components/datetime_fields.pom +6 -0
  11. data/app/demo/components/drawers.pom +1 -1
  12. data/app/demo/components/file_inputs.pom +16 -0
  13. data/app/demo/components/footers.pom +1 -1
  14. data/app/demo/components/google_maps.pom +17 -0
  15. data/app/demo/components/headers.pom +1 -1
  16. data/app/demo/components/layouts.pom +36 -4
  17. data/app/demo/components/lists.pom +25 -0
  18. data/app/demo/components/nav/menu.pom +9 -2
  19. data/app/demo/components/nav/pattern_drawer.pom +5 -0
  20. data/app/demo/components/nav/pattern_menu.pom +12 -0
  21. data/app/demo/components/sliders.pom +49 -0
  22. data/app/demo/components/snackbar.pom +10 -0
  23. data/app/demo/components/steppers.pom +178 -0
  24. data/app/demo/components/tab_bars.pom +51 -0
  25. data/app/demo/components/tables.pom +85 -13
  26. data/app/demo/components/text_areas.pom +13 -0
  27. data/app/demo/components/text_fields.pom +20 -8
  28. data/app/demo/components/toggles.pom +50 -14
  29. data/app/demo/components/tooltips.pom +2 -6
  30. data/app/demo/events/actions/clear.pom +23 -0
  31. data/app/demo/events/actions/loads.pom +16 -6
  32. data/app/demo/events/actions/posts.pom +1 -1
  33. data/app/demo/events/actions/toggle_visiblity.pom +4 -3
  34. data/app/demo/events/nav/drawer.pom +2 -2
  35. data/app/demo/events/tagged_input.pom +37 -0
  36. data/app/demo/hello_world.pom +3 -0
  37. data/app/demo/markdown.pom +1 -0
  38. data/app/demo/namespaces.pom +89 -0
  39. data/app/demo/nav/top_nav.pom +12 -0
  40. data/app/demo/patterns.pom +19 -0
  41. data/app/demo/patterns/search_select.pom +104 -0
  42. data/app/demo/shared/context_list.pom +1 -1
  43. data/app/demo/styles.pom +21 -11
  44. data/component-status.yml +11 -11
  45. data/config.ru +2 -1
  46. data/lib/voom/container_methods.rb +1 -1
  47. data/lib/voom/presenters-engine.rb +29 -26
  48. data/lib/voom/presenters.rb +15 -9
  49. data/lib/voom/presenters/api/app.rb +18 -5
  50. data/lib/voom/presenters/api/router.rb +11 -49
  51. data/lib/voom/presenters/demo/echo.rb +5 -0
  52. data/lib/voom/presenters/dsl.rb +10 -4
  53. data/lib/voom/presenters/dsl/components/actions/base.rb +37 -0
  54. data/lib/voom/presenters/dsl/components/actions/clear.rb +17 -0
  55. data/lib/voom/presenters/dsl/components/actions/deletes.rb +17 -0
  56. data/lib/voom/presenters/dsl/components/actions/dialog.rb +17 -0
  57. data/lib/voom/presenters/dsl/components/actions/loads.rb +32 -0
  58. data/lib/voom/presenters/dsl/components/actions/navigates.rb +17 -0
  59. data/lib/voom/presenters/dsl/components/actions/posts.rb +17 -0
  60. data/lib/voom/presenters/dsl/components/actions/remove.rb +17 -0
  61. data/lib/voom/presenters/dsl/components/actions/replaces.rb +25 -0
  62. data/lib/voom/presenters/dsl/components/actions/snackbar.rb +17 -0
  63. data/lib/voom/presenters/dsl/components/actions/stepper.rb +17 -0
  64. data/lib/voom/presenters/dsl/components/actions/toggle_visibility.rb +17 -0
  65. data/lib/voom/presenters/dsl/components/actions/updates.rb +17 -0
  66. data/lib/voom/presenters/dsl/components/avatar.rb +4 -5
  67. data/lib/voom/presenters/dsl/components/badge.rb +1 -1
  68. data/lib/voom/presenters/dsl/components/base.rb +20 -11
  69. data/lib/voom/presenters/dsl/components/button.rb +12 -10
  70. data/lib/voom/presenters/dsl/components/card.rb +18 -19
  71. data/lib/voom/presenters/dsl/components/checkbox.rb +3 -1
  72. data/lib/voom/presenters/dsl/components/chip.rb +9 -10
  73. data/lib/voom/presenters/dsl/components/content.rb +21 -11
  74. data/lib/voom/presenters/dsl/components/date_field.rb +1 -1
  75. data/lib/voom/presenters/dsl/components/datetime_base.rb +1 -2
  76. data/lib/voom/presenters/dsl/components/datetime_field.rb +1 -1
  77. data/lib/voom/presenters/dsl/components/dialog.rb +10 -6
  78. data/lib/voom/presenters/dsl/components/drawer.rb +6 -4
  79. data/lib/voom/presenters/dsl/components/event.rb +55 -39
  80. data/lib/voom/presenters/dsl/components/event_base.rb +2 -2
  81. data/lib/voom/presenters/dsl/components/expansion_panel.rb +5 -5
  82. data/lib/voom/presenters/dsl/components/file_input.rb +22 -0
  83. data/lib/voom/presenters/dsl/components/footer.rb +1 -1
  84. data/lib/voom/presenters/dsl/components/form.rb +17 -15
  85. data/lib/voom/presenters/dsl/components/google_map.rb +40 -0
  86. data/lib/voom/presenters/dsl/components/grid.rb +58 -18
  87. data/lib/voom/presenters/dsl/components/header.rb +2 -5
  88. data/lib/voom/presenters/dsl/components/hidden_field.rb +2 -2
  89. data/lib/voom/presenters/dsl/components/icon.rb +4 -5
  90. data/lib/voom/presenters/dsl/components/icon_base.rb +3 -3
  91. data/lib/voom/presenters/dsl/components/icon_toggle.rb +2 -2
  92. data/lib/voom/presenters/dsl/components/image.rb +3 -3
  93. data/lib/voom/presenters/dsl/components/input.rb +2 -2
  94. data/lib/voom/presenters/dsl/components/list.rb +12 -10
  95. data/lib/voom/presenters/dsl/components/lists/action.rb +8 -9
  96. data/lib/voom/presenters/dsl/components/lists/actions.rb +8 -8
  97. data/lib/voom/presenters/dsl/components/lists/header.rb +2 -2
  98. data/lib/voom/presenters/dsl/components/lists/line.rb +14 -17
  99. data/lib/voom/presenters/dsl/components/lists/separator.rb +2 -2
  100. data/lib/voom/presenters/dsl/components/menu.rb +10 -12
  101. data/lib/voom/presenters/dsl/components/mixins/attaches.rb +9 -3
  102. data/lib/voom/presenters/dsl/components/mixins/avatar.rb +0 -1
  103. data/lib/voom/presenters/dsl/components/mixins/buttons.rb +1 -1
  104. data/lib/voom/presenters/dsl/components/mixins/chips.rb +1 -2
  105. data/lib/voom/presenters/dsl/components/mixins/common.rb +20 -14
  106. data/lib/voom/presenters/dsl/components/mixins/content.rb +1 -1
  107. data/lib/voom/presenters/dsl/components/mixins/date_time_fields.rb +0 -3
  108. data/lib/voom/presenters/dsl/components/mixins/dialogs.rb +1 -2
  109. data/lib/voom/presenters/dsl/components/mixins/event.rb +3 -3
  110. data/lib/voom/presenters/dsl/components/mixins/expansion_panels.rb +1 -1
  111. data/lib/voom/presenters/dsl/components/mixins/file_inputs.rb +16 -0
  112. data/lib/voom/presenters/dsl/components/mixins/google_maps.rb +15 -0
  113. data/lib/voom/presenters/dsl/components/mixins/grids.rb +1 -1
  114. data/lib/voom/presenters/dsl/components/mixins/icons.rb +0 -1
  115. data/lib/voom/presenters/dsl/components/mixins/menus.rb +1 -1
  116. data/lib/voom/presenters/dsl/components/mixins/selects.rb +0 -1
  117. data/lib/voom/presenters/dsl/components/mixins/sliders.rb +15 -0
  118. data/lib/voom/presenters/dsl/components/mixins/snackbars.rb +0 -1
  119. data/lib/voom/presenters/dsl/components/mixins/steppers.rb +15 -0
  120. data/lib/voom/presenters/dsl/components/mixins/tab_bars.rb +15 -0
  121. data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +5 -3
  122. data/lib/voom/presenters/dsl/components/mixins/toggles.rb +1 -4
  123. data/lib/voom/presenters/dsl/components/mixins/tooltips.rb +0 -1
  124. data/lib/voom/presenters/dsl/components/mixins/typography.rb +43 -13
  125. data/lib/voom/presenters/dsl/components/page.rb +0 -1
  126. data/lib/voom/presenters/dsl/components/radio_button.rb +1 -1
  127. data/lib/voom/presenters/dsl/components/rich_text_area.rb +26 -0
  128. data/lib/voom/presenters/dsl/components/select.rb +4 -5
  129. data/lib/voom/presenters/dsl/components/slider.rb +39 -0
  130. data/lib/voom/presenters/dsl/components/snackbar.rb +2 -2
  131. data/lib/voom/presenters/dsl/components/stepper.rb +106 -0
  132. data/lib/voom/presenters/dsl/components/switch.rb +1 -1
  133. data/lib/voom/presenters/dsl/components/tab_bar.rb +53 -0
  134. data/lib/voom/presenters/dsl/components/table.rb +99 -27
  135. data/lib/voom/presenters/dsl/components/text_area.rb +4 -3
  136. data/lib/voom/presenters/dsl/components/text_field.rb +8 -12
  137. data/lib/voom/presenters/dsl/components/time_field.rb +1 -1
  138. data/lib/voom/presenters/dsl/components/toggle_base.rb +2 -2
  139. data/lib/voom/presenters/dsl/components/tooltip.rb +1 -2
  140. data/lib/voom/presenters/dsl/components/typography.rb +4 -5
  141. data/lib/voom/presenters/dsl/definer.rb +2 -2
  142. data/lib/voom/presenters/dsl/definition.rb +6 -4
  143. data/lib/voom/presenters/dsl/user_interface.rb +17 -21
  144. data/lib/voom/presenters/errors/parameter_validation.rb +1 -1
  145. data/lib/voom/presenters/helpers.rb +5 -5
  146. data/lib/voom/presenters/helpers/date.rb +3 -3
  147. data/lib/voom/presenters/helpers/rails.rb +7 -2
  148. data/lib/voom/presenters/helpers/rails/model_table.rb +14 -6
  149. data/lib/voom/presenters/helpers/route.rb +6 -0
  150. data/lib/voom/presenters/helpers/time.rb +1 -1
  151. data/lib/voom/presenters/namespace.rb +12 -0
  152. data/lib/voom/presenters/settings.rb +58 -37
  153. data/lib/voom/presenters/version.rb +1 -1
  154. data/lib/voom/presenters/web_client/app.rb +50 -20
  155. data/lib/voom/presenters/web_client/markdown_render.rb +24 -11
  156. data/lib/voom/presenters/web_client/router.rb +17 -52
  157. data/lib/voom/serializer.rb +2 -2
  158. data/lib/voom/trace.rb +1 -1
  159. data/presenters.gemspec +2 -1
  160. data/public/style-bundle.js +2 -2
  161. data/scripts/bump.sh +1 -0
  162. data/scripts/changelog.sh +5 -0
  163. data/scripts/deploy-demo.sh +1 -0
  164. data/scripts/release.sh +1 -1
  165. data/scripts/tag.sh +5 -0
  166. data/views/mdc/.babelrc +8 -0
  167. data/views/mdc/.eslintrc.yml +23 -0
  168. data/views/mdc/assets/js/app.js +19 -6
  169. data/views/mdc/assets/js/components/base-component.js +25 -2
  170. data/views/mdc/assets/js/components/base-container.js +47 -0
  171. data/views/mdc/assets/js/components/button.js +3 -10
  172. data/views/mdc/assets/js/components/cards.js +11 -0
  173. data/views/mdc/assets/js/components/checkboxes.js +30 -7
  174. data/views/mdc/assets/js/components/chips.js +38 -5
  175. data/views/mdc/assets/js/components/content.js +13 -0
  176. data/views/mdc/assets/js/components/data-tables.js +38 -0
  177. data/views/mdc/assets/js/components/datetime.js +61 -21
  178. data/views/mdc/assets/js/components/dialogs.js +25 -19
  179. data/views/mdc/assets/js/components/events.js +13 -3
  180. data/views/mdc/assets/js/components/events/base.js +13 -3
  181. data/views/mdc/assets/js/components/events/errors.js +1 -1
  182. data/views/mdc/assets/js/components/events/posts.js +53 -13
  183. data/views/mdc/assets/js/components/events/removes.js +20 -0
  184. data/views/mdc/assets/js/components/events/replaces.js +35 -36
  185. data/views/mdc/assets/js/components/events/stepper.js +23 -0
  186. data/views/mdc/assets/js/components/events/toggle_visibility.js +15 -11
  187. data/views/mdc/assets/js/components/file-inputs.js +29 -0
  188. data/views/mdc/assets/js/components/forms.js +8 -59
  189. data/views/mdc/assets/js/components/grid.js +20 -0
  190. data/views/mdc/assets/js/components/hidden-fields.js +33 -0
  191. data/views/mdc/assets/js/components/icon-toggles.js +7 -14
  192. data/views/mdc/assets/js/components/initialize.js +20 -1
  193. data/views/mdc/assets/js/components/lists.js +1 -1
  194. data/views/mdc/assets/js/components/menus.js +12 -13
  195. data/views/mdc/assets/js/components/mixins/visibility-observer.js +34 -0
  196. data/views/mdc/assets/js/components/radios.js +39 -0
  197. data/views/mdc/assets/js/components/rich-text-area.js +43 -0
  198. data/views/mdc/assets/js/components/selects.js +24 -23
  199. data/views/mdc/assets/js/components/sliders.js +56 -0
  200. data/views/mdc/assets/js/components/snackbar.js +14 -23
  201. data/views/mdc/assets/js/components/steppers.js +48 -0
  202. data/views/mdc/assets/js/components/switches.js +24 -23
  203. data/views/mdc/assets/js/components/tab-bars.js +14 -0
  204. data/views/mdc/assets/js/components/text-fields.js +37 -35
  205. data/views/mdc/assets/js/config.js +27 -0
  206. data/views/mdc/assets/js/mdl-stepper.js +1108 -0
  207. data/views/mdc/assets/js/utils/compatibility.js +9 -0
  208. data/views/mdc/assets/js/utils/config.js +73 -0
  209. data/views/mdc/assets/js/utils/config.test.js +59 -0
  210. data/views/mdc/assets/js/utils/urls.js +5 -2
  211. data/views/mdc/assets/scss/app.scss +11 -3
  212. data/views/mdc/assets/scss/components/button.scss +17 -2
  213. data/views/mdc/assets/scss/components/card.scss +8 -3
  214. data/views/mdc/assets/scss/components/checkbox.scss +0 -4
  215. data/views/mdc/assets/scss/components/content.scss +11 -0
  216. data/views/mdc/assets/scss/components/data-table.scss +80 -0
  217. data/views/mdc/assets/scss/components/datetime.scss +6 -0
  218. data/views/mdc/assets/scss/components/fab.scss +2 -1
  219. data/views/mdc/assets/scss/components/file-input.scss +22 -0
  220. data/views/mdc/assets/scss/components/grid.scss +59 -3
  221. data/views/mdc/assets/scss/components/image.scss +6 -0
  222. data/views/mdc/assets/scss/components/list.scss +13 -0
  223. data/views/mdc/assets/scss/components/menu.scss +1 -0
  224. data/views/mdc/assets/scss/components/radio.scss +4 -0
  225. data/views/mdc/assets/scss/components/rich-text-area.scss +37 -0
  226. data/views/mdc/assets/scss/components/slider.scss +1 -0
  227. data/views/mdc/assets/scss/components/snackbar.scss +1 -5
  228. data/views/mdc/assets/scss/components/stepper.scss +235 -0
  229. data/views/mdc/assets/scss/components/switch.scss +4 -5
  230. data/views/mdc/assets/scss/components/tab-bars.scss +4 -0
  231. data/views/mdc/assets/scss/components/textfield.scss +8 -1
  232. data/views/mdc/assets/scss/components/typography.scss +4 -0
  233. data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +2 -2
  234. data/views/mdc/assets/scss/components/vendor/quill.snow.css +945 -0
  235. data/views/mdc/assets/scss/styles.scss +3 -2
  236. data/views/mdc/assets/scss/theme.scss +6 -0
  237. data/views/mdc/body/header.erb +1 -0
  238. data/views/mdc/body/snackbar.erb +1 -1
  239. data/views/mdc/components/actions/clear.rb +11 -0
  240. data/views/mdc/components/actions/delete.rb +11 -0
  241. data/views/mdc/components/actions/dialog.rb +11 -0
  242. data/views/mdc/components/actions/loads.rb +11 -0
  243. data/views/mdc/components/actions/navigates.rb +11 -0
  244. data/views/mdc/components/actions/post.rb +17 -0
  245. data/views/mdc/components/actions/remove.rb +10 -0
  246. data/views/mdc/components/actions/replaces.rb +12 -0
  247. data/views/mdc/components/actions/snackbar.rb +10 -0
  248. data/views/mdc/components/actions/stepper.rb +10 -0
  249. data/views/mdc/components/actions/toggle_visibility.rb +10 -0
  250. data/views/mdc/components/actions/update.rb +10 -0
  251. data/views/mdc/components/button.erb +9 -6
  252. data/views/mdc/components/buttons/button.erb +10 -5
  253. data/views/mdc/components/buttons/fab.erb +8 -2
  254. data/views/mdc/components/buttons/icon.erb +9 -2
  255. data/views/mdc/components/buttons/image.erb +9 -4
  256. data/views/mdc/components/{display.erb → caption.erb} +0 -0
  257. data/views/mdc/components/card.erb +6 -3
  258. data/views/mdc/components/checkbox.erb +21 -9
  259. data/views/mdc/components/chip.erb +12 -3
  260. data/views/mdc/components/content.erb +6 -1
  261. data/views/mdc/components/datetime.erb +21 -13
  262. data/views/mdc/components/dialog.erb +4 -1
  263. data/views/mdc/components/event.erb +5 -9
  264. data/views/mdc/components/file_input.erb +13 -0
  265. data/views/mdc/components/form.erb +19 -5
  266. data/views/mdc/components/google_map.erb +9 -0
  267. data/views/mdc/components/grid.erb +18 -4
  268. data/views/mdc/components/headline.erb +2 -0
  269. data/views/mdc/components/hidden_field.erb +6 -1
  270. data/views/mdc/components/icon_toggle.erb +1 -1
  271. data/views/mdc/components/list.erb +5 -2
  272. data/views/mdc/components/list/actions/switch.erb +1 -1
  273. data/views/mdc/components/list/line.erb +7 -6
  274. data/views/mdc/components/menu.erb +8 -12
  275. data/views/mdc/components/{subheading.erb → overline.erb} +0 -0
  276. data/views/mdc/components/radio_button.erb +20 -10
  277. data/views/mdc/components/rich_text_area.erb +19 -0
  278. data/views/mdc/components/select.erb +7 -3
  279. data/views/mdc/components/slider.erb +41 -0
  280. data/views/mdc/components/snackbar.erb +2 -6
  281. data/views/mdc/components/stepper.erb +47 -0
  282. data/views/mdc/components/stepper/step.erb +33 -0
  283. data/views/mdc/components/{title.erb → subtitle.erb} +0 -0
  284. data/views/mdc/components/switch.erb +27 -12
  285. data/views/mdc/components/tab_bar.erb +29 -0
  286. data/views/mdc/components/table.erb +4 -2
  287. data/views/mdc/components/table/checkbox.erb +17 -0
  288. data/views/mdc/components/table/header.erb +13 -4
  289. data/views/mdc/components/table/pagination.erb +14 -23
  290. data/views/mdc/components/table/row.erb +3 -1
  291. data/views/mdc/components/text_area.erb +17 -7
  292. data/views/mdc/components/text_field.erb +31 -13
  293. data/views/mdc/components/typography.erb +2 -2
  294. data/views/mdc/layout.erb +33 -31
  295. data/views/mdc/package-lock.json +11019 -6996
  296. data/views/mdc/package.json +46 -27
  297. data/views/mdc/webpack.config.js +1 -0
  298. metadata +112 -13
  299. data/app/demo/events/actions/autocomplete.pom +0 -32
  300. data/lib/voom/presenters/dsl/components/action.rb +0 -35
  301. data/views/mdc/assets/js/components/events/autocomplete.js +0 -96
  302. data/views/mdc/assets/js/material.js +0 -3996
  303. data/views/mdc/assets/scss/components/table-pagination.scss +0 -65
  304. data/views/mdc/components/modal.erb +0 -15
  305. data/views/mdc/components/static.erb +0 -7
@@ -1,4 +1,5 @@
1
- require_relative 'mixins/common'
1
+ require 'voom/presenters/dsl/components/mixins/common'
2
+ require 'voom/presenters/dsl/components/mixins/attaches'
2
3
 
3
4
  module Voom
4
5
  module Presenters
@@ -6,6 +7,7 @@ module Voom
6
7
  module Components
7
8
  class Drawer < Base
8
9
  include Mixins::Common
10
+ include Mixins::Attaches
9
11
 
10
12
  attr_accessor :title, :components
11
13
 
@@ -19,18 +21,18 @@ module Voom
19
21
 
20
22
  def menu(**attribs, &block)
21
23
  return @menu if locked?
22
- @menu = Menu.new(parent: self, context: context,
24
+ @menu = Menu.new(parent: self,
23
25
  **attribs, &block)
24
26
  end
25
27
 
26
28
  def attach(presenter, **params, &block)
27
- pom = Voom::Presenters::App[presenter].call.expand_child(parent: self, context: context.merge(params), &block)
29
+ pom = super
28
30
  @menu = pom.components.select {|i| i.type==:menu}.first
29
31
  end
30
32
 
31
33
  def title(*text, **attribs, &block)
32
34
  return @title if locked?
33
- @title = Components::Typography.new(parent: self, type: :text, text: text, context: context, **attribs, &block)
35
+ @title = Components::Typography.new(parent: self, type: :text, text: text, **attribs, &block)
34
36
  end
35
37
 
36
38
  end
@@ -1,104 +1,111 @@
1
+ require 'voom/presenters/dsl/components/actions/loads'
2
+ require 'voom/presenters/dsl/components/actions/replaces'
3
+ require 'voom/presenters/dsl/components/actions/posts'
4
+ require 'voom/presenters/dsl/components/actions/updates'
5
+ require 'voom/presenters/dsl/components/actions/deletes'
6
+ require 'voom/presenters/dsl/components/actions/remove'
7
+ require 'voom/presenters/dsl/components/actions/dialog'
8
+ require 'voom/presenters/dsl/components/actions/toggle_visibility'
9
+ require 'voom/presenters/dsl/components/actions/snackbar'
10
+ require 'voom/presenters/dsl/components/actions/clear'
11
+ require 'voom/presenters/dsl/components/actions/navigates'
12
+ require 'voom/presenters/dsl/components/actions/stepper'
13
+
1
14
  module Voom
2
15
  module Presenters
3
16
  module DSL
4
17
  module Components
5
18
  class Event < Base
6
19
  attr_accessor :event, :actions
20
+ # Alias common event names
21
+ EVENT_MAP = {focus: :focusin, blur: :focusout}
7
22
 
8
23
  def initialize(**attribs_, &block)
9
24
  super(type: :event, **attribs_, &block)
10
- @event = attribs.delete(:event)
25
+ @event = alias_event(attribs.delete(:event))
11
26
  @actions = []
12
27
  expand!
13
28
  end
14
29
 
15
30
  def loads(presenter=nil, path: nil, target: nil, **params, &block)
16
- @actions << Components::Action.new(parent: self,
17
- type: :loads,
31
+ @actions << Actions::Loads.new(parent: self,
18
32
  presenter: presenter,
19
33
  path: path,
20
34
  target: target,
21
35
  params: params, &block)
22
36
  end
23
37
 
24
- def replaces(target, presenter, **params, &block)
25
- @actions << Components::Action.new(parent: self,
26
- type: :replaces,
38
+ def replaces(target, presenter, input_tag: nil, **params, &block)
39
+ @actions << Actions::Replaces.new(parent: self,
27
40
  target: target,
28
41
  presenter: presenter,
42
+ input_tag: input_tag,
29
43
  params: params, &block)
30
44
  end
31
45
 
32
46
  # Method can be one of :post, :put, :delete or :patch
33
- def posts(path, **params, &block)
34
- @actions << Components::Action.new(parent: self,
35
- type: :post,
47
+ def posts(path, input_tag: nil, **params, &block)
48
+ @actions << Actions::Posts.new(parent: self,
36
49
  path: path,
50
+ input_tag: input_tag,
37
51
  params: params, &block)
38
52
  end
39
53
 
40
54
  alias creates posts
41
55
 
42
- def updates(path, **params, &block)
43
- @actions << Components::Action.new(parent: self,
44
- type: :update,
56
+ def updates(path, input_tag: nil, **params, &block)
57
+ @actions << Actions::Updates.new(parent: self,
45
58
  path: path,
59
+ input_tag: input_tag,
46
60
  params: params, &block)
47
61
  end
48
62
 
49
- def deletes(path, **params, &block)
50
- @actions << Components::Action.new(parent: self,
51
- type: :delete,
63
+ def deletes(path, input_tag: nil, **params, &block)
64
+ @actions << Actions::Deletes.new(parent: self,
52
65
  path: path,
66
+ input_tag: input_tag,
53
67
  params: params, &block)
54
68
  end
55
69
 
56
70
  def dialog(dialog_id, **params, &block)
57
- @actions << Components::Action.new(parent: self,
58
- type: :dialog,
71
+ @actions << Actions::Dialog.new(parent: self,
59
72
  target: dialog_id,
60
73
  params: params, &block)
61
74
  end
62
75
 
63
76
  def toggle_visibility(component_id, **params, &block)
64
- @actions << Components::Action.new(parent: self,
65
- type: :toggle_visibility,
77
+ @actions << Actions::ToggleVisibility.new(parent: self,
66
78
  target: component_id,
67
79
  params: params, &block)
68
80
  end
69
81
 
82
+ # Removes the component and all its children
83
+ # Takes either an id or a list of ids.
84
+ def remove(*ids, **params, &block)
85
+ @actions << Actions::Remove.new(parent: self,
86
+ params: params.merge(ids: ids), &block)
87
+ end
88
+ alias removes remove
89
+
70
90
  def show(component_id, **params, &block)
71
- @actions << Components::Action.new(parent: self,
72
- type: :toggle_visibility,
91
+ @actions << Actions::ToggleVisibility.new(parent: self,
73
92
  target: component_id,
74
93
  params: params.merge(action: :show), &block)
75
94
  end
76
95
 
77
96
  def hide(component_id, **params, &block)
78
- @actions << Components::Action.new(parent: self,
79
- type: :toggle_visibility,
97
+ @actions << Actions::ToggleVisibility.new(parent: self,
80
98
  target: component_id,
81
99
  params: params.merge(action: :hide), &block)
82
100
  end
83
101
 
84
102
  def snackbar(text, **params, &block)
85
- @actions << Components::Action.new(parent: self,
86
- type: :snackbar,
103
+ @actions << Actions::Snackbar.new(parent: self,
87
104
  params: params.merge(text: text), &block)
88
105
  end
89
-
90
- def autocomplete(path, **params, &block)
91
- @actions << Components::Action.new(parent: self,
92
- type: :autocomplete,
93
- path: path,
94
- target: "#{parent(:text_field).id}-list",
95
- params: params, &block)
96
- end
97
-
106
+
98
107
  def navigates(direction, **params, &block)
99
- @actions << Components::Action.new(parent: self,
100
- type: :navigates,
101
- direction: direction,
108
+ @actions << Actions::Navigates.new(parent: self,
102
109
  params: params.merge(direction: direction), &block)
103
110
  end
104
111
 
@@ -108,12 +115,21 @@ module Voom
108
115
  # Takes either an id or a list of ids.
109
116
  # If the id is that of a form then all the clearable inputs on the form will be cleared.
110
117
  def clear(*ids, **params, &block)
111
- @actions << Components::Action.new(parent: self,
112
- type: :clear,
118
+ @actions << Actions::Clear.new(parent: self,
113
119
  params: params.merge(ids: ids), &block)
114
120
  end
115
121
 
116
122
  alias clears clear
123
+
124
+ def stepper(navigate, **params, &block)
125
+ @actions << Actions::Stepper.new(parent: self,
126
+ params: params.merge(navigate: navigate, stepper_id: parent(:stepper).id), &block)
127
+ end
128
+
129
+ private
130
+ def alias_event(event)
131
+ EVENT_MAP.fetch(event.to_sym){event.to_sym}
132
+ end
117
133
  end
118
134
  end
119
135
  end
@@ -1,4 +1,4 @@
1
- require_relative 'mixins/event'
1
+ require 'voom/presenters/dsl/components/mixins/event'
2
2
 
3
3
  module Voom
4
4
  module Presenters
@@ -9,7 +9,7 @@ module Voom
9
9
  attr_reader :event_parent_id
10
10
 
11
11
  def initialize(**attribs_, &block)
12
- super(type: :icon, context: context,
12
+ super(type: :icon,
13
13
  **attribs_, &block)
14
14
  @event_parent_id = @id
15
15
  end
@@ -1,5 +1,5 @@
1
- require_relative 'mixins/common'
2
- require_relative 'mixins/attaches'
1
+ require 'voom/presenters/dsl/components/mixins/common'
2
+ require 'voom/presenters/dsl/components/mixins/attaches'
3
3
 
4
4
  module Voom
5
5
  module Presenters
@@ -20,17 +20,17 @@ module Voom
20
20
 
21
21
  def text(*text, **attribs, &block)
22
22
  return @text if locked?
23
- @text = Components::Typography.new(parent: self, type: :text, text: text, context: context, **attribs, &block)
23
+ @text = Components::Typography.new(parent: self, type: :text, text: text, **attribs, &block)
24
24
  end
25
25
 
26
26
  def secondary_text(*text, **attribs, &block)
27
27
  return @secondary_text if locked?
28
- @secondary_text = Components::Typography.new(parent: self, type: :text, text: text, context: context, **attribs, &block)
28
+ @secondary_text = Components::Typography.new(parent: self, type: :text, text: text, **attribs, &block)
29
29
  end
30
30
 
31
31
  def content(**attribs, &block)
32
32
  return @content if locked?
33
- @content = Content.new(parent: self, context: context, **attribs, &block)
33
+ @content = Content.new(parent: self, **attribs, &block)
34
34
  end
35
35
 
36
36
  class Content < EventBase
@@ -0,0 +1,22 @@
1
+ require 'voom/presenters/dsl/components/input'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class FileInput < Input
8
+ attr_reader :button_label, :input_label
9
+
10
+ def initialize(**attribs_, &block)
11
+ super(type: :file_input, **attribs_, &block)
12
+
13
+ @button_label = attribs.delete(:button_label) { 'Choose a file' }
14
+ @input_label = attribs.delete(:input_label) { 'No file selected' }
15
+
16
+ expand!
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -14,7 +14,7 @@ module Voom
14
14
 
15
15
  def menu(title=nil, **attribs, &block)
16
16
  return @menus if locked?
17
- @menus << Menu.new(title,parent: self, context: context,
17
+ @menus << Menu.new(title,parent: self,
18
18
  **attribs, &block)
19
19
  end
20
20
 
@@ -1,18 +1,19 @@
1
- require_relative 'hidden_field'
2
- require_relative 'text_field'
3
- require_relative 'text_area'
4
- require_relative 'mixins/event'
5
- require_relative 'mixins/grids'
6
- require_relative 'mixins/append'
7
- require_relative 'mixins/text_fields'
8
- require_relative 'mixins/selects'
9
- require_relative 'mixins/buttons'
10
- require_relative 'mixins/toggles'
11
- require_relative 'mixins/attaches'
12
- require_relative 'mixins/expansion_panels'
13
- require_relative 'mixins/content'
14
- require_relative 'mixins/typography'
15
- require_relative 'mixins/date_time_fields'
1
+ require 'voom/presenters/dsl/components/hidden_field'
2
+ require 'voom/presenters/dsl/components/text_field'
3
+ require 'voom/presenters/dsl/components/text_area'
4
+ require 'voom/presenters/dsl/components/mixins/event'
5
+ require 'voom/presenters/dsl/components/mixins/grids'
6
+ require 'voom/presenters/dsl/components/mixins/append'
7
+ require 'voom/presenters/dsl/components/mixins/text_fields'
8
+ require 'voom/presenters/dsl/components/mixins/selects'
9
+ require 'voom/presenters/dsl/components/mixins/buttons'
10
+ require 'voom/presenters/dsl/components/mixins/toggles'
11
+ require 'voom/presenters/dsl/components/mixins/attaches'
12
+ require 'voom/presenters/dsl/components/mixins/expansion_panels'
13
+ require 'voom/presenters/dsl/components/mixins/content'
14
+ require 'voom/presenters/dsl/components/mixins/typography'
15
+ require 'voom/presenters/dsl/components/mixins/date_time_fields'
16
+ require 'voom/presenters/dsl/components/mixins/file_inputs'
16
17
 
17
18
  module Voom
18
19
  module Presenters
@@ -30,6 +31,7 @@ module Voom
30
31
  include Mixins::ExpansionPanels
31
32
  include Mixins::Content
32
33
  include Mixins::Typography
34
+ include Mixins::FileInputs
33
35
 
34
36
  attr_reader :components, :shows_errors
35
37
 
@@ -0,0 +1,40 @@
1
+ require 'uri'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class GoogleMap < Base
8
+
9
+ attr_reader :url, :google_api_key, :height, :width
10
+
11
+ def initialize(**attribs_, &block)
12
+ super(type: :google_map, **attribs_, &block)
13
+ @address = attribs.delete(:address)
14
+ @latitude = attribs.delete(:latitude)
15
+ @longitude = attribs.delete(:longitude)
16
+ @width = attribs.delete(:width) { 640 }
17
+ @height = attribs.delete(:height) { 640 }
18
+ @zoom = attribs.delete(:zoom) { 14 }
19
+ @scale = attribs.delete(:scale) { 1 }
20
+ @google_api_key = attribs.delete(:google_api_key) { ENV['GOOGLE_API_KEY'] }
21
+ @url = build_static_map_image_url
22
+ end
23
+
24
+ private
25
+
26
+ def build_static_map_image_url
27
+ return @img_url if locked?
28
+ @img_url = "https://maps.googleapis.com/maps/api/staticmap?center=#{query_string}&zoom=#{@zoom}&scale=#{@scale}&size=#{@width}x#{@height}&markers=|#{query_string}&key=#{@google_api_key}"
29
+ end
30
+
31
+ def query_string
32
+ return "#{@latitude},#{@longitude}" if @latitude && @longitude
33
+ URI.escape(@address)
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,43 +1,75 @@
1
- require_relative 'mixins/common'
2
- require_relative 'mixins/images'
3
- require_relative 'mixins/icons'
4
- require_relative 'mixins/event'
5
- require_relative 'mixins/attaches'
6
- require_relative 'mixins/dialogs'
7
- require_relative 'mixins/chips'
8
- require_relative 'mixins/snackbars'
9
- require_relative 'mixins/selects'
10
- require_relative 'mixins/text_fields'
11
- require_relative 'mixins/date_time_fields'
1
+ require 'voom/presenters/dsl/components/mixins/common'
2
+ require 'voom/presenters/dsl/components/mixins/images'
3
+ require 'voom/presenters/dsl/components/mixins/icons'
4
+ require 'voom/presenters/dsl/components/mixins/event'
5
+ require 'voom/presenters/dsl/components/mixins/attaches'
6
+ require 'voom/presenters/dsl/components/mixins/dialogs'
7
+ require 'voom/presenters/dsl/components/mixins/chips'
8
+ require 'voom/presenters/dsl/components/mixins/snackbars'
9
+ require 'voom/presenters/dsl/components/mixins/selects'
10
+ require 'voom/presenters/dsl/components/mixins/text_fields'
11
+ require 'voom/presenters/dsl/components/mixins/date_time_fields'
12
+ require 'voom/presenters/dsl/components/mixins/steppers'
13
+ require 'voom/presenters/dsl/components/mixins/sliders'
14
+ require 'voom/presenters/dsl/components/mixins/file_inputs'
12
15
 
13
16
  module Voom
14
17
  module Presenters
15
18
  module DSL
16
19
  module Components
20
+ module Padding
21
+ def coerce_padding(padding)
22
+ case padding
23
+ when true, :full
24
+ [:top, :right, :bottom, :left]
25
+ when false, :none
26
+ []
27
+ else
28
+ Array(padding)
29
+ end
30
+ end
31
+
32
+ def validate_padding(padding_)
33
+ validation_msg = 'Padding must either be true or :full, false or :none, '\
34
+ 'or an array containing zero ore more of the following :top, :right, :bottom, :left!'
35
+ if padding_.respond_to?(:pop)
36
+ raise Errors::ParameterValidation, validation_msg if (padding_ - %i(top right bottom left)).any?
37
+ else
38
+ raise Errors::ParameterValidation, validation_msg unless padding_===true ||
39
+ padding_===false ||
40
+ %i(full none).include(padding_)
41
+ end
42
+ padding_
43
+ end
44
+
45
+ end
17
46
  class Grid < Base
18
47
  include Mixins::Attaches
19
48
  include Mixins::Dialogs
20
49
  include Mixins::Snackbars
21
-
22
- attr_accessor :columns, :color, :padded
50
+
51
+ attr_accessor :columns, :color, :padding, :wide
23
52
 
24
53
  def initialize(color: nil, **attribs_, &block)
25
54
  super(type: :grid, **attribs_, &block)
26
55
  @columns = []
27
56
  @color = h(color)
28
- @padded = attribs.delete(:padded)
57
+ padding = attribs.delete(:padding) {nil}
58
+ @padding = validate_padding(coerce_padding(padding)).uniq if padding != nil
59
+ @wide = attribs.delete(:wide) {false}
29
60
  expand!
30
61
  end
31
62
 
32
63
  def column(size, color: nil, **attribs, &block)
33
64
  attribs = size.respond_to?(:keys) ? attribs.merge(size) : attribs.merge(size: size)
34
65
  @columns << Column.new(parent: self, color: color,
35
- context: context, **attribs, &block)
66
+ **attribs, &block)
36
67
  end
37
68
 
69
+ private
70
+ include Padding
38
71
  class Column < EventBase
39
72
  include Mixins::Common
40
- include Mixins::Images
41
73
  include Mixins::Icons
42
74
  include Mixins::Attaches
43
75
  include Mixins::Dialogs
@@ -47,8 +79,13 @@ module Voom
47
79
  include Mixins::Selects
48
80
  include Mixins::Toggles
49
81
  include Mixins::Snackbars
50
-
51
- attr_reader :size, :desktop, :tablet, :phone, :color, :components
82
+ include Mixins::Steppers
83
+ include Mixins::Sliders
84
+ include Mixins::FileInputs
85
+
86
+ include Padding
87
+
88
+ attr_reader :size, :desktop, :tablet, :phone, :color, :components, :padding
52
89
 
53
90
  def initialize(**attribs_, &block)
54
91
  super(type: :column, **attribs_, &block)
@@ -58,8 +95,11 @@ module Voom
58
95
  @phone = attribs.delete(:phone)
59
96
  @color = attribs.delete(:color)
60
97
  @components = []
98
+ padding = attribs.delete(:padding) {nil}
99
+ @padding = validate_padding(coerce_padding(padding)).uniq if padding != nil
61
100
  expand!
62
101
  end
102
+
63
103
  end
64
104
  end
65
105
  end