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
@@ -7,7 +7,6 @@ module Voom
7
7
 
8
8
  def initialize(**attribs_, &block)
9
9
  super(type: :page,
10
- context: context,
11
10
  **attribs_, &block)
12
11
  expand!
13
12
  end
@@ -1,4 +1,4 @@
1
- require_relative 'toggle_base'
1
+ require 'voom/presenters/dsl/components/toggle_base'
2
2
  module Voom
3
3
  module Presenters
4
4
  module DSL
@@ -0,0 +1,26 @@
1
+ require 'voom/presenters/dsl/components/text_field'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class RichTextArea < TextField
8
+ attr_reader :placeholder
9
+
10
+ def initialize(**attribs_, &block)
11
+ super(type: :rich_text_area, **attribs_, &block)
12
+ @rows = attribs.delete(:rows) || default(:rows)
13
+ @placeholder = attribs.delete(:placeholder)
14
+ expand!
15
+ end
16
+
17
+ def height
18
+ return @height if locked?
19
+ @height = "#{@rows * 12}px"
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
26
+ 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
@@ -11,7 +11,7 @@ module Voom
11
11
  def initialize(**attribs_, &block)
12
12
  super(type: :select, **attribs_, &block)
13
13
  @required = attribs.delete(:required)
14
- @full_width = attribs.delete(:full_width) || true
14
+ @full_width = attribs.delete(:full_width){ true }
15
15
  @options = []
16
16
  expand!
17
17
  end
@@ -24,13 +24,12 @@ module Voom
24
24
  def icon(icon=nil, **attribs, &block)
25
25
  return @icon if locked?
26
26
  @icon = Components::Icon.new(parent: self, icon: icon,
27
- context: context,
28
27
  **attribs, &block)
29
28
  end
30
29
 
31
- def option(**attribs, &block)
30
+ def option(text=nil, **attribs, &block)
32
31
  @options << Option.new(parent: self,
33
- context: context,
32
+ text: text,
34
33
  **attribs, &block)
35
34
  end
36
35
 
@@ -0,0 +1,39 @@
1
+ require 'voom/presenters/dsl/components/mixins/event'
2
+ require 'voom/presenters/dsl/components/mixins/tooltips'
3
+
4
+ module Voom
5
+ module Presenters
6
+ module DSL
7
+ module Components
8
+ class Slider < EventBase
9
+ include Mixins::Tooltips
10
+ attr_reader :name, :value_min, :value_max, :step, :show_tracker_marks, :discrete
11
+
12
+ def initialize(**attribs_, &block)
13
+ super(type: :slider, **attribs_, &block)
14
+ @name = attribs.delete(:name)
15
+ @value_min = attribs.delete(:value_min){0}
16
+ @value_max = attribs.delete(:value_max){100}
17
+ @step = attribs.delete(:step){nil}
18
+ @discrete = attribs.delete(:discrete){true}
19
+ @show_tracker_marks = attribs.delete(:show_tracker_marks){false}
20
+ @show_tracker_marks = false unless discrete
21
+ expand!
22
+ end
23
+
24
+ def label(text=nil)
25
+ return @label if locked?
26
+ @label = text
27
+ end
28
+
29
+ def value(value=nil)
30
+ return @value if locked?
31
+ @value = value
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
@@ -11,9 +11,9 @@ module Voom
11
11
  expand!
12
12
  end
13
13
 
14
- def action(text=nil, **params, &block)
14
+ def action(text=nil, &block)
15
15
  return @action if locked?
16
- @action = Action.new(parent: self, text: text, context: params, &block)
16
+ @action = Action.new(parent: self, text: text, &block)
17
17
  end
18
18
 
19
19
  class Action < EventBase
