voom-presenters 0.1.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 (313) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +54 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +11 -0
  5. data/Gemfile.lock +104 -0
  6. data/LICENSE +21 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +45 -0
  9. data/ROADMAP.md +21 -0
  10. data/Rakefile +6 -0
  11. data/app/demo/component_status.pom +76 -0
  12. data/app/demo/components.pom +19 -0
  13. data/app/demo/components/badges.pom +25 -0
  14. data/app/demo/components/buttons.pom +51 -0
  15. data/app/demo/components/cards.pom +79 -0
  16. data/app/demo/components/chips.pom +91 -0
  17. data/app/demo/components/dialogs.pom +27 -0
  18. data/app/demo/components/drawers.pom +34 -0
  19. data/app/demo/components/expansion_panels.pom +21 -0
  20. data/app/demo/components/fabs-mini.pom +18 -0
  21. data/app/demo/components/fabs.pom +16 -0
  22. data/app/demo/components/footers.pom +36 -0
  23. data/app/demo/components/forms.pom +30 -0
  24. data/app/demo/components/headers.pom +37 -0
  25. data/app/demo/components/hidden_fields.pom +20 -0
  26. data/app/demo/components/icons.pom +94 -0
  27. data/app/demo/components/layouts.pom +44 -0
  28. data/app/demo/components/lists.pom +124 -0
  29. data/app/demo/components/menus.pom +43 -0
  30. data/app/demo/components/nav/drawer.pom +5 -0
  31. data/app/demo/components/nav/menu.pom +15 -0
  32. data/app/demo/components/selects.pom +30 -0
  33. data/app/demo/components/snackbar.pom +24 -0
  34. data/app/demo/components/snackbar_attached.pom +6 -0
  35. data/app/demo/components/tables.pom +39 -0
  36. data/app/demo/components/text_areas.pom +19 -0
  37. data/app/demo/components/text_fields.pom +57 -0
  38. data/app/demo/components/toggles.pom +29 -0
  39. data/app/demo/components/tooltips.pom +120 -0
  40. data/app/demo/event/actions.rb +86 -0
  41. data/app/demo/event/actions/dialog/show_dialog.pom +9 -0
  42. data/app/demo/event/actions/dialog/trigger.pom +86 -0
  43. data/app/demo/event/actions/nav/drawer.pom +5 -0
  44. data/app/demo/event/actions/nav/menu.pom +19 -0
  45. data/app/demo/event/autocomplete.pom +27 -0
  46. data/app/demo/event/field_level.pom +22 -0
  47. data/app/demo/event/form_level.pom +26 -0
  48. data/app/demo/event/nav/drawer.pom +5 -0
  49. data/app/demo/event/nav/menu.pom +14 -0
  50. data/app/demo/event/new_text.pom +6 -0
  51. data/app/demo/events.pom +98 -0
  52. data/app/demo/helpers/indented_grid.rb +14 -0
  53. data/app/demo/index.pom +19 -0
  54. data/app/demo/markdown.pom +73 -0
  55. data/app/demo/nav/top_nav.pom +42 -0
  56. data/app/demo/shared/code.pom +20 -0
  57. data/app/demo/shared/context_list.pom +29 -0
  58. data/app/demo/shared/debug.pom +17 -0
  59. data/app/demo/styles.pom +26 -0
  60. data/bin/console +22 -0
  61. data/bin/setup +8 -0
  62. data/component-status.yml +219 -0
  63. data/config.ru +21 -0
  64. data/lib/voom-presenters.rb +9 -0
  65. data/lib/voom/container_methods.rb +40 -0
  66. data/lib/voom/logger_methods.rb +11 -0
  67. data/lib/voom/parameters.rb +73 -0
  68. data/lib/voom/presenters-engine.rb +40 -0
  69. data/lib/voom/presenters.rb +13 -0
  70. data/lib/voom/presenters/api/app.rb +53 -0
  71. data/lib/voom/presenters/api/router.rb +94 -0
  72. data/lib/voom/presenters/app.rb +55 -0
  73. data/lib/voom/presenters/container_item.rb +16 -0
  74. data/lib/voom/presenters/demo/echo.rb +29 -0
  75. data/lib/voom/presenters/demo/search-terms.yml +50 -0
  76. data/lib/voom/presenters/demo/search.rb +29 -0
  77. data/lib/voom/presenters/dsl.rb +60 -0
  78. data/lib/voom/presenters/dsl/components/action.rb +35 -0
  79. data/lib/voom/presenters/dsl/components/avatar.rb +27 -0
  80. data/lib/voom/presenters/dsl/components/badge.rb +21 -0
  81. data/lib/voom/presenters/dsl/components/base.rb +78 -0
  82. data/lib/voom/presenters/dsl/components/button.rb +49 -0
  83. data/lib/voom/presenters/dsl/components/card.rb +119 -0
  84. data/lib/voom/presenters/dsl/components/checkbox.rb +16 -0
  85. data/lib/voom/presenters/dsl/components/chip.rb +48 -0
  86. data/lib/voom/presenters/dsl/components/content.rb +33 -0
  87. data/lib/voom/presenters/dsl/components/date_time.rb +17 -0
  88. data/lib/voom/presenters/dsl/components/dialog.rb +50 -0
  89. data/lib/voom/presenters/dsl/components/drawer.rb +40 -0
  90. data/lib/voom/presenters/dsl/components/event.rb +101 -0
  91. data/lib/voom/presenters/dsl/components/event_base.rb +20 -0
  92. data/lib/voom/presenters/dsl/components/expansion_panel.rb +46 -0
  93. data/lib/voom/presenters/dsl/components/footer.rb +25 -0
  94. data/lib/voom/presenters/dsl/components/form.rb +42 -0
  95. data/lib/voom/presenters/dsl/components/grid.rb +64 -0
  96. data/lib/voom/presenters/dsl/components/header.rb +33 -0
  97. data/lib/voom/presenters/dsl/components/hidden_field.rb +25 -0
  98. data/lib/voom/presenters/dsl/components/icon.rb +21 -0
  99. data/lib/voom/presenters/dsl/components/icon_base.rb +24 -0
  100. data/lib/voom/presenters/dsl/components/icon_toggle.rb +21 -0
  101. data/lib/voom/presenters/dsl/components/image.rb +36 -0
  102. data/lib/voom/presenters/dsl/components/input.rb +19 -0
  103. data/lib/voom/presenters/dsl/components/list.rb +39 -0
  104. data/lib/voom/presenters/dsl/components/lists/action.rb +72 -0
  105. data/lib/voom/presenters/dsl/components/lists/line.rb +83 -0
  106. data/lib/voom/presenters/dsl/components/lists/separator.rb +16 -0
  107. data/lib/voom/presenters/dsl/components/menu.rb +66 -0
  108. data/lib/voom/presenters/dsl/components/mixins/append.rb +20 -0
  109. data/lib/voom/presenters/dsl/components/mixins/attaches.rb +18 -0
  110. data/lib/voom/presenters/dsl/components/mixins/avatar.rb +18 -0
  111. data/lib/voom/presenters/dsl/components/mixins/buttons.rb +15 -0
  112. data/lib/voom/presenters/dsl/components/mixins/chips.rb +21 -0
  113. data/lib/voom/presenters/dsl/components/mixins/common.rb +50 -0
  114. data/lib/voom/presenters/dsl/components/mixins/content.rb +15 -0
  115. data/lib/voom/presenters/dsl/components/mixins/dialogs.rb +19 -0
  116. data/lib/voom/presenters/dsl/components/mixins/event.rb +19 -0
  117. data/lib/voom/presenters/dsl/components/mixins/expansion_panels.rb +15 -0
  118. data/lib/voom/presenters/dsl/components/mixins/grids.rb +15 -0
  119. data/lib/voom/presenters/dsl/components/mixins/helpers.rb +20 -0
  120. data/lib/voom/presenters/dsl/components/mixins/icons.rb +17 -0
  121. data/lib/voom/presenters/dsl/components/mixins/images.rb +15 -0
  122. data/lib/voom/presenters/dsl/components/mixins/menus.rb +15 -0
  123. data/lib/voom/presenters/dsl/components/mixins/selects.rb +17 -0
  124. data/lib/voom/presenters/dsl/components/mixins/snackbars.rb +18 -0
  125. data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +35 -0
  126. data/lib/voom/presenters/dsl/components/mixins/toggles.rb +40 -0
  127. data/lib/voom/presenters/dsl/components/mixins/tooltips.rb +18 -0
  128. data/lib/voom/presenters/dsl/components/mixins/typography.rb +37 -0
  129. data/lib/voom/presenters/dsl/components/page.rb +29 -0
  130. data/lib/voom/presenters/dsl/components/radio_button.rb +14 -0
  131. data/lib/voom/presenters/dsl/components/select.rb +64 -0
  132. data/lib/voom/presenters/dsl/components/snackbar.rb +32 -0
  133. data/lib/voom/presenters/dsl/components/switch.rb +14 -0
  134. data/lib/voom/presenters/dsl/components/table.rb +102 -0
  135. data/lib/voom/presenters/dsl/components/text_area.rb +20 -0
  136. data/lib/voom/presenters/dsl/components/text_field.rb +74 -0
  137. data/lib/voom/presenters/dsl/components/toggle_base.rb +26 -0
  138. data/lib/voom/presenters/dsl/components/tooltip.rb +25 -0
  139. data/lib/voom/presenters/dsl/components/typography.rb +25 -0
  140. data/lib/voom/presenters/dsl/definer.rb +13 -0
  141. data/lib/voom/presenters/dsl/definition.rb +31 -0
  142. data/lib/voom/presenters/dsl/invalid_presenter.rb +8 -0
  143. data/lib/voom/presenters/dsl/lockable.rb +15 -0
  144. data/lib/voom/presenters/dsl/user_interface.rb +135 -0
  145. data/lib/voom/presenters/errors/parameter_validation.rb +10 -0
  146. data/lib/voom/presenters/errors/unprocessable.rb +8 -0
  147. data/lib/voom/presenters/helpers.rb +18 -0
  148. data/lib/voom/presenters/helpers/currency.rb +14 -0
  149. data/lib/voom/presenters/helpers/date.rb +22 -0
  150. data/lib/voom/presenters/helpers/errors.rb +11 -0
  151. data/lib/voom/presenters/helpers/inflector.rb +16 -0
  152. data/lib/voom/presenters/helpers/rails.rb +60 -0
  153. data/lib/voom/presenters/helpers/route.rb +11 -0
  154. data/lib/voom/presenters/helpers/time.rb +27 -0
  155. data/lib/voom/presenters/settings.rb +35 -0
  156. data/lib/voom/presenters/version.rb +5 -0
  157. data/lib/voom/presenters/web_client/app.rb +128 -0
  158. data/lib/voom/presenters/web_client/markdown_render.rb +16 -0
  159. data/lib/voom/presenters/web_client/router.rb +96 -0
  160. data/lib/voom/serializer.rb +43 -0
  161. data/lib/voom/symbol/to_str.rb +29 -0
  162. data/lib/voom/trace.rb +19 -0
  163. data/presenters.gemspec +37 -0
  164. data/public/.gitignore +2 -0
  165. data/public/bundle.css +11413 -0
  166. data/public/bundle.js +16456 -0
  167. data/public/dialog-polyfill.js +738 -0
  168. data/public/favicon.ico +0 -0
  169. data/public/img/demo/dog.png +0 -0
  170. data/public/img/demo/image_card.jpg +0 -0
  171. data/public/img/demo/rx.png +0 -0
  172. data/public/img/demo/welcome_card.jpg +0 -0
  173. data/public/img/settings/blue.png +0 -0
  174. data/public/img/settings/green.png +0 -0
  175. data/public/img/settings/orange.png +0 -0
  176. data/public/img/settings/purple.png +0 -0
  177. data/public/img/settings/red.png +0 -0
  178. data/public/img/settings/teal.png +0 -0
  179. data/public/img/settings/white.png +0 -0
  180. data/public/img/settings/yellow.png +0 -0
  181. data/public/scripts.js +289 -0
  182. data/public/style-bundle.js +73 -0
  183. data/public/styles.css +16 -0
  184. data/views/mdc/.gitignore +1 -0
  185. data/views/mdc/assets/js/app.js +10 -0
  186. data/views/mdc/assets/js/components/base-component.js +5 -0
  187. data/views/mdc/assets/js/components/button.js +15 -0
  188. data/views/mdc/assets/js/components/cards.js +3 -0
  189. data/views/mdc/assets/js/components/checkboxes.js +15 -0
  190. data/views/mdc/assets/js/components/chips.js +12 -0
  191. data/views/mdc/assets/js/components/date-time.js +6 -0
  192. data/views/mdc/assets/js/components/dialogs.js +32 -0
  193. data/views/mdc/assets/js/components/events.js +151 -0
  194. data/views/mdc/assets/js/components/events/autocomplete.js +96 -0
  195. data/views/mdc/assets/js/components/events/base.js +41 -0
  196. data/views/mdc/assets/js/components/events/dialog.js +25 -0
  197. data/views/mdc/assets/js/components/events/errors.js +142 -0
  198. data/views/mdc/assets/js/components/events/loads.js +22 -0
  199. data/views/mdc/assets/js/components/events/navigates.js +17 -0
  200. data/views/mdc/assets/js/components/events/posts.js +99 -0
  201. data/views/mdc/assets/js/components/events/replaces.js +82 -0
  202. data/views/mdc/assets/js/components/events/selects.js +28 -0
  203. data/views/mdc/assets/js/components/events/snackbar.js +23 -0
  204. data/views/mdc/assets/js/components/events/toggle_visiblity.js +19 -0
  205. data/views/mdc/assets/js/components/forms.js +57 -0
  206. data/views/mdc/assets/js/components/icon-toggles.js +21 -0
  207. data/views/mdc/assets/js/components/initialize.js +34 -0
  208. data/views/mdc/assets/js/components/lists.js +4 -0
  209. data/views/mdc/assets/js/components/menus.js +31 -0
  210. data/views/mdc/assets/js/components/mixins/event-handler.js +13 -0
  211. data/views/mdc/assets/js/components/selects.js +45 -0
  212. data/views/mdc/assets/js/components/snackbar.js +32 -0
  213. data/views/mdc/assets/js/components/text-fields.js +77 -0
  214. data/views/mdc/assets/js/dialog-polyfill.js +738 -0
  215. data/views/mdc/assets/js/material.js +3996 -0
  216. data/views/mdc/assets/js/utils/urls.js +54 -0
  217. data/views/mdc/assets/scss/app.scss +31 -0
  218. data/views/mdc/assets/scss/components/avatar.scss +41 -0
  219. data/views/mdc/assets/scss/components/button.scss +47 -0
  220. data/views/mdc/assets/scss/components/card.scss +54 -0
  221. data/views/mdc/assets/scss/components/checkbox.scss +5 -0
  222. data/views/mdc/assets/scss/components/chip.scss +30 -0
  223. data/views/mdc/assets/scss/components/datetime.scss +0 -0
  224. data/views/mdc/assets/scss/components/dialog.scss +3 -0
  225. data/views/mdc/assets/scss/components/expansion-panel.scss +153 -0
  226. data/views/mdc/assets/scss/components/fab.scss +8 -0
  227. data/views/mdc/assets/scss/components/grid.scss +10 -0
  228. data/views/mdc/assets/scss/components/icon-toggles.scss +9 -0
  229. data/views/mdc/assets/scss/components/icon.scss +34 -0
  230. data/views/mdc/assets/scss/components/image.scss +24 -0
  231. data/views/mdc/assets/scss/components/list.scss +9 -0
  232. data/views/mdc/assets/scss/components/menu.scss +17 -0
  233. data/views/mdc/assets/scss/components/select.scss +16 -0
  234. data/views/mdc/assets/scss/components/snackbar.scss +5 -0
  235. data/views/mdc/assets/scss/components/switch.scss +6 -0
  236. data/views/mdc/assets/scss/components/table-pagination.scss +65 -0
  237. data/views/mdc/assets/scss/components/textfield.scss +1 -0
  238. data/views/mdc/assets/scss/components/typography.scss +25 -0
  239. data/views/mdc/assets/scss/material.blue_grey-orange.min.css +8 -0
  240. data/views/mdc/assets/scss/styles.scss +11 -0
  241. data/views/mdc/assets/scss/theme.scss +5 -0
  242. data/views/mdc/body/drawer.erb +18 -0
  243. data/views/mdc/body/drawers/menu.erb +25 -0
  244. data/views/mdc/body/footer.erb +1 -0
  245. data/views/mdc/body/footers/large.erb +27 -0
  246. data/views/mdc/body/footers/menu_item.erb +6 -0
  247. data/views/mdc/body/footers/small.erb +14 -0
  248. data/views/mdc/body/header.erb +25 -0
  249. data/views/mdc/body/snackbar.erb +10 -0
  250. data/views/mdc/components/avatar.erb +24 -0
  251. data/views/mdc/components/badge.erb +2 -0
  252. data/views/mdc/components/body.erb +2 -0
  253. data/views/mdc/components/button.erb +17 -0
  254. data/views/mdc/components/buttons/button.erb +20 -0
  255. data/views/mdc/components/buttons/fab.erb +22 -0
  256. data/views/mdc/components/buttons/icon.erb +24 -0
  257. data/views/mdc/components/card.erb +49 -0
  258. data/views/mdc/components/checkbox.erb +22 -0
  259. data/views/mdc/components/chip.erb +31 -0
  260. data/views/mdc/components/content.erb +11 -0
  261. data/views/mdc/components/date_time.erb +30 -0
  262. data/views/mdc/components/dialog.erb +27 -0
  263. data/views/mdc/components/display.erb +2 -0
  264. data/views/mdc/components/event.erb +18 -0
  265. data/views/mdc/components/expansion_panel.erb +11 -0
  266. data/views/mdc/components/form.erb +15 -0
  267. data/views/mdc/components/grid.erb +24 -0
  268. data/views/mdc/components/headline.erb +2 -0
  269. data/views/mdc/components/hidden_field.erb +1 -0
  270. data/views/mdc/components/icon.erb +30 -0
  271. data/views/mdc/components/icon_toggle.erb +15 -0
  272. data/views/mdc/components/image.erb +7 -0
  273. data/views/mdc/components/link.erb +14 -0
  274. data/views/mdc/components/list.erb +14 -0
  275. data/views/mdc/components/list/actions.erb +6 -0
  276. data/views/mdc/components/list/actions/button.erb +1 -0
  277. data/views/mdc/components/list/actions/checkbox.erb +1 -0
  278. data/views/mdc/components/list/actions/icon.erb +1 -0
  279. data/views/mdc/components/list/actions/icon_toggle.erb +1 -0
  280. data/views/mdc/components/list/actions/radio_button.erb +1 -0
  281. data/views/mdc/components/list/actions/switch.erb +1 -0
  282. data/views/mdc/components/list/avatar.erb +5 -0
  283. data/views/mdc/components/list/checkbox.erb +5 -0
  284. data/views/mdc/components/list/icon.erb +5 -0
  285. data/views/mdc/components/list/info.erb +1 -0
  286. data/views/mdc/components/list/line.erb +34 -0
  287. data/views/mdc/components/list/menu.erb +23 -0
  288. data/views/mdc/components/list/separator.erb +1 -0
  289. data/views/mdc/components/menu.erb +29 -0
  290. data/views/mdc/components/modal.erb +15 -0
  291. data/views/mdc/components/radio_button.erb +11 -0
  292. data/views/mdc/components/render.erb +4 -0
  293. data/views/mdc/components/select.erb +22 -0
  294. data/views/mdc/components/snackbar.erb +17 -0
  295. data/views/mdc/components/static.erb +7 -0
  296. data/views/mdc/components/subheading.erb +2 -0
  297. data/views/mdc/components/switch.erb +13 -0
  298. data/views/mdc/components/table.erb +13 -0
  299. data/views/mdc/components/table/header.erb +7 -0
  300. data/views/mdc/components/table/pagination.erb +24 -0
  301. data/views/mdc/components/table/row.erb +14 -0
  302. data/views/mdc/components/text_area.erb +8 -0
  303. data/views/mdc/components/text_field.erb +27 -0
  304. data/views/mdc/components/title.erb +4 -0
  305. data/views/mdc/components/tooltip.erb +5 -0
  306. data/views/mdc/components/typography.erb +13 -0
  307. data/views/mdc/init-depends.sh +2 -0
  308. data/views/mdc/layout.erb +50 -0
  309. data/views/mdc/package-lock.json +11524 -0
  310. data/views/mdc/package.json +39 -0
  311. data/views/mdc/web.erb +1 -0
  312. data/views/mdc/webpack.config.js +47 -0
  313. metadata +539 -0
