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,15 +1,16 @@
1
- require_relative 'text_field'
1
+ require 'voom/presenters/dsl/components/text_field'
2
2
 
3
3
  module Voom
4
4
  module Presenters
5
5
  module DSL
6
6
  module Components
7
7
  class TextArea < TextField
8
- attr_reader :rows
8
+ attr_reader :rows, :cols
9
9
 
10
10
  def initialize(**attribs_, &block)
11
11
  super(type: :text_area, **attribs_, &block)
12
- @rows = attribs.delete(:rows) || 3
12
+ @rows = attribs.delete(:rows) || default(:rows)
13
+ @cols = attribs.delete(:cols) || default(:cols) unless full_width
13
14
  expand!
14
15
  end
15
16
  end
@@ -1,4 +1,4 @@
1
- require_relative 'input'
1
+ require 'voom/presenters/dsl/components/input'
2
2
 
3
3
  module Voom
4
4
  module Presenters
@@ -6,13 +6,15 @@ module Voom
6
6
  module Components
7
7
  class TextField < Input
8
8
 
9
- attr_reader :required, :full_width, :password
9
+ attr_reader :required, :full_width, :password, :disabled, :auto_complete
10
10
 
11
11
  def initialize(**attribs_, &block)
12
12
  super(type: :text_field, **attribs_, &block)
13
- @required = attribs.delete(:required)
13
+ @required = attribs.delete(:required){ false }
14
14
  @full_width = attribs.delete(:full_width){ true }
15
- @password = attribs.delete(:password)
15
+ @password = attribs.delete(:password){ false }
16
+ @disabled = attribs.delete(:disabled){ false }
17
+ @auto_complete = attribs.delete(:auto_complete){ true }
16
18
  expand!
17
19
  end
18
20
 
@@ -23,8 +25,7 @@ module Voom
23
25
 
24
26
  def icon(icon=nil, **attribs, &block)
25
27
  return @icon if locked?