@@ -0,0 +1,106 @@
1
+ require 'voom/presenters/helpers/errors'
2
+ require 'voom/presenters/dsl/components/button'
3
+ require 'voom/presenters/dsl/components/content'
4
+
5
+ module Voom
6
+ module Presenters
7
+ module DSL
8
+ module Components
9
+ class Stepper < Base
10
+ attr_reader :steps, :orientation, :linear
11
+ VALID_ORIENTATIONS = [:vertical, :horizontal]
12
+
13
+ def initialize(**attribs_, &block)
14
+ super(type: :stepper, **attribs_, &block)
15
+ @orientation = attribs.delete(:orientation) {:horizontal}
16
+ raise_parameter_validation "Invalid Orientation Type specified: #{orientation}" unless VALID_ORIENTATIONS.include? orientation
17
+ @linear = attribs.delete(:linear) {true}
18
+ @steps = []
19
+ expand!
20
+ end
21
+
22
+ def step(text = nil, **attribs, &block)
23
+ @steps << Step.new(parent: self, text: text, **attribs, &block)
24
+ end
25
+
26
+ class Step < Components::Content
27
+ attr_accessor :components, :editable, :optional, :selected
28
+
29
+ def initialize(**attribs_, &block)
30
+ super(type: :step, **attribs_, &block)
31
+ @editable = attribs.delete(:editable) {true}
32
+ @optional = attribs.delete(:optional) {false}
33
+ @selected = attribs.delete(:selected) {false}
34
+ @components = []
35
+ expand!
36
+ end
37
+
38
+ def label(text = nil)
39
+ return @label if locked?
40
+ @label = text
41
+ end
42
+
43
+ def actions(**attribs, &block)
44
+ return @actions if locked?
45
+ @actions = Actions.new(parent: self,
46
+ **attribs, &block)
47
+ end
48
+
49
+ class Actions < Base
50
+ attr_accessor :buttons
51
+
52
+ def initialize(**attribs_, &block)
53
+ super(type: :action, **attribs_, &block)
54
+ @buttons = []
55
+ expand!
56
+ end
57
+
58
+ def continue(text = 'Continue', **options, &block)
59
+ button(text, :next, **options, &block)
60
+ end
61
+ alias :next :continue
62
+
63
+ def back(text = 'Back', **options, &block)
64
+ button(text, :back, **options, &block)
65
+ end
66
+
67
+ def skip(text = 'Skip', **options, &block)
68
+ button(text,:skip, **options, &block)
69
+ end
70
+
71
+ def cancel(text = 'Cancel', **options, &block)
72
+ button(text,:cancel, **options, &block)
73
+ end
74
+
75
+ private
76
+
77
+ def button(text = nil, stepper_type, **options, &block)
78
+ btn = StepperButton.new(stepper_type, parent: self, text: text,
79
+ **options, &block)
80
+
81
+ btn.instance_eval do
82
+ event :click do
83
+ stepper stepper_type
84
+ end
85
+ end
86
+ @buttons << btn
87
+ end
88
+
89
+ class StepperButton < Components::Button
90
+ attr_reader :stepper_type
91
+ def initialize(stepper_type, **attribs_, &block)
92
+ @stepper_type = stepper_type
93
+ super(**attribs_, &block)
94
+ end
95
+ end
96
+
97
+
98
+ end
99
+
100
+ end
101
+
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -1,4 +1,4 @@
1
- require_relative 'toggle_base'
1
+ require 'voom/presenters/dsl/components/toggle_base'
2
2
 
3
3
  module Voom
4
4
  module Presenters