@@ -0,0 +1,35 @@
1
+ module Voom
2
+ module Presenters
3
+ module DSL
4
+ module Components
5
+ module Mixins
6
+ module TextFields
7
+ def text_field(**attribs, &block)
8
+ self << Components::TextField.new(parent: self,
9
+ context: context,
10
+ **attribs, &block)
11
+ end
12
+
13
+ def text_area(**attribs, &block)
14
+ self << Components::TextArea.new(parent: self,
15
+ context: context,
16
+ **attribs, &block)
17
+ end
18
+
19
+ def hidden_field(**attribs, &block)
20
+ self << Components::HiddenField.new(parent: self,
21
+ context: context,
22
+ **attribs, &block)
23
+ end
24
+
25
+ def datetime_field(**attribs, &block)
26
+ self << Components::DateTime.new(parent: self,
27
+ context: context,
28
+ **attribs, &block)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,40 @@
1
+ require_relative 'append'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Mixins
8
+ module Toggles
9
+ include Mixins::Append
10
+
11
+ def checkbox(**attribs, &block)
12
+ self << Checkbox.new(parent: self, **attribs, &block)
13
+ end
14
+
15
+ def radio_button(**attribs, &block)
16
+ self << RadioButton.new(parent: self,
17
+ context: context,
18
+ **attribs, &block)
19
+ end
20
+
21
+ def switch(**attribs, &block)
22
+ self << Switch.new(parent: self,
23
+ context: context,
24
+ **attribs, &block)
25
+ end
26
+
27
+ def icon_toggle(icon, **attribs, &block)
28
+ trace { attribs.inspect }
29
+ self << IconToggle.new(parent: self,
30
+ icon: icon,
31
+ context: context,
32
+ **attribs, &block)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,18 @@
1
+ module Voom
2
+ module Presenters
3
+ module DSL
4
+ module Components
5
+ module Mixins
6
+ module Tooltips
7
+ def tooltip(text= nil, **attribs, &block)
8
+ return @tooltip if locked?
9
+ @tooltip = Components::Tooltip.new(parent: self, text: text,
10
+ context: context,
11
+ **attribs, &block)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ require_relative 'append'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Mixins
8
+ module Typography
9
+ include Mixins::Append
10
+
11
+ def display(*text, **attributes, &block)
12
+ self << Components::Typography.new(parent: self, type: :display, text: text, context: context, **attributes, &block)
13
+ end
14
+ alias heading display
15
+
16
+ def headline(*text, **attributes, &block)
17
+ self << Components::Typography.new(parent: self, type: :headline, text: text, context: context, **attributes, &block)
18
+ end
19
+
20
+
21
+ def title(*text, **attributes, &block)
22
+ self << Components::Typography.new(parent: self, type: :title, text: text, context: context, **attributes, &block)
23
+ end
24
+
25
+ def subheading(*text, **attributes, &block)
26
+ self << Components::Typography.new(parent: self, type: :subheading, text: text, context: context, **attributes, &block)
27
+ end
28
+
29
+ def body(*text, **attributes, &block)
30
+ self << Components::Typography.new(parent: self, type: :body, text: text, context: context, **attributes, &block)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,29 @@
1
+ module Voom
2
+ module Presenters
3
+ module DSL
4
+ module Components
5
+ class Page < Base
6
+ attr_accessor :title, :background_color
7
+
8
+ def initialize(**attribs_, &block)
9
+ super(type: :page,
10
+ context: context,
11
+ **attribs_, &block)
12
+ expand!
13
+ end
14
+
15
+ def title(title=nil)
16
+ return @title if locked?
17
+ @title = title
18
+ end
19
+
20
+ def background_color(color=nil)
21
+ return @background_color if locked?
22
+ @background_color = color
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ module Voom
2
+ module Presenters
3
+ module DSL
4
+ module Components
5
+ class RadioButton < ToggleBase
6
+ def initialize(**attribs_, &block)
7
+ super(type: :radio_button, **attribs_, &block)
8
+ expand!
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,64 @@
1
+ require_relative 'input'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class Select < Input
8
+
9
+ attr_reader :required, :full_width, :options
10
+
11
+ def initialize(**attribs_, &block)
12
+ super(type: :select, **attribs_, &block)
13
+ @required = attribs.delete(:required)
14
+ @full_width = attribs.delete(:full_width) || true
15
+ @options = []
16
+ expand!
17
+ end
18
+
19
+ def label(text=nil)
20
+ return @label if locked?
21
+ @label = text
22
+ end
23
+
24
+ def icon(icon=nil, **attribs, &block)
25
+ return @icon if locked?
26
+ @icon = Components::Icon.new(parent: self, icon: icon,
27
+ context: context,
28
+ **attribs, &block)
29
+ end
30
+
31
+ def option(**attribs, &block)
32
+ @options << Option.new(parent: self,
33
+ context: context,
34
+ **attribs, &block)
35
+ end
36
+
37
+ class Option < Base
38
+ attr_reader :selected, :disabled
39
+
40
+ def initialize(**attribs_, &block)
41
+ super(type: :select_option, **attribs_, &block)
42
+ @value = self.value(attribs.delete(:value))
43
+ @text = self.text(attribs.delete(:text))
44
+ @selected = attribs.delete(:selected)
45
+ @disabled = attribs.delete(:disabled)
46
+ expand!
47
+ end
48
+
49
+ def value(value=nil)
50
+ return @value if locked?
51
+ @value = value
52
+ end
53
+
54
+ def text(text=nil)
55
+ return @text if locked?
56
+ @text = text
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+
@@ -0,0 +1,32 @@
1
+ module Voom
2
+ module Presenters
3
+ module DSL
4
+ module Components
5
+ class Snackbar < Base
6
+ attr_accessor :text
7
+
8
+ def initialize(**attribs_, &block)
9
+ super(type: :snackbar, **attribs_, &block)
10
+ @text = attribs.delete(:text)
11
+ expand!
12
+ end
13
+
14
+ def action(text=nil, **params, &block)
15
+ return @action if locked?
16
+ @action = Action.new(parent: self, text: text, context: params, &block)
17
+ end
18
+
19
+ class Action < EventBase
20
+ attr_accessor :text
21
+
22
+ def initialize(**attribs_, &block)
23
+ super(type: :snackbar, **attribs_, &block)
24
+ @text = attribs.delete(:text)
25
+ expand!
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,14 @@
1
+ module Voom
2
+ module Presenters
3
+ module DSL
4
+ module Components
5
+ class Switch < ToggleBase
6
+ def initialize(**attribs_, &block)
7
+ super(type: :switch, **attribs_, &block)
8
+ expand!
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,102 @@
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'
7
+
8
+ module Voom
9
+ module Presenters
10
+ module DSL
11
+ module Components
12
+ class Table < Base
13
+ attr_accessor :header, :rows, :selectable
14
+
15
+ def initialize(**attribs_, &block)
16
+ super(type: :table, **attribs_, &block)
17
+ @selectable = attribs.delete(:selectable)
18
+ @rows = []
19
+ expand!
20
+ end
21
+
22
+ def header(**attribs, &block)
23
+ return @header if locked?
24
+ @header = Row.new(parent: self, type: :header,
25
+ context: context,
26
+ **attribs, &block)
27
+ end
28
+
29
+ def row(**attribs, &block)
30
+ @rows << Row.new(parent: self, type: :row,
31
+ context: context,
32
+ **attribs, &block)
33
+ end
34
+
35
+ # WIP
36
+ # def pagination(**attribs, &block)
37
+ # @pagination = Pagination.new(parent: self,
38
+ # context: context,
39
+ # **attribs, &block)
40
+ # end
41
+
42
+ class Row < Base
43
+ attr_accessor :columns, :color
44
+
45
+ def initialize(type:, **attribs_, &block)
46
+ super(type: type, **attribs_, &block)
47
+ @columns = []
48
+ @color = attribs.delete(:color)
49
+ expand!
50
+ end
51
+
52
+ def column(value=nil, **attribs, &block)
53
+ @columns << Column.new(parent: self, value: value,
54
+ context: context,
55
+ **attribs, &block)
56
+ end
57
+
58
+ class Column < EventBase
59
+ include Mixins::Tooltips
60
+ include Mixins::Chips
61
+ include Mixins::Selects
62
+ include Mixins::Icons
63
+
64
+ attr_accessor :numeric, :color, :components
65
+
66
+ def initialize(**attribs_, &block)
67
+ super(type: :column, **attribs_, &block)
68
+ value = attribs.delete(:value)
69
+ @numeric = attribs.delete(:numeric) || numeric?(value)
70
+ self.value(value) if value
71
+ @color = attribs.delete(:color)
72
+ @components = []
73
+ expand!
74
+ end
75
+
76
+ def value(*value, **attribs, &block)
77
+ return @value if locked?
78
+ @value = Components::Typography.new(parent: self, type: :text, text: value, context: context, **attribs, &block)
79
+ end
80
+
81
+ private
82
+ def numeric?(value)
83
+ return true if value.is_a? Numeric
84
+ (value.to_s.sub(/\D/, '') =~ /^[-+]?[0-9]*\.?[0-9]+$/) != nil
85
+ end
86
+ end
87
+
88
+ 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
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'text_field'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class TextArea < TextField
8
+ attr_reader :rows
9
+
10
+ def initialize(**attribs_, &block)
11
+ super(type: :text_area, **attribs_, &block)
12
+ @rows = attribs.delete(:rows) || 3
13
+ expand!
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,74 @@
1
+ require_relative 'input'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class TextField < Input
8
+
9
+ attr_reader :required, :full_width, :password
10
+
11
+ def initialize(**attribs_, &block)
12
+ super(type: :text_field, **attribs_, &block)
13
+ @required = attribs.delete(:required)
14
+ @full_width = attribs.delete(:full_width){ true }
15
+ @password = attribs.delete(:password)
16
+ expand!
17
+ end
18
+
19
+ def label(text=nil)
20
+ return @label if locked?
21
+ @label = text
22
+ end
23
+
24
+ def icon(icon=nil, **attribs, &block)
25
+ return @icon if locked?
26
+ @icon = Components::Icon.new(parent: self, icon: icon,
27
+ context: context,
28
+ **attribs, &block)
29
+ end
30
+
31
+ def value(value=nil)
32
+ return @value if locked?
33
+ @value = value
34
+ end
35
+
36
+ def pattern(pattern=nil)
37
+ return @pattern if locked?
38
+ @pattern = json_regexp(Regexp.new(pattern))
39
+ end
40
+
41
+ def hint(hint=nil)
42
+ return @hint if locked?
43
+ @hint = hint
44
+ end
45
+
46
+ def error(error=nil)
47
+ return @error if locked?
48
+ @error = error
49
+ end
50
+
51
+ def readonly(readonly=nil)
52
+ return @readonly if locked?
53
+ @readonly = readonly
54
+ end
55
+
56
+ private
57
+ def json_regexp(regexp)
58
+ str = regexp.inspect.
59
+ sub('\\A', '^').
60
+ sub('\\Z', '$').
61
+ sub('\\z', '$').
62
+ sub(/^\//, '').
63
+ sub(/\/[a-z]*$/, '').
64
+ gsub(/\(\?#.+\)/, '').
65
+ gsub(/\(\?-\w+:/, '(').
66
+ gsub(/\s/, '')
67
+ Regexp.new(str).source
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+