glib-web 0.5.75 → 0.5.76

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 (188) hide show
  1. checksums.yaml +4 -4
  2. data/app/channels/glib/channel/is_typing_channel.rb +34 -34
  3. data/app/channels/glib/channel/online_channel.rb +36 -36
  4. data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
  5. data/app/controllers/concerns/glib/auth/policy.rb +148 -148
  6. data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
  7. data/app/controllers/concerns/glib/json/libs.rb +149 -149
  8. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
  9. data/app/controllers/concerns/glib/json/transformation.rb +11 -11
  10. data/app/controllers/concerns/glib/json/traversal.rb +92 -92
  11. data/app/controllers/concerns/glib/json/ui.rb +88 -88
  12. data/app/controllers/concerns/glib/json/validation.rb +13 -13
  13. data/app/controllers/glib/home_controller.rb +54 -54
  14. data/app/helpers/glib/app_feature_support_helper.rb +16 -16
  15. data/app/helpers/glib/dynamic_images_helper.rb +55 -55
  16. data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
  17. data/app/helpers/glib/enum_helper.rb +18 -18
  18. data/app/helpers/glib/forms_helper.rb +15 -15
  19. data/app/helpers/glib/json_ui/abstract_builder.rb +309 -309
  20. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
  21. data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
  22. data/app/helpers/glib/json_ui/action_builder/panels.rb +14 -14
  23. data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
  24. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
  25. data/app/helpers/glib/json_ui/action_builder/windows.rb +33 -33
  26. data/app/helpers/glib/json_ui/action_builder.rb +140 -140
  27. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  28. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  29. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  30. data/app/helpers/glib/json_ui/list_builders.rb +110 -110
  31. data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
  32. data/app/helpers/glib/json_ui/page_helper.rb +221 -221
  33. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  34. data/app/helpers/glib/json_ui/split_builders.rb +32 -32
  35. data/app/helpers/glib/json_ui/styling_helper.rb +55 -55
  36. data/app/helpers/glib/json_ui/table_builders.rb +74 -74
  37. data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
  38. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
  39. data/app/helpers/glib/json_ui/view_builder/fields.rb +278 -278
  40. data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
  41. data/app/helpers/glib/json_ui/view_builder.rb +240 -240
  42. data/app/helpers/glib/urls_helper.rb +12 -12
  43. data/app/models/concerns/glib/soft_deletable.rb +68 -68
  44. data/app/models/glib/active_storage/attachment.rb +9 -9
  45. data/app/models/glib/active_storage/blob.rb +9 -9
  46. data/app/models/glib/application_record.rb +18 -18
  47. data/app/models/glib/dynamic_text_record.rb +9 -9
  48. data/app/models/glib/text.rb +95 -95
  49. data/app/policies/glib/application_policy.rb +161 -161
  50. data/app/validators/email_typo_validator.rb +38 -38
  51. data/app/validators/email_validator.rb +7 -7
  52. data/app/validators/url_validator.rb +20 -20
  53. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  54. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  55. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  56. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
  57. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  58. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  59. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  60. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
  61. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  62. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  63. data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
  64. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
  65. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  66. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  67. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  68. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  69. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  70. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -24
  71. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  72. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +32 -32
  73. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  74. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  75. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  76. data/app/views/json_ui/garage/forms/index.json.jbuilder +113 -113
  77. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
  78. data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
  79. data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
  80. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
  81. data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
  82. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  83. data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -91
  84. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +130 -130
  85. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
  86. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  87. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
  88. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  89. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  90. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +81 -81
  91. data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
  92. data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
  93. data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
  94. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  95. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
  96. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  97. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  98. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
  99. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  100. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  101. data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
  102. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  103. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  104. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  105. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  106. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  107. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  108. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  109. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  110. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  111. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  112. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  113. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  114. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  115. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  116. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  117. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +31 -31
  118. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  119. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  120. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
  121. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  122. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
  123. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  124. data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -138
  125. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  126. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  127. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  128. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -33
  129. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  130. data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
  131. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  132. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  133. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  134. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  135. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  136. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  137. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  138. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  139. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  140. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  141. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  142. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  143. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  144. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  145. data/app/views/json_ui/garage/views/controls.json.jbuilder +37 -37
  146. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  147. data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
  148. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  149. data/app/views/json_ui/garage/views/index.json.jbuilder +67 -67
  150. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  151. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  152. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  153. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  154. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  155. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  156. data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
  157. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  158. data/config/routes.rb +7 -7
  159. data/lib/generators/glib/install_generator.rb +24 -24
  160. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  161. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  162. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  163. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  164. data/lib/generators/templates/database.yml +107 -107
  165. data/lib/generators/templates/dynamic_text.rb +2 -2
  166. data/lib/glib/crypt/utils.rb +26 -26
  167. data/lib/glib/crypt.rb +0 -0
  168. data/lib/glib/dynamic_text/config.rb +21 -21
  169. data/lib/glib/dynamic_text.rb +0 -0
  170. data/lib/glib/engine.rb +7 -7
  171. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  172. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  173. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  174. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  175. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  176. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  177. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  178. data/lib/glib/json_crawler/coverage.rb +20 -20
  179. data/lib/glib/json_crawler/http.rb +120 -120
  180. data/lib/glib/json_crawler/router.rb +90 -98
  181. data/lib/glib/json_crawler.rb +11 -11
  182. data/lib/glib/mailer_tester.rb +36 -36
  183. data/lib/glib/test_helpers.rb +52 -52
  184. data/lib/glib/value.rb +7 -7
  185. data/lib/glib/version.rb +5 -5
  186. data/lib/glib-web.rb +9 -9
  187. data/lib/tasks/db.rake +95 -95
  188. metadata +1 -1