@@ -0,0 +1,53 @@
1
+ require 'voom/presenters/helpers/errors'
2
+ require 'voom/presenters/dsl/components/mixins/common'
3
+
4
+ module Voom
5
+ module Presenters
6
+ module DSL
7
+ module Components
8
+ class TabBar < Base
9
+ attr_reader :tabs
10
+
11
+ def initialize(**attribs_, &block)
12
+ super(type: :tab_bar, **attribs_, &block)
13
+ @tabs = []
14
+ expand!
15
+ end
16
+
17
+ def tab(label, **attribs, &block)
18
+ @tabs << Tab.new(parent: self, label: label, **attribs, &block)
19
+ end
20
+
21
+ class Tab < EventBase
22
+ include Mixins::Common
23
+
24
+ attr_accessor :components, :label, :icon, :stacked, :selected
25
+
26
+ def initialize(**attribs_, &block)
27
+ super(type: :tab, **attribs_, &block)
28
+ @label = attribs.delete(:label){nil}
29
+ @icon = attribs.delete(:icon) {nil}
30
+ @stacked = attribs.delete(:stacked) {false}
31
+ @selected = attribs.delete(:selected) {false}
32
+ @components = []
33
+ expand!
34
+ end
35
+
36
+ def label(text = nil)
37
+ return @label if locked?
38
+ @label = text
39
+ end
40
+
41
+ def icon(icon = nil, **attribs, &block)
42
+ return @icon if locked?
43
+ @icon = Components::Icon.new(parent: self, icon: icon,
44
+ **attribs, &block)
45
+ end
46
+
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,9 +1,9 @@
1
- require_relative 'mixins/common'
2
- require_relative 'mixins/event'
3
- require_relative 'mixins/tooltips'
4
- require_relative 'mixins/chips'
5
- require_relative 'mixins/selects'
6
- require_relative 'mixins/icons'
1
+ require 'voom/presenters/dsl/components/mixins/common'
2
+ require 'voom/presenters/dsl/components/mixins/event'
3
+ require 'voom/presenters/dsl/components/mixins/tooltips'
4
+ require 'voom/presenters/dsl/components/mixins/chips'
5
+ require 'voom/presenters/dsl/components/mixins/selects'
6
+ require 'voom/presenters/dsl/components/mixins/icons'
7
7
 
8
8
  module Voom
9
9
  module Presenters
@@ -22,39 +22,45 @@ module Voom
22
22
  def header(**attribs, &block)
23
23
  return @header if locked?
24
24
  @header = Row.new(parent: self, type: :header,
25
- context: context,
26
25
  **attribs, &block)
27
26
  end
28
27
 
29
28
  def row(**attribs, &block)
30
29
  @rows << Row.new(parent: self, type: :row,
31
- context: context,
32
30
  **attribs, &block)
33
31
  end
34
32
 
35
- # WIP
36
- # def pagination(**attribs, &block)
37
- # @pagination = Pagination.new(parent: self,
38
- # context: context,
39
- # **attribs, &block)
40
- # end
33
+ def pagination(**attribs, &block)
34
+ return @pagination if locked?
35
+ @pagination = Pagination.new(parent: self,
36
+ **attribs, &block)
37
+ end
41
38
 
42
39
  class Row < Base
43
- attr_accessor :columns, :color
40
+ attr_accessor :columns, :color, :checkbox
44
41
 
45
42
  def initialize(type:, **attribs_, &block)
46
43
  super(type: type, **attribs_, &block)
47
44
  @columns = []
48
45
  @color = attribs.delete(:color)
46
+ self.checkbox(attribs.slice(:name, :value, :checked)) if @parent.selectable
49
47
  expand!
50
48
  end
51
49
 
52
50
  def column(value=nil, **attribs, &block)
53
51
  @columns << Column.new(parent: self, value: value,
54
- context: context,
55
52
  **attribs, &block)
56
53
  end
57
54
 
55
+ def checkbox(**attributes, &block)
56
+ return @checkbox if locked?
57
+ field_name = @type == :header ? 'all' : "#{attributes.delete(:name)}[]"
58
+ @checkbox = Components::Checkbox.new(parent: self,
59
+ name: field_name,
60
+ **attributes,
61
+ &block)
62
+ end
63
+
58
64
  class Column < EventBase
59
65
  include Mixins::Tooltips
60
66
  include Mixins::Chips
@@ -75,26 +81,92 @@ module Voom
75
81
 
76
82
  def value(*value, **attribs, &block)
77
83
  return @value if locked?