26
- @icon = Components::Icon.new(parent: self, icon: icon,
27
- context: context,
28
+ @icon = Components::Icon.new(parent: self, icon: icon, position: attribs.delete(:position){:right},
28
29
  **attribs, &block)
29
30
  end
30
31
 
@@ -47,12 +48,7 @@ module Voom
47
48
  return @error if locked?
48
49
  @error = error
49
50
  end
50
-
51
- def readonly(readonly=nil)
52
- return @readonly if locked?
53
- @readonly = readonly
54
- end
55
-
51
+
56
52
  private
57
53
  def json_regexp(regexp)
58
54
  str = regexp.inspect.
@@ -1,4 +1,4 @@
1
- require_relative 'datetime_base'
1
+ require 'voom/presenters/dsl/components/datetime_base'
2
2
 
3
3
  module Voom
4
4
  module Presenters
@@ -1,5 +1,5 @@
1
- require_relative 'mixins/event'
2
- require_relative 'input'
1
+ require 'voom/presenters/dsl/components/mixins/event'
2
+ require 'voom/presenters/dsl/components/input'
3
3
 
4
4
  module Voom
5
5
  module Presenters
@@ -7,7 +7,6 @@ module Voom
7
7
 
8
8
  def initialize(**attribs_, &block)
9
9
  super(type: :tooltip,
10
- context: context,
11
10
  **attribs_, &block)
12
11
  @position = attribs.delete(:position){ :left }
13
12
  self.text(attribs.delete(:text)) if attribs.key?(:text)
@@ -16,7 +15,7 @@ module Voom
16
15
 
17
16
  def text(*text, **attribs, &block)
18
17
  return @text if locked?
19
- @text = Components::Typography.new(parent: self, type: :text, text: text, context: context, **attribs, &block)
18
+ @text = Components::Typography.new(parent: self, type: :text, text: text, **attribs, &block)
20
19
  end
21
20
  end
22
21
  end
@@ -1,5 +1,5 @@
1
- require_relative 'mixins/event'
2
- require_relative 'mixins/tooltips'
1
+ require 'voom/presenters/dsl/components/mixins/event'
2
+ require 'voom/presenters/dsl/components/mixins/tooltips'
3
3
 
4
4
  module Voom
5
5
  module Presenters
@@ -10,10 +10,10 @@ module Voom
10
10
 
11
11
  attr_accessor :text, :level, :color, :position
12
12
 
13
- def initialize(parent:, **attribs_, &block)
13
+ def initialize(parent:, level: nil, **attribs_, &block)
14
14
  super(type: :text, parent: parent, **attribs_, &block)
15
15
  @text = Array(attribs.delete(:text)||'').flatten.join("\n\n").split("\n\n")
16
- @level = attribs.delete(:level){1}
16
+ @level = level
17
17
  @color = attribs.delete(:color)
18
18
  @position = Array(attribs.delete(:position)).compact
19
19
  expand!
@@ -22,7 +22,6 @@ module Voom
22
22
  def icon(icon=nil, **attribs, &block)
23
23
  return @icon if locked?
24
24
  @icon = Components::Icon.new(parent: self, icon: icon,
25
- context: context,
26
25
  **attribs, &block)
27
26
  end
28
27
  end
@@ -1,5 +1,5 @@
1
- require_relative 'components/base'
2
- require_relative 'components/event_base'
1
+ require 'voom/presenters/dsl/components/base'
2
+ require 'voom/presenters/dsl/components/event_base'
3
3
  Dir[__dir__ + "/components/*.rb"].each {|file| require file }
4
4
 
5
5
  module Voom
@@ -1,4 +1,4 @@
1
- require_relative 'user_interface'
1
+ require 'voom/presenters/dsl/user_interface'
2
2
 
3
3
  module Voom
4
4
  module Presenters
@@ -7,8 +7,9 @@ module Voom
7
7
  # This class is held in the container. When a request to render a UI comes in
8
8
  # It creates a new UserInterface instance, binding it to the router and context of the request
9
9
  class Definition
10
- def initialize(&block)
10
+ def initialize(namespace, &block)
11
11
  @block = block
12
+ @namespace = namespace
12
13
  end
13
14
 
14
15
  def build
@@ -16,13 +17,14 @@ module Voom
16
17
  end
17
18
 
18
19
  def expand(router: , context:{}, &block)
19
- presenter = UserInterface.new(router: router, context: context, &@block)
20
+ presenter = UserInterface.new(router: router, context: context, namespace: @namespace, &@block)
20
21
  yield(presenter) if block
21
22
  presenter.expand_instance
22
23
  end
23
24
 
25
+ # Used by attach
24
26
  def expand_child(parent:, context: {})
25
- presenter = UserInterface.new(parent: parent, context: context, &@block)
27
+ presenter = UserInterface.new(parent: parent, context: context, namespace: @namespace, &@block)
26
28
  presenter.expand_instance(freeze: false)
27
29
  end
28
30
  end
@@ -1,12 +1,13 @@
1
1
  require 'ice_nine'
2
- require_relative 'definer'
3
- require_relative 'components/mixins/common'
4
- require_relative 'components/mixins/helpers'
5
- require_relative 'components/mixins/dialogs'
6
- require_relative 'components/mixins/snackbars'
7
- require_relative 'components/mixins/text_fields'
8
- require_relative 'components/mixins/date_time_fields'
9
- require_relative 'invalid_presenter'
2
+ require 'voom/presenters/dsl/definer'
3
+ require 'voom/presenters/dsl/components/mixins/common'
4
+ require 'voom/presenters/dsl/components/mixins/helpers'
5
+ require 'voom/presenters/dsl/components/mixins/dialogs'
6
+ require 'voom/presenters/dsl/components/mixins/snackbars'
7
+ require 'voom/presenters/dsl/components/mixins/text_fields'
8
+ require 'voom/presenters/dsl/components/mixins/date_time_fields'
9
+ require 'voom/presenters/dsl/components/mixins/attaches'
10
+ require 'voom/presenters/dsl/invalid_presenter'
10
11
 
11
12
  require 'voom/serializer'
12
13
  require 'voom/trace'
@@ -24,16 +25,16 @@ module Voom
24
25
  include Components::Mixins::Icons
25
26
  include Components::Mixins::TextFields
26
27
  include Components::Mixins::DateTimeFields
27
-
28
+ include Components::Mixins::Attaches
28
29
 
29
30
  include Voom::Serializer
30
31
  include Voom::Trace
31
32
 
32
- attr_reader :router, :context, :components
33
- private :context, :router
33
+ attr_reader :router, :context, :components, :namespace
34
+ private :context, :router, :namespace
34
35
  alias params context
35
36
 
36
- def initialize(parent: nil, router: nil, context:, &block)
37
+ def initialize(context:, parent: nil, router: nil, namespace: [], &block)
37
38
  @parent = parent
38
39
  @router = router || @parent&.send(:router)
39
40
  @context = context
@@ -42,26 +43,24 @@ module Voom
42
43
  @drawer = nil
43
44
  @components = []
44
45
  @footer = nil
46
+ @namespace = namespace
45
47
  add_global_helpers
46
48
  end
47
49
 
48
50
  def page(title=nil, **attribs, &block)
49
51
  return @page if locked?
50
- @page = Components::Page.new(parent: self, context: context,
51
- **attribs, &block)
52
+ @page = Components::Page.new(parent: self, **attribs, &block)
52
53
  end
53
54
 
54
55
  def header(title=nil, **attribs, &block)
55
56
  return @header if locked?
56
57
  @header = Components::Header.new(parent: self, title: title,
57
- context: context,
58
58
  **attribs, &block)
59
59
  end
60
60
 
61
61
  def drawer(name=nil, **attribs, &block)
62
62
  return @drawer if locked?
63
63
  @drawer = Components::Drawer.new(parent: self, title: name,
64
- context: context,
65
64
  **attribs, &block)
66
65
  end
67
66
 
@@ -70,17 +69,14 @@ module Voom
70
69
  def footer(**attribs, &block)
71
70
  return @footer if locked?
72
71
  @footer = Components::Footer.new(parent: self,
73
- context: context,
74
72
  **attribs, &block)
75
73
  end
76
74
 
77
- def attach(presenter, **context_, &yield_block)
78
- @_yield_block_ = yield_block
79
- pom = Voom::Presenters::App[presenter].call.expand_child(parent: self, context: context.merge(context_))
75
+ def attach(presenter, **params, &yield_block)
76
+ pom = super
80
77
  @header ||= pom.header
81
78
  @drawer ||= pom.drawer
82
79
  @footer ||= pom.footer
83
- @components += pom.components
84
80
  end
85
81
 
86
82
  # Called by the definition.expand method to evaluate a user interface with a different context
@@ -1,4 +1,4 @@
1
- require_relative 'unprocessable'
1
+ require 'voom/presenters/errors/unprocessable'
2
2
 
3
3
  module Voom
4
4
  module Presenters
@@ -1,7 +1,7 @@
1
- require_relative 'helpers/date'
2
- require_relative 'helpers/time'
3
- require_relative 'helpers/inflector'
4
- require_relative 'helpers/errors'
1
+ require 'voom/presenters/helpers/date'
2
+ require 'voom/presenters/helpers/time'
3
+ require 'voom/presenters/helpers/inflector'
4
+ require 'voom/presenters/helpers/errors'
5
5
 
6
6
  module Voom
7
7
  module Presenters
@@ -10,7 +10,7 @@ module Voom
10
10
  include Helpers::Date
11
11
  include Helpers::Errors
12
12
  if defined?(Rails)
13
- require_relative 'helpers/rails'
13
+ require 'voom/presenters/helpers/rails'
14
14
  include Voom::Presenters::Helpers::Rails
15
15
  end
16
16
  end
@@ -2,10 +2,10 @@ module Voom
2
2
  module Presenters
3
3
  module Helpers
4
4
  module Date
5
- LONG_FORMAT='%m/%d/%Y'
6
- SHORT_FORMAT='%d %b %Y'
5
+ LONG_FORMAT='%B %e, %Y'
6
+ SHORT_FORMAT='%e %b'
7
7
 
8
- def format_date(date, format: '%m/%d/%Y')
8
+ def format_date(date, format: LONG_FORMAT)
9
9
  date ? date.strftime(format) : ''
10
10
  end
11
11
 
@@ -1,6 +1,7 @@
1
1
  if defined?(Rails)
2
- require_relative 'rails/currency'
3
- require_relative 'rails/model_table'
2
+ require 'voom/presenters/helpers/rails/currency'
3
+ require 'voom/presenters/helpers/rails/model_table'
4
+ require 'voom/presenters/namespace'
4
5
 
5
6
  module Voom
6
7
  module Presenters
@@ -9,11 +10,15 @@ if defined?(Rails)
9
10
  include ActionView::Helpers::AssetUrlHelper
10
11
  include Voom::Presenters::Helpers::Rails::Currency
11
12
  include Voom::Presenters::Helpers::Rails::ModelTable
13
+ include Namespace
12
14
  def default_url_options
13
15
  {}
14
16
  end
15
17
 
16
18
  def presenters_path(presenter, **params)
19
+ presenter = _expand_namespace_(presenter, namespace)
20
+ presenter = presenter.gsub(':','/')
21
+
17
22
  path = voom_presenters_web_client_app_path(params)
18
23
  if path.include?('?')
19
24
  path = path.sub('?', "#{presenter}?")
@@ -5,8 +5,9 @@ module Voom
5
5
  module ModelTable
6
6
  # Build a a table from a Rails model
7
7
  def table_for(query_,
8
- empty_icon: nil,
8
+ empty_icon: 'far fa-folder-open fa-rotate-180',
9
9
  except: [:id, :created_at, :updated_at],
10
+ timezone: nil, # The timezone to covnert _at and _on values
10
11
  selectable: false, &block)
11
12
  row1 = query_.first
12
13
  if row1
@@ -16,27 +17,34 @@ module Voom
16
17
 
17
18
  query_.each do |item_|
18
19
  row do
19
- _table_row_(__columns__, block, except, item_)
20
+ _table_row_(__columns__, block, except, item_, timezone: timezone)
20
21
  end
21
22
  end
22
23
  end
23
24
  else
24
- body "You have no #{query_.arel_table.name.pluralize}", level: 2
25
- icon empty_icon, size: '10rem' if empty_icon
25
+ icon empty_icon, size: '6rem' if empty_icon
26
+ body "You have no #{query_.arel_table.name.pluralize.humanize}"
26
27
  end
27
28
  end
28
29
 
29
30
 
30
31
  private
31
- def _table_row_(__columns__, block, except, item_)
32
+ def _table_row_(__columns__, block, except, item_, timezone: nil)
32
33
  __columns__.each do |col|
33
34
  next if except.include?(col.name.to_sym)
34
- column item_.send(col.name.to_sym) do
35
+ value = format_value(col.name,item_.send(col.name.to_sym), timezone: timezone)
36
+ column value do
35
37
  self.instance_exec(item_, col.name.to_sym, &block) if block
36
38
  end
37
39
  end
38
40
  end
39
41
 
42
+ def format_value(col_name, value, timezone:)
43
+ return format_time_long(value, timezone: timezone) if timezone &&
44
+ col_name.ends_with?('_at') || col_name.ends_with?('_on')
45
+ value
46
+ end
47
+
40
48
  def _table_header_(__columns__, except)
41
49
  header do
42
50
  __columns__.each do |col|
@@ -1,8 +1,14 @@
1
+ require 'voom/presenters/namespace'
2
+
1
3
  module Voom
2
4
  module Presenters
3
5
  module Helpers
4
6
  module Route
7
+ include Namespace
8
+
5
9
  def presenters_path(presenter, **params)
10
+ presenter = _expand_namespace_(presenter, namespace)
11
+ presenter = presenter.gsub(':','/')
6
12
  router.url(render: presenter, context: params)
7
13
  end
8
14
  end
@@ -7,7 +7,7 @@ module Voom
7
7
  LONG_FORMAT='%m/%d/%Y %I:%M:%S %p %Z'
8
8
  SHORT_FORMAT='%d %b %H:%M %Z'
9
9
 
10
- def format_time(time, format: '%m/%d/%Y %I:%M:%S %p %Z', timezone: nil)
10
+ def format_time(time, format: LONG_FORMAT, timezone: nil)
11
11
  return '' unless time
12
12
  time = time.in_time_zone(timezone) if timezone
13
13
  time.strftime(format)
@@ -0,0 +1,12 @@
1
+ module Voom
2
+ module Presenters
3
+ module Namespace
4
+ def _expand_namespace_(presenter, namespace)
5
+ presenter = presenter.to_s
6
+ return presenter if presenter.split(':').size > 1
7
+ return presenter if presenter.split('/').size > 1
8
+ namespace.any? ? namespace.join(':')+':'+presenter : presenter
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,49 +1,70 @@
1
1
  include Voom::Trace
2
2
  trace {"Loading Presenters Settings"}
3
- require_relative 'helpers/route'
3
+ require 'voom/presenters/helpers/route'
4
4
 
5
- module Voom
6
- module Presenters
7
- class Settings
8
- extend Dry::Configurable
9
- setting :presenters do
10
- setting :root, []
11
- # You can add helpers that will automatically be included
12
- # For example:
13
- # For example:
14
- # Voom::Presenters::Settings.configure do |config|
15
- # config.presenters.helpers << YourHelperModule # Passing a module
16
- # config.presenters.helpers << &->{ def foo; :foo; end } # Passing a block
17
- # end
18
- setting :helpers, [Voom::Presenters::Helpers::Route]
19
- setting :deep_freeze, true
20
- setting :id_generator, ->(node) {"id-#{SecureRandom.hex}"}
21
- setting :web_client do
22
- # Add lambda's to modify the context for the presenters
5
+ unless defined?(Voom::Presenters::Settings)
6
+ module Voom
7
+ module Presenters
8
+ class Settings
9
+ extend Dry::Configurable
10
+ setting :presenters do
11
+ setting :root, []
12
+ # You can add helpers that will automatically be included
13
+ # For example:
23
14
  # For example:
24
15
  # Voom::Presenters::Settings.configure do |config|
25
- # config.presenters.web_client.prepare_context << ->(context, session, _env){
26
- # identity_id = session[:aaa_identity]
27
- # context.merge(aaa_identity: identity_id)
28
- # }
16
+ # config.presenters.helpers << YourHelperModule # Passing a module
17
+ # config.presenters.helpers << &->{ def foo; :foo; end } # Passing a block
29
18
  # end
30
- setting :prepare_context, []
31
- end
32
- setting :components do
33
- setting :defaults do
34
- setting :datetime do
35
- setting :format, 'F j, Y h:i K'
36
- setting :time_24hr, false
37
- end
38
- setting :date do
39
- setting :format, 'F j, Y'
40
- end
41
- setting :time do
42
- setting :format, 'h:i K'
43
- setting :time_24hr, false
19
+ setting :helpers, [Voom::Presenters::Helpers::Route]
20
+ setting :deep_freeze, true
21
+ setting :id_generator, ->(node) {"id-#{SecureRandom.hex}"}
22
+ setting :web_client do
23
+ # Add lambda's to modify the context for the presenters
24
+ # For example:
25
+ # Voom::Presenters::Settings.configure do |config|
26
+ # config.presenters.web_client.prepare_context << ->(context, session, _env){
27
+ # identity_id = session[:aaa_identity]
28
+ # context.merge(aaa_identity: identity_id)
29
+ # }
30
+ # end
31
+ setting :prepare_context, []
32
+ setting :custom_css, 'public/presenters/*.css'
33
+ end
34
+ setting :components do
35
+ setting :defaults do
36
+ setting :datetime do
37
+ setting :format, 'M j, y h:i K'
38
+ setting :time_24hr, false
39
+ end
40
+ setting :date do
41
+ setting :format, 'F j, Y'
42
+ end
43
+ setting :time do
44
+ setting :format, 'h:i K'
45
+ setting :time_24hr, false
46
+ end
47
+ setting :text_area do
48
+ setting :rows, 3
49
+ setting :cols, 80
50
+ end
51
+ # Typography
52
+ setting :headline do
53
+ setting :level, 5
54
+ end
55
+ setting :title do
56
+ setting :level, 6
57
+ end
58
+ setting :rich_text_area do
59
+ setting :rows, 25
60
+ end
44
61
  end
45
62
  end
46
63
  end
64
+
65
+ def self.default(type, key)
66
+ config.presenters.components.defaults&.public_send(type)&.public_send(key)
67
+ end
47
68
  end
48
69
  end
49
70
  end