@@ -1,240 +1,240 @@
1
- module Glib
2
- module JsonUi
3
- class ViewBuilder < AbstractBuilder
4
- def initialize(json, page, multiple)
5
- super(json, page)
6
-
7
- @multiple = multiple
8
- end
9
-
10
- def add_view(name, *args)
11
- if @multiple
12
- add_element_to_array_v1 'view', name, *args
13
- else
14
- add_singleton_element_v1 'view', name, *args
15
- end
16
- end
17
-
18
- def add_singleton_view(name, *args)
19
- add_singleton_element 'view', name, *args
20
- end
21
-
22
- def method_missing(m, *args)
23
- add_view m, *args
24
- end
25
-
26
- class View < JsonUiElement
27
- string :id
28
- length :width
29
- length :height
30
- color :backgroundColor
31
- hash :padding
32
- singleton_array :styleClass, :styleClasses
33
- hash :showIf
34
- hash :valueIf
35
- hash :analytics
36
-
37
- # def initialize(json, page)
38
- # super(json, page)
39
-
40
- # # Can be improved by making it configurable site-wide.
41
- # @analyticsEnabled = true
42
- # end
43
-
44
- # def analytics(value)
45
- # if value.is_a?(String)
46
- # @analyticsEnabled = true
47
- # @analyticsId = value
48
- # else
49
- # @analyticsEnabled = value == true
50
- # end
51
- # end
52
-
53
- # # Override
54
- # def created
55
- # # if @analyticsEnabled
56
- # # context = page.context
57
- # # json.analytics do
58
- # # content = @analyticsId || (@text || @icon)&.gsub(/\s+/, '_')&.downcase || 'nil'
59
- # # json.namePrefix [context.controller_name, context.action_name, content].join('_')
60
- # # end
61
- # # end
62
-
63
- # json.analytics do
64
- # if @analyticsEnabled
65
- # if @analyticsId
66
- # json.placement @analyticsId
67
- # end
68
- # else
69
- # json.disabled true
70
- # end
71
- # end
72
- # end
73
-
74
- end
75
-
76
- ### View definitions
77
-
78
- class AbstractText < View
79
- string :textAlign
80
- text :text
81
- color :color
82
- end
83
-
84
- class H1 < AbstractText
85
- end
86
-
87
- class H2 < AbstractText
88
- end
89
-
90
- class H3 < AbstractText
91
- end
92
-
93
- class H4 < AbstractText
94
- end
95
-
96
- class H5 < AbstractText
97
- end
98
-
99
- class H6 < AbstractText
100
- end
101
-
102
- class P < AbstractText
103
- end
104
-
105
- class Markdown < AbstractText
106
- bool :previewVideo
107
- end
108
-
109
- class Html < AbstractText
110
- end
111
-
112
- class Label < AbstractText
113
- hash :actionCable
114
- # string :format
115
- action :onClick
116
- end
117
-
118
- class Image < View
119
- string :url
120
- string :base64Data
121
- action :onClick
122
- string :fit
123
- end
124
-
125
- class Avatar < View
126
- int :size
127
- string :url
128
- action :onClick
129
- end
130
-
131
- class Icon < View
132
- # TODO: Remove later. Deprecated.
133
- icon :spec
134
-
135
- action :onClick
136
- color :color
137
-
138
- def name(value)
139
- @name = value
140
- end
141
-
142
- def size(value)
143
- @size = value
144
- end
145
-
146
- # Override
147
- def created
148
- if @name
149
- json.material do
150
- json.name @name
151
- json.size @size if @size
152
- end
153
- end
154
- end
155
- end
156
-
157
- # class Banner < View
158
- # icon :icon
159
- # string :text
160
- # end
161
-
162
- class Button < View
163
- icon :icon, cache: true
164
- string :text, cache: true
165
- action :onClick
166
- color :color
167
- end
168
-
169
- class Fab < View
170
- icon :icon
171
- action :onClick
172
- end
173
-
174
- class Switch < View
175
- string :text, cache: true
176
- bool :enabled
177
-
178
- action :onEnabled
179
- action :onDisabled
180
- end
181
-
182
- class Hr < View
183
- color :color
184
- end
185
-
186
- class Spacer < View
187
- end
188
-
189
- class Map < View
190
- float :latitude
191
- float :longitude
192
- int :zoom
193
- string :dataUrl
194
- bool :cluster
195
- end
196
-
197
- class Chip < View
198
- string :text
199
- action :onClick
200
- end
201
-
202
- class Calendar < View
203
- string :dataUrl
204
- end
205
-
206
- class TabBar < View
207
- color :color
208
-
209
- def buttons(block)
210
- json.buttons do
211
- block.call page.menu_builder
212
- end
213
- end
214
- end
215
-
216
- class AppBar < View
217
- color :color
218
-
219
- # def leftButtons(block)
220
- # json.leftButtons do
221
- # block.call page.menu_builder
222
- # end
223
- # end
224
-
225
- def rightButtons(block)
226
- json.rightButtons do
227
- block.call page.menu_builder
228
- end
229
- end
230
- end
231
-
232
- class Datetime < View
233
- date_time :value
234
- string :format
235
- bool :tick
236
- end
237
-
238
- end
239
- end
240
- end
1
+ module Glib
2
+ module JsonUi
3
+ class ViewBuilder < AbstractBuilder
4
+ def initialize(json, page, multiple)
5
+ super(json, page)
6
+
7
+ @multiple = multiple
8
+ end
9
+
10
+ def add_view(name, *args)
11
+ if @multiple
12
+ add_element_to_array_v1 'view', name, *args
13
+ else
14
+ add_singleton_element_v1 'view', name, *args
15
+ end
16
+ end
17
+
18
+ def add_singleton_view(name, *args)
19
+ add_singleton_element 'view', name, *args
20
+ end
21
+
22
+ def method_missing(m, *args)
23
+ add_view m, *args
24
+ end
25
+
26
+ class View < JsonUiElement
27
+ string :id
28
+ length :width
29
+ length :height
30
+ color :backgroundColor
31
+ hash :padding
32
+ singleton_array :styleClass, :styleClasses
33
+ hash :showIf
34
+ hash :valueIf
35
+ hash :analytics
36
+
37
+ # def initialize(json, page)
38
+ # super(json, page)
39
+
40
+ # # Can be improved by making it configurable site-wide.
41
+ # @analyticsEnabled = true
42
+ # end
43
+
44
+ # def analytics(value)
45
+ # if value.is_a?(String)
46
+ # @analyticsEnabled = true
47
+ # @analyticsId = value
48
+ # else
49
+ # @analyticsEnabled = value == true
50
+ # end
51
+ # end
52
+
53
+ # # Override
54
+ # def created
55
+ # # if @analyticsEnabled
56
+ # # context = page.context
57
+ # # json.analytics do
58
+ # # content = @analyticsId || (@text || @icon)&.gsub(/\s+/, '_')&.downcase || 'nil'
59
+ # # json.namePrefix [context.controller_name, context.action_name, content].join('_')
60
+ # # end
61
+ # # end
62
+
63
+ # json.analytics do
64
+ # if @analyticsEnabled
65
+ # if @analyticsId
66
+ # json.placement @analyticsId
67
+ # end
68
+ # else
69
+ # json.disabled true
70
+ # end
71
+ # end
72
+ # end
73
+
74
+ end
75
+
76
+ ### View definitions
77
+
78
+ class AbstractText < View
79
+ string :textAlign
80
+ text :text
81
+ color :color
82
+ end
83
+
84
+ class H1 < AbstractText
85
+ end
86
+
87
+ class H2 < AbstractText
88
+ end
89
+
90
+ class H3 < AbstractText
91
+ end
92
+
93
+ class H4 < AbstractText
94
+ end
95
+
96
+ class H5 < AbstractText
97
+ end
98
+
99
+ class H6 < AbstractText
100
+ end
101
+
102
+ class P < AbstractText
103
+ end
104
+
105
+ class Markdown < AbstractText
106
+ bool :previewVideo
107
+ end
108
+
109
+ class Html < AbstractText
110
+ end
111
+
112
+ class Label < AbstractText
113
+ hash :actionCable
114
+ # string :format
115
+ action :onClick
116
+ end
117
+
118
+ class Image < View
119
+ string :url
120
+ string :base64Data
121
+ action :onClick
122
+ string :fit
123
+ end
124
+
125
+ class Avatar < View
126
+ int :size
127
+ string :url
128
+ action :onClick
129
+ end
130
+
131
+ class Icon < View
132
+ # TODO: Remove later. Deprecated.
133
+ icon :spec
134
+
135
+ action :onClick
136
+ color :color
137
+
138
+ def name(value)
139
+ @name = value
140
+ end
141
+
142
+ def size(value)
143
+ @size = value
144
+ end
145
+
146
+ # Override
147
+ def created
148
+ if @name
149
+ json.material do
150
+ json.name @name
151
+ json.size @size if @size
152
+ end
153
+ end
154
+ end
155
+ end
156
+
157
+ # class Banner < View
158
+ # icon :icon
159
+ # string :text
160
+ # end
161
+
162
+ class Button < View
163
+ icon :icon, cache: true
164
+ string :text, cache: true
165
+ action :onClick
166
+ color :color
167
+ end
168
+
169
+ class Fab < View
170
+ icon :icon
171
+ action :onClick
172
+ end
173
+
174
+ class Switch < View
175
+ string :text, cache: true
176
+ bool :enabled
177
+
178
+ action :onEnabled
179
+ action :onDisabled
180
+ end
181
+
182
+ class Hr < View
183
+ color :color
184
+ end
185
+
186
+ class Spacer < View
187
+ end
188
+
189
+ class Map < View
190
+ float :latitude
191
+ float :longitude
192
+ int :zoom
193
+ string :dataUrl
194
+ bool :cluster
195
+ end
196
+
197
+ class Chip < View
198
+ string :text
199
+ action :onClick
200
+ end
201
+
202
+ class Calendar < View
203
+ string :dataUrl
204
+ end
205
+
206
+ class TabBar < View
207
+ color :color
208
+
209
+ def buttons(block)
210
+ json.buttons do
211
+ block.call page.menu_builder
212
+ end
213
+ end
214
+ end
215
+
216
+ class AppBar < View
217
+ color :color
218
+
219
+ # def leftButtons(block)
220
+ # json.leftButtons do
221
+ # block.call page.menu_builder
222
+ # end
223
+ # end
224
+
225
+ def rightButtons(block)
226
+ json.rightButtons do
227
+ block.call page.menu_builder
228
+ end
229
+ end
230
+ end
231
+
232
+ class Datetime < View
233
+ date_time :value
234
+ string :format
235
+ bool :tick
236
+ end
237
+
238
+ end
239
+ end
240
+ end