78
- @value = Components::Typography.new(parent: self, type: :text, text: value, context: context, **attribs, &block)
84
+ @numeric = numeric?(*value) if value.size ==1
85
+ @value = Components::Typography.new(parent: self, type: :text, text: value, **attribs, &block)
79
86
  end
80
87
 
81
88
  private
82
89
  def numeric?(value)
83
90
  return true if value.is_a? Numeric
84
- (value.to_s.sub(/\D/, '') =~ /^[-+]?[0-9]*\.?[0-9]+$/) != nil
91
+ (value.to_s.strip.sub(/\D/, '') =~ /^[\$]?[-+]?(,?[0-9])*\.?[0-9]+$/) != nil
85
92
  end
86
93
  end
87
94
 
88
95
  end
89
- # class Pagination < Base
90
- # attr_accessor :page_size
91
- #
92
- # def initialize(**attribs_, &block)
93
- # super(type: :pagination, **attribs_, &block)
94
- # @page_size = attribs.delete(:page_size)
95
- # expand!
96
- # end
97
- # end
96
+
97
+ class Pagination < Base
98
+ attr_accessor :page_size, :total, :current_page, :per_page, :previous_button, :next_button
99
+
100
+ def initialize(**attribs_, &block)
101
+ super(type: :pagination, **attribs_, &block)
102
+ @page_size = attribs.delete(:page_size){10}.to_i
103
+ @page_size_options = attribs.delete(:page_size_options){[10,20,30,40,50,100]}
104
+ @total = attribs.delete(:total)
105
+ @current_page = attribs.delete(:current_page){ 1 }.to_i
106
+ @replace_id = attribs.delete(:replace_id)
107
+ @replace_presenter = attribs.delete(:replace_presenter)
108
+ previous_button_icon
109
+ next_button_icon
110
+ per_page_select
111
+ range
112
+ expand!
113
+ end
114
+
115
+ def range
116
+ return @range if locked?
117
+ end_range = @total - (@total - @page_size * @current_page.to_i)
118
+ start_range = end_range - @page_size + 1
119
+ @range = [start_range, end_range]
120
+ end
121
+
122
+ def previous_button_icon(icon = :keyboard_arrow_left)
123
+ return @previous_button if locked?
124
+ @previous_button = button(icon, [1, @current_page-1].max)
125
+ end
126
+
127
+ def next_button_icon(icon = :keyboard_arrow_right)
128
+ return @next_button if locked?
129
+ @next_button = button(icon, [total_pages, @current_page+1].min)
130
+ end
131
+
132
+ def per_page_select
133
+ return @per_page if locked?
134
+ @per_page = select(@page_size_options, @page_size, @total)
135
+ end
136
+
137
+ private
138
+
139
+ def total_pages
140
+ (@total.to_f / @page_size.to_f).ceil
141
+ end
142
+
143
+ def button(icon_name, page, replace_id = @replace_id, replace_presenter = @replace_presenter)
144
+ __attribs__ = attribs.merge({page: page, page_size: @page_size})
145
+ Components::Icon.new(parent: self, icon: icon_name) do
146
+ event :click do
147
+ replaces replace_id, replace_presenter, __attribs__
148
+ end
149
+ end
150
+ end
151
+
152
+ def select(options, current_option, total_records, replace_id = @replace_id, replace_presenter = @replace_presenter)
153
+ __attribs__ = attribs.reject{|key,val| [:page_size, :page].include? key }
154
+ Components::Select.new(parent: self, name: :page_size, full_width: false) do
155
+ options.each do |num|
156
+ option selected: (num == current_option) do
157
+ text num
158
+ value num
159
+ end
160
+ break if num > total_records
161
+ end
162
+ event :change do
163
+ replaces replace_id, replace_presenter, __attribs__.merge(page_size: context[:page_size])
164
+ end
165
+ end
166
+ end
167
+
168
+ end
169
+
98
170
  end
99
171
  end
100
172
  end