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,64 @@
1
+ require_relative 'mixins/common'
2
+ require_relative 'mixins/images'
3
+ require_relative 'mixins/icons'
4
+ require_relative 'mixins/event'
5
+ require_relative 'mixins/attaches'
6
+ require_relative 'mixins/dialogs'
7
+ require_relative 'mixins/chips'
8
+ require_relative 'mixins/snackbars'
9
+
10
+ module Voom
11
+ module Presenters
12
+ module DSL
13
+ module Components
14
+ class Grid < Base
15
+ include Mixins::Attaches
16
+ include Mixins::Dialogs
17
+ include Mixins::Snackbars
18
+
19
+ attr_accessor :columns, :color, :padded
20
+
21
+ def initialize(color: nil, **attribs_, &block)
22
+ super(type: :grid, **attribs_, &block)
23
+ @columns = []
24
+ @color = h(color)
25
+ @padded = attribs.delete(:padded)
26
+ expand!
27
+ end
28
+
29
+ def column(size, color: nil, **attribs, &block)
30
+ attribs = size.respond_to?(:keys) ? attribs.merge(size) : attribs.merge(size: size)
31
+ @columns << Column.new(parent: self, color: color,
32
+ context: context, **attribs, &block)
33
+ end
34
+
35
+ class Column < EventBase
36
+ include Mixins::Common
37
+ include Mixins::Images
38
+ include Mixins::Icons
39
+ include Mixins::Attaches
40
+ include Mixins::Dialogs
41
+ include Mixins::Chips
42
+ include Mixins::TextFields
43
+ include Mixins::Selects
44
+ include Mixins::Toggles
45
+ include Mixins::Snackbars
46
+
47
+ attr_reader :size, :desktop, :tablet, :phone, :color, :components
48
+
49
+ def initialize(**attribs_, &block)
50
+ super(type: :column, **attribs_, &block)
51
+ @size = attribs.delete(:size) || 1
52
+ @desktop = attribs.delete(:desktop)
53
+ @tablet = attribs.delete(:tablet)
54
+ @phone = attribs.delete(:phone)
55
+ @color = attribs.delete(:color)
56
+ @components = []
57
+ expand!
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,33 @@
1
+ module Voom
2
+ module Presenters
3
+ module DSL
4
+ module Components
5
+ class Header < Base
6
+ attr_accessor :title, :image
7
+
8
+ def initialize(**attribs_, &block)
9
+ super(type: :header,
10
+ context: context,
11
+ **attribs_, &block)
12
+ self.title(attribs.delete(:title)) if attribs.key?(:title)
13
+ @image = attribs.delete(:image)
14
+ expand!
15
+ end
16
+
17
+ def menu(**attribs, &block)
18
+ return @menu if locked?
19
+ @menu = Menu.new(parent: self,
20
+ context: context,
21
+ **attribs, &block)
22
+ end
23
+
24
+ def title(*text, **attribs, &block)
25
+ return @title if locked?
26
+ @title = Components::Typography.new(parent: self, type: :text, text: text, context: context, **attribs, &block)
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'input'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class HiddenField < Input
8
+ attr_reader :name
9
+
10
+ def initialize(**attribs_, &block)
11
+ super(type: :hidden_field, context: context,
12
+ **attribs_, &block)
13
+ expand!
14
+ end
15
+
16
+ def value(value=nil)
17
+ return @value if locked?
18
+ @value = value
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,21 @@
1
+ require_relative 'mixins/event'
2
+ require_relative 'mixins/tooltips'
3
+ require_relative 'icon_base'
4
+
5
+ module Voom
6
+ module Presenters
7
+ module DSL
8
+ module Components
9
+ class Icon < IconBase
10
+ include Mixins::Tooltips
11
+
12
+ def initialize(**attribs_, &block)
13
+ super(context: context,
14
+ **attribs_, &block)
15
+ expand!
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'mixins/event'
2
+ require_relative 'mixins/tooltips'
3
+
4
+ module Voom
5
+ module Presenters
6
+ module DSL
7
+ module Components
8
+ class IconBase < EventBase
9
+ include Mixins::Tooltips
10
+ attr_reader :icon, :color, :size, :position
11
+
12
+ def initialize(**attribs_, &block)
13
+ super(type: :icon, context: context,
14
+ **attribs_, &block)
15
+ @icon = attribs.delete(:icon)
16
+ @color = attribs.delete(:color)
17
+ @size = attribs.delete(:size)
18
+ @position = Array(attribs.delete(:position)).compact
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ require_relative 'toggle_base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class IconToggle < ToggleBase
8
+ attr_accessor :icon, :selected, :disabled
9
+
10
+ def initialize(**attribs_, &block)
11
+ super(type: :icon_toggle, context: context, **attribs_, &block)
12
+ @icon = attribs.delete(:icon)
13
+ @selected = attribs.delete(:selected) || false
14
+ @disabled = attribs.delete(:disabled) || false
15
+ expand!
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ require_relative 'mixins/event'
2
+ require_relative 'mixins/tooltips'
3
+
4
+ module Voom
5
+ module Presenters
6
+ module DSL
7
+ module Components
8
+ class Image < EventBase
9
+ include Mixins::Tooltips
10
+
11
+ attr_accessor :image, :height, :width, :position, :selected, :url
12
+
13
+ def initialize(**attribs_, &block)
14
+ super(type: :image, context: context,
15
+ **attribs_, &block)
16
+ @image = attribs.delete(:image)
17
+ @height = attribs.delete(:height)
18
+ @width = attribs.delete(:width)
19
+ @position = Array(attribs.delete(:position)).compact
20
+ @selected = attribs.delete(:selected)
21
+ @url = build_url
22
+ expand!
23
+ end
24
+
25
+ private
26
+ def build_url
27
+ return nil unless image
28
+ return image if image.start_with?('/') || @image.start_with?('http')
29
+ @parent.router.url(render: image, context: {})
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'mixins/event'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ class Input < EventBase
8
+ attr_reader :name
9
+
10
+ def initialize(**attribs_, &block)
11
+ super(**attribs_, &block)
12
+ @name = attribs.delete(:name)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,39 @@
1
+ require_relative 'lists/line'
2
+ require_relative 'lists/separator'
3
+ require_relative 'mixins/content'
4
+ require_relative 'mixins/append'
5
+
6
+ module Voom
7
+ module Presenters
8
+ module DSL
9
+ module Components
10
+ class List < Base
11
+ include Mixins::Content
12
+ include Mixins::Append
13
+
14
+ attr_reader :lines, :lines_only
15
+ attr_accessor :components
16
+
17
+ def initialize(**attribs_, &block)
18
+ super(type: :list, context: context,
19
+ **attribs_, &block)
20
+ @lines_only = attribs.delete(:lines_only)||false
21
+ @lines = []
22
+ @components = []
23
+ expand!
24
+ end
25
+
26
+ def line(text=nil, **attribs, &block)
27
+ @lines << Lists::Line.new(parent:self, context: context, text: text, **attribs, &block)
28
+ end
29
+
30
+ def separator(**attribs, &block)
31
+ @lines << Lists::Separator.new(parent:self, context: context, **attribs, &block)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+
@@ -0,0 +1,72 @@
1
+ require_relative '../icon'
2
+ require_relative '../icon_toggle'
3
+
4
+
5
+ module Voom
6
+ module Presenters
7
+ module DSL
8
+ module Components
9
+ module Lists
10
+ class Action < Base
11
+ attr_accessor :action_type
12
+
13
+ def initialize(**attribs_, &block)
14
+ super(type: :action, **attribs_, &block)
15
+ expand!
16
+ end
17
+
18
+ def icon(icon=nil, **attribs, &block)
19
+ return @icon if locked?
20
+ @action_type = :icon
21
+ @icon = Icon.new(parent: self, icon: icon,
22
+ context: context,
23
+ **attribs, &block)
24
+ end
25
+
26
+
27
+ def menu(**attribs, &block)
28
+ return @menu if locked?
29
+ @action_type = :menu
30
+ @menu = Menu.new(parent: self, context: context,
31
+ **attribs, &block)
32
+ end
33
+
34
+ def checkbox(**attribs, &block)
35
+ return @checkbox if locked?
36
+ @action_type = :checkbox
37
+ @checkbox = Checkbox.new(parent: self, context: context,
38
+ **attribs, &block)
39
+ end
40
+
41
+ def radio_button(**attribs, &block)
42
+ return @radio_button if locked?
43
+ @action_type = :radio_button
44
+ @radio_button = RadioButton.new(parent: self, context: context,
45
+ **attribs, &block)
46
+ end
47
+
48
+ def switch(**attribs, &block)
49
+ return @switch if locked?
50
+ @action_type = :switch
51
+ @switch = Switch.new(parent: self, context: context,
52
+ **attribs, &block)
53
+ end
54
+
55
+ def icon_toggle(icon=nil, **attribs, &block)
56
+ return @icon_toggle if locked?
57
+ @action_type = :icon_toggle
58
+ @icon_toggle = IconToggle.new(parent: self, icon: icon, context: context, **attribs, &block)
59
+ end
60
+
61
+ def button(text=nil, **attribs, &block)
62
+ return @button if locked?
63
+ @action_type = :button
64
+ @button = Button.new(text: text, parent: self, context: context, **attribs, &block)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+
@@ -0,0 +1,83 @@
1
+ require_relative 'action'
2
+ require_relative '../icon'
3
+ require_relative '../avatar'
4
+ require_relative '../typography'
5
+ require_relative '../mixins/event'
6
+
7
+ module Voom
8
+ module Presenters
9
+ module DSL
10
+ module Components
11
+ module Lists
12
+ class Line < EventBase
13
+ attr_accessor :actions, :selected
14
+
15
+ def initialize(context:, **attribs_, &block)
16
+ super(type: :line, context: context, **attribs_, &block)
17
+ @selected = attribs.delete(:selected)
18
+ self.text(attribs.delete(:text)) if attribs.key?(:text)
19
+ self.subtitle(attribs.delete(:subtitle)) if attribs.key?(:subtitle)
20
+ self.info(attribs.delete(:info)) if attribs.key?(:info)
21
+ self.body(attribs.delete(:body)) if attribs.key?(:body)
22
+ self.avatar(attribs.delete(:avatar)) if attribs.key?(:avatar)
23
+ self.icon(attribs.delete(:icon)) if attribs.key?(:icon)
24
+ self.checkbox(attribs.delete(:ccheckbox)) if attribs.key?(:checkbox)
25
+
26
+ @actions = []
27
+ expand!
28
+ end
29
+
30
+ def text(*text, **attribs, &block)
31
+ return @text if locked?
32
+ @text = Components::Typography.new(parent: self, type: :text, text: text, context: context, **attribs, &block)
33
+ end
34
+
35
+ def subtitle(*text, **attribs, &block)
36
+ return @subtitle if locked?
37
+ @subtitle = Components::Typography.new(parent: self, type: :subtitle, text: text, context: context, **attribs, &block)
38
+ end
39
+
40
+ def info(*text, **attribs, &block)
41
+ return @info if locked?
42
+ @info = Components::Typography.new(parent: self, type: :info, text: text, context: context, **attribs, &block)
43
+ end
44
+
45
+ def body(*text, **attribs, &block)
46
+ return @body if locked?
47
+ @body = Components::Typography.new(parent: self, type: :body, text: text, context: context, **attribs, &block)
48
+ end
49
+
50
+ def avatar(avatar = nil, **attribs, &block)
51
+ return @avatar if locked?
52
+ @avatar = Avatar.new(parent: self, avatar: avatar,
53
+ context: context,
54
+ **attribs, &block)
55
+ end
56
+
57
+ def icon(icon=nil, **attribs, &block)
58
+ return @icon if locked?
59
+ @icon = Icon.new(parent: self, icon: icon,
60
+ context: context,
61
+ **attribs, &block)
62
+ end
63
+
64
+ def checkbox(**attributes, &block)
65
+ return @checkbox if locked?
66
+ @checkbox = Components::Checkbox.new(parent: self, context: context, **attributes, &block)
67
+ end
68
+
69
+ def menu(**attributes, &block)
70
+ return @menu if locked?
71
+ @menu = Components::Menu.new(parent: self, context: context, **attributes, &block)
72
+ end
73
+
74
+ def action(**attribs, &block)
75
+ @actions << Lists::Action.new(parent: self,
76
+ **attribs, &block)
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end