ruflet_core 0.0.12 → 0.0.14

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ruflet/version.rb +1 -1
  3. data/lib/ruflet_protocol/ruflet/protocol.rb +50 -4
  4. data/lib/ruflet_ui/ruflet/control.rb +11 -4
  5. data/lib/ruflet_ui/ruflet/dsl.rb +229 -37
  6. data/lib/ruflet_ui/ruflet/events/gesture_events.rb +113 -9
  7. data/lib/ruflet_ui/ruflet/page.rb +884 -162
  8. data/lib/ruflet_ui/ruflet/types/animation.rb +110 -0
  9. data/lib/ruflet_ui/ruflet/ui/control_registry.rb +1 -0
  10. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoactionsheet_control.rb +13 -0
  11. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoactionsheetaction_control.rb +4 -0
  12. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoactivityindicator_control.rb +4 -0
  13. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoalertdialog_control.rb +17 -0
  14. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoappbar_control.rb +3 -0
  15. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinobottomsheet_control.rb +4 -0
  16. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinobutton_control.rb +9 -0
  17. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinocheckbox_control.rb +6 -0
  18. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinocontextmenu_control.rb +11 -0
  19. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinocontextmenuaction_control.rb +4 -0
  20. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinodatepicker_control.rb +14 -0
  21. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinodialogaction_control.rb +4 -0
  22. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinofilledbutton_control.rb +9 -0
  23. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinolisttile_control.rb +12 -0
  24. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinonavigationbar_control.rb +11 -0
  25. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinopicker_control.rb +18 -0
  26. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoradio_control.rb +6 -0
  27. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinosegmentedbutton_control.rb +2 -0
  28. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoslider_control.rb +7 -0
  29. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoslidingsegmentedbutton_control.rb +3 -0
  30. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoswitch_control.rb +7 -1
  31. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinotextfield_control.rb +7 -0
  32. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinotimerpicker_control.rb +18 -0
  33. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinotintedbutton_control.rb +9 -0
  34. data/lib/ruflet_ui/ruflet/ui/controls/materials/alertdialog_control.rb +4 -0
  35. data/lib/ruflet_ui/ruflet/ui/controls/materials/appbar_control.rb +4 -0
  36. data/lib/ruflet_ui/ruflet/ui/controls/materials/audio_control.rb +33 -1
  37. data/lib/ruflet_ui/ruflet/ui/controls/materials/autocomplete_control.rb +4 -0
  38. data/lib/ruflet_ui/ruflet/ui/controls/materials/autocompletesuggestion_control.rb +26 -0
  39. data/lib/ruflet_ui/ruflet/ui/controls/materials/badge_control.rb +7 -0
  40. data/lib/ruflet_ui/ruflet/ui/controls/materials/banner_control.rb +11 -1
  41. data/lib/ruflet_ui/ruflet/ui/controls/materials/bottomappbar_control.rb +2 -0
  42. data/lib/ruflet_ui/ruflet/ui/controls/materials/bottomsheet_control.rb +5 -0
  43. data/lib/ruflet_ui/ruflet/ui/controls/materials/button_control.rb +2 -0
  44. data/lib/ruflet_ui/ruflet/ui/controls/materials/card_control.rb +4 -0
  45. data/lib/ruflet_ui/ruflet/ui/controls/materials/chip_control.rb +11 -0
  46. data/lib/ruflet_ui/ruflet/ui/controls/materials/circleavatar_control.rb +12 -0
  47. data/lib/ruflet_ui/ruflet/ui/controls/materials/contextmenu_control.rb +19 -0
  48. data/lib/ruflet_ui/ruflet/ui/controls/materials/datacell_control.rb +4 -0
  49. data/lib/ruflet_ui/ruflet/ui/controls/materials/datacolumn_control.rb +4 -0
  50. data/lib/ruflet_ui/ruflet/ui/controls/materials/datatable_control.rb +34 -0
  51. data/lib/ruflet_ui/ruflet/ui/controls/materials/datepicker_control.rb +18 -0
  52. data/lib/ruflet_ui/ruflet/ui/controls/materials/daterangepicker_control.rb +20 -0
  53. data/lib/ruflet_ui/ruflet/ui/controls/materials/divider_control.rb +9 -0
  54. data/lib/ruflet_ui/ruflet/ui/controls/materials/dropdown_control.rb +11 -0
  55. data/lib/ruflet_ui/ruflet/ui/controls/materials/dropdownoption_control.rb +5 -0
  56. data/lib/ruflet_ui/ruflet/ui/controls/materials/expansionpanel_control.rb +8 -0
  57. data/lib/ruflet_ui/ruflet/ui/controls/materials/expansionpanellist_control.rb +6 -0
  58. data/lib/ruflet_ui/ruflet/ui/controls/materials/expansiontile_control.rb +6 -0
  59. data/lib/ruflet_ui/ruflet/ui/controls/materials/filledbutton_control.rb +5 -0
  60. data/lib/ruflet_ui/ruflet/ui/controls/materials/fillediconbutton_control.rb +8 -0
  61. data/lib/ruflet_ui/ruflet/ui/controls/materials/filledtonalbutton_control.rb +5 -0
  62. data/lib/ruflet_ui/ruflet/ui/controls/materials/filledtonaliconbutton_control.rb +8 -0
  63. data/lib/ruflet_ui/ruflet/ui/controls/materials/floatingactionbutton_control.rb +20 -0
  64. data/lib/ruflet_ui/ruflet/ui/controls/materials/iconbutton_control.rb +4 -0
  65. data/lib/ruflet_ui/ruflet/ui/controls/materials/listtile_control.rb +4 -0
  66. data/lib/ruflet_ui/ruflet/ui/controls/materials/map_controls.rb +311 -0
  67. data/lib/ruflet_ui/ruflet/ui/controls/materials/menubar_control.rb +2 -0
  68. data/lib/ruflet_ui/ruflet/ui/controls/materials/menuitembutton_control.rb +6 -0
  69. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationbar_control.rb +11 -1
  70. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationbardestination_control.rb +2 -0
  71. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationdrawer_control.rb +12 -1
  72. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationdrawerdestination_control.rb +2 -0
  73. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationrail_control.rb +21 -0
  74. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationraildestination_control.rb +2 -0
  75. data/lib/ruflet_ui/ruflet/ui/controls/materials/outlinedbutton_control.rb +5 -0
  76. data/lib/ruflet_ui/ruflet/ui/controls/materials/outlinediconbutton_control.rb +8 -0
  77. data/lib/ruflet_ui/ruflet/ui/controls/materials/popupmenubutton_control.rb +4 -0
  78. data/lib/ruflet_ui/ruflet/ui/controls/materials/popupmenuitem_control.rb +6 -0
  79. data/lib/ruflet_ui/ruflet/ui/controls/materials/progressbar_control.rb +9 -0
  80. data/lib/ruflet_ui/ruflet/ui/controls/materials/progressring_control.rb +8 -0
  81. data/lib/ruflet_ui/ruflet/ui/controls/materials/rangeslider_control.rb +13 -0
  82. data/lib/ruflet_ui/ruflet/ui/controls/materials/ruflet_controls.rb +24 -0
  83. data/lib/ruflet_ui/ruflet/ui/controls/materials/searchbar_control.rb +28 -0
  84. data/lib/ruflet_ui/ruflet/ui/controls/materials/segment_control.rb +5 -0
  85. data/lib/ruflet_ui/ruflet/ui/controls/materials/segmentedbutton_control.rb +19 -0
  86. data/lib/ruflet_ui/ruflet/ui/controls/materials/selectionarea_control.rb +4 -0
  87. data/lib/ruflet_ui/ruflet/ui/controls/materials/snackbar_control.rb +5 -0
  88. data/lib/ruflet_ui/ruflet/ui/controls/materials/submenubutton_control.rb +8 -0
  89. data/lib/ruflet_ui/ruflet/ui/controls/materials/tab_control.rb +7 -0
  90. data/lib/ruflet_ui/ruflet/ui/controls/materials/tabbar_control.rb +4 -0
  91. data/lib/ruflet_ui/ruflet/ui/controls/materials/tabbarview_control.rb +7 -0
  92. data/lib/ruflet_ui/ruflet/ui/controls/materials/tabs_control.rb +6 -0
  93. data/lib/ruflet_ui/ruflet/ui/controls/materials/textbutton_control.rb +5 -0
  94. data/lib/ruflet_ui/ruflet/ui/controls/materials/verticaldivider_control.rb +9 -0
  95. data/lib/ruflet_ui/ruflet/ui/controls/materials/video_control.rb +86 -1
  96. data/lib/ruflet_ui/ruflet/ui/controls/ruflet_controls.rb +24 -0
  97. data/lib/ruflet_ui/ruflet/ui/controls/shared/animatedswitcher_control.rb +10 -0
  98. data/lib/ruflet_ui/ruflet/ui/controls/shared/browsercontextmenu_control.rb +12 -1
  99. data/lib/ruflet_ui/ruflet/ui/controls/shared/canvas_control.rb +14 -0
  100. data/lib/ruflet_ui/ruflet/ui/controls/shared/dismissible_control.rb +19 -0
  101. data/lib/ruflet_ui/ruflet/ui/controls/shared/draggable_control.rb +9 -0
  102. data/lib/ruflet_ui/ruflet/ui/controls/shared/dragtarget_control.rb +6 -0
  103. data/lib/ruflet_ui/ruflet/ui/controls/shared/gridview_control.rb +20 -0
  104. data/lib/ruflet_ui/ruflet/ui/controls/shared/image_control.rb +19 -1
  105. data/lib/ruflet_ui/ruflet/ui/controls/shared/interactiveviewer_control.rb +37 -0
  106. data/lib/ruflet_ui/ruflet/ui/controls/shared/listview_control.rb +17 -0
  107. data/lib/ruflet_ui/ruflet/ui/controls/shared/pageview_control.rb +13 -0
  108. data/lib/ruflet_ui/ruflet/ui/controls/shared/placeholder_control.rb +12 -0
  109. data/lib/ruflet_ui/ruflet/ui/controls/shared/reorderabledraghandle_control.rb +4 -0
  110. data/lib/ruflet_ui/ruflet/ui/controls/shared/responsiverow_control.rb +22 -0
  111. data/lib/ruflet_ui/ruflet/ui/controls/shared/safearea_control.rb +11 -0
  112. data/lib/ruflet_ui/ruflet/ui/controls/shared/semantics_control.rb +2 -0
  113. data/lib/ruflet_ui/ruflet/ui/controls/shared/stack_control.rb +3 -0
  114. data/lib/ruflet_ui/ruflet/ui/controls/shared/text_control.rb +20 -1
  115. data/lib/ruflet_ui/ruflet/ui/controls/shared/view_control.rb +8 -0
  116. data/lib/ruflet_ui/ruflet/ui/controls/shared/window_control.rb +16 -0
  117. data/lib/ruflet_ui/ruflet/ui/controls/shared/windowdragarea_control.rb +6 -0
  118. data/lib/ruflet_ui/ruflet/ui/cupertino_control_methods.rb +83 -6
  119. data/lib/ruflet_ui/ruflet/ui/material_control_methods.rb +513 -33
  120. data/lib/ruflet_ui/ruflet/ui/material_control_registry.rb +2 -0
  121. data/lib/ruflet_ui/ruflet/ui/services/ruflet/audio_recorder_control.rb +87 -0
  122. data/lib/ruflet_ui/ruflet/ui/services/ruflet/geolocator_control.rb +85 -0
  123. data/lib/ruflet_ui/ruflet/ui/services/ruflet/permissionhandler_control.rb +55 -0
  124. data/lib/ruflet_ui/ruflet/ui/services/ruflet/securestorage_control.rb +91 -0
  125. data/lib/ruflet_ui/ruflet/ui/services/ruflet/semanticsservice_control.rb +28 -0
  126. data/lib/ruflet_ui/ruflet/ui/services/ruflet/tester_control.rb +126 -0
  127. data/lib/ruflet_ui/ruflet/ui/services/ruflet_services.rb +16 -0
  128. data/lib/ruflet_ui/ruflet/ui/shared_control_forwarders.rb +230 -38
  129. data/lib/ruflet_ui.rb +4 -0
  130. metadata +9 -1
@@ -0,0 +1,311 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ruflet
4
+ module UI
5
+ module Controls
6
+ module RufletComponents
7
+ module MapValueNormalizer
8
+ private
9
+
10
+ def normalize_map_coordinate(value)
11
+ case value
12
+ when Array
13
+ if value.length == 2 && value.all? { |item| item.is_a?(Numeric) }
14
+ { "latitude" => value[0], "longitude" => value[1] }
15
+ else
16
+ value.map { |item| normalize_map_coordinate(item) }
17
+ end
18
+ when Hash
19
+ value.transform_keys(&:to_s).each_with_object({}) do |(key, item), result|
20
+ result[key] = normalize_map_coordinate(item)
21
+ end
22
+ else
23
+ value.respond_to?(:to_h) ? normalize_map_coordinate(value.to_h) : value
24
+ end
25
+ end
26
+ end
27
+
28
+ class MapControl < Ruflet::Control
29
+ include MapValueNormalizer
30
+
31
+ TYPE = "map".freeze
32
+ WIRE = "Map".freeze
33
+
34
+ def initialize(id: nil, layers: nil, initial_center: nil, initial_zoom: nil, min_zoom: nil, max_zoom: nil, interaction_configuration: nil, keep_alive: nil, bgcolor: nil, data: nil, expand: nil, height: nil, key: nil, visible: nil, width: nil, on_init: nil, on_long_press: nil, on_position_change: nil, on_secondary_tap: nil, on_tap: nil)
35
+ props = {}
36
+ props[:layers] = layers unless layers.nil?
37
+ props[:initial_center] = normalize_map_coordinate(initial_center) unless initial_center.nil?
38
+ props[:initial_zoom] = initial_zoom unless initial_zoom.nil?
39
+ props[:min_zoom] = min_zoom unless min_zoom.nil?
40
+ props[:max_zoom] = max_zoom unless max_zoom.nil?
41
+ props[:interaction_configuration] = interaction_configuration unless interaction_configuration.nil?
42
+ props[:keep_alive] = keep_alive unless keep_alive.nil?
43
+ props[:bgcolor] = bgcolor unless bgcolor.nil?
44
+ props[:data] = data unless data.nil?
45
+ props[:expand] = expand unless expand.nil?
46
+ props[:height] = height unless height.nil?
47
+ props[:key] = key unless key.nil?
48
+ props[:visible] = visible unless visible.nil?
49
+ props[:width] = width unless width.nil?
50
+ props[:on_init] = on_init unless on_init.nil?
51
+ props[:on_long_press] = on_long_press unless on_long_press.nil?
52
+ props[:on_position_change] = on_position_change unless on_position_change.nil?
53
+ props[:on_secondary_tap] = on_secondary_tap unless on_secondary_tap.nil?
54
+ props[:on_tap] = on_tap unless on_tap.nil?
55
+ super(type: TYPE, id: id, **props)
56
+ end
57
+
58
+ def center_on(point = nil, coordinates: nil, zoom: nil, duration: nil, curve: nil, cancel_ongoing_animations: nil, timeout: 10, on_result: nil)
59
+ point ||= coordinates
60
+ invoke_map(
61
+ "center_on",
62
+ args: compact_args(
63
+ "point" => normalize_map_coordinate(point),
64
+ "zoom" => zoom,
65
+ "duration" => duration,
66
+ "curve" => curve,
67
+ "cancel_ongoing_animations" => cancel_ongoing_animations
68
+ ),
69
+ timeout: timeout,
70
+ on_result: on_result
71
+ )
72
+ end
73
+
74
+ def move_to(destination = nil, coordinates: nil, zoom: nil, rotation: nil, offset: nil, duration: nil, curve: nil, cancel_ongoing_animations: nil, timeout: 10, on_result: nil)
75
+ destination ||= coordinates
76
+ invoke_map(
77
+ "move_to",
78
+ args: compact_args(
79
+ "destination" => normalize_map_coordinate(destination),
80
+ "zoom" => zoom,
81
+ "rotation" => rotation,
82
+ "offset" => offset,
83
+ "duration" => duration,
84
+ "curve" => curve,
85
+ "cancel_ongoing_animations" => cancel_ongoing_animations
86
+ ),
87
+ timeout: timeout,
88
+ on_result: on_result
89
+ )
90
+ end
91
+
92
+ def zoom_to(zoom, duration: nil, curve: nil, cancel_ongoing_animations: nil, timeout: 10, on_result: nil)
93
+ invoke_map(
94
+ "zoom_to",
95
+ args: compact_args(
96
+ "zoom" => zoom,
97
+ "duration" => duration,
98
+ "curve" => curve,
99
+ "cancel_ongoing_animations" => cancel_ongoing_animations
100
+ ),
101
+ timeout: timeout,
102
+ on_result: on_result
103
+ )
104
+ end
105
+
106
+ def zoom_in(delta: nil, timeout: 10, on_result: nil)
107
+ invoke_map("zoom_in", args: compact_args("delta" => delta), timeout: timeout, on_result: on_result)
108
+ end
109
+
110
+ def zoom_out(delta: nil, timeout: 10, on_result: nil)
111
+ invoke_map("zoom_out", args: compact_args("delta" => delta), timeout: timeout, on_result: on_result)
112
+ end
113
+
114
+ def rotate_from(degree, timeout: 10, on_result: nil)
115
+ invoke_map("rotate_from", args: { "degree" => degree }, timeout: timeout, on_result: on_result)
116
+ end
117
+
118
+ def reset_rotation(timeout: 10, on_result: nil)
119
+ invoke_map("reset_rotation", timeout: timeout, on_result: on_result)
120
+ end
121
+
122
+ private
123
+
124
+ def invoke_map(method_name, args: nil, timeout:, on_result:)
125
+ runtime_page&.invoke(self, method_name, args: args, timeout: timeout, on_result: on_result)
126
+ end
127
+
128
+ def compact_args(hash)
129
+ hash.each_with_object({}) do |(key, value), result|
130
+ result[key] = normalize_service_value(value) unless value.nil?
131
+ end
132
+ end
133
+
134
+ def normalize_service_value(value)
135
+ case value
136
+ when Array
137
+ value.map { |item| normalize_service_value(item) }
138
+ when Hash
139
+ value.transform_keys(&:to_s).each_with_object({}) do |(key, item), result|
140
+ result[key] = normalize_service_value(item) unless item.nil?
141
+ end
142
+ else
143
+ value.respond_to?(:to_h) ? normalize_service_value(value.to_h) : value
144
+ end
145
+ end
146
+ end
147
+
148
+ class TileLayerControl < Ruflet::Control
149
+ TYPE = "tilelayer".freeze
150
+ WIRE = "TileLayer".freeze
151
+
152
+ def initialize(id: nil, url_template: nil, fallback_url: nil, subdomains: nil, additional_options: nil, attribution: nil, max_zoom: nil, min_zoom: nil, retina_mode: nil, tile_bounds: nil, tile_size: nil, user_agent_package_name: nil, visible: nil)
153
+ props = {}
154
+ props[:url_template] = url_template unless url_template.nil?
155
+ props[:fallback_url] = fallback_url unless fallback_url.nil?
156
+ props[:subdomains] = subdomains unless subdomains.nil?
157
+ props[:additional_options] = additional_options unless additional_options.nil?
158
+ props[:attribution] = attribution unless attribution.nil?
159
+ props[:max_zoom] = max_zoom unless max_zoom.nil?
160
+ props[:min_zoom] = min_zoom unless min_zoom.nil?
161
+ props[:retina_mode] = retina_mode unless retina_mode.nil?
162
+ props[:tile_bounds] = tile_bounds unless tile_bounds.nil?
163
+ props[:tile_size] = tile_size unless tile_size.nil?
164
+ props[:user_agent_package_name] = user_agent_package_name unless user_agent_package_name.nil?
165
+ props[:visible] = visible unless visible.nil?
166
+ super(type: TYPE, id: id, **props)
167
+ end
168
+ end
169
+
170
+ class MarkerLayerControl < Ruflet::Control
171
+ TYPE = "markerlayer".freeze
172
+ WIRE = "MarkerLayer".freeze
173
+
174
+ def initialize(id: nil, markers: nil, rotate: nil, visible: nil)
175
+ props = {}
176
+ props[:markers] = markers unless markers.nil?
177
+ props[:rotate] = rotate unless rotate.nil?
178
+ props[:visible] = visible unless visible.nil?
179
+ super(type: TYPE, id: id, **props)
180
+ end
181
+ end
182
+
183
+ class MarkerControl < Ruflet::Control
184
+ include MapValueNormalizer
185
+
186
+ TYPE = "marker".freeze
187
+ WIRE = "Marker".freeze
188
+
189
+ def initialize(id: nil, coordinates: nil, content: nil, height: nil, rotate: nil, width: nil, alignment: nil)
190
+ props = {}
191
+ props[:coordinates] = normalize_map_coordinate(coordinates) unless coordinates.nil?
192
+ props[:content] = content unless content.nil?
193
+ props[:height] = height unless height.nil?
194
+ props[:rotate] = rotate unless rotate.nil?
195
+ props[:width] = width unless width.nil?
196
+ props[:alignment] = alignment unless alignment.nil?
197
+ super(type: TYPE, id: id, **props)
198
+ end
199
+ end
200
+
201
+ class CircleLayerControl < Ruflet::Control
202
+ TYPE = "circlelayer".freeze
203
+ WIRE = "CircleLayer".freeze
204
+
205
+ def initialize(id: nil, circles: nil, visible: nil)
206
+ props = {}
207
+ props[:circles] = circles unless circles.nil?
208
+ props[:visible] = visible unless visible.nil?
209
+ super(type: TYPE, id: id, **props)
210
+ end
211
+ end
212
+
213
+ class CircleMarkerControl < Ruflet::Control
214
+ include MapValueNormalizer
215
+
216
+ TYPE = "circlemarker".freeze
217
+ WIRE = "CircleMarker".freeze
218
+
219
+ def initialize(id: nil, coordinates: nil, radius: nil, color: nil, border_color: nil, border_stroke_width: nil, use_radius_in_meter: nil)
220
+ props = {}
221
+ props[:coordinates] = normalize_map_coordinate(coordinates) unless coordinates.nil?
222
+ props[:radius] = radius unless radius.nil?
223
+ props[:color] = color unless color.nil?
224
+ props[:border_color] = border_color unless border_color.nil?
225
+ props[:border_stroke_width] = border_stroke_width unless border_stroke_width.nil?
226
+ props[:use_radius_in_meter] = use_radius_in_meter unless use_radius_in_meter.nil?
227
+ super(type: TYPE, id: id, **props)
228
+ end
229
+ end
230
+
231
+ class PolylineLayerControl < Ruflet::Control
232
+ TYPE = "polylinelayer".freeze
233
+ WIRE = "PolylineLayer".freeze
234
+
235
+ def initialize(id: nil, polylines: nil, visible: nil)
236
+ props = {}
237
+ props[:polylines] = polylines unless polylines.nil?
238
+ props[:visible] = visible unless visible.nil?
239
+ super(type: TYPE, id: id, **props)
240
+ end
241
+ end
242
+
243
+ class PolylineMarkerControl < Ruflet::Control
244
+ include MapValueNormalizer
245
+
246
+ TYPE = "polylinemarker".freeze
247
+ WIRE = "PolylineMarker".freeze
248
+
249
+ def initialize(id: nil, coordinates: nil, color: nil, stroke_width: nil, border_color: nil, border_stroke_width: nil, gradient_colors: nil, stroke_cap: nil, stroke_join: nil)
250
+ props = {}
251
+ props[:coordinates] = normalize_map_coordinate(coordinates) unless coordinates.nil?
252
+ props[:color] = color unless color.nil?
253
+ props[:stroke_width] = stroke_width unless stroke_width.nil?
254
+ props[:border_color] = border_color unless border_color.nil?
255
+ props[:border_stroke_width] = border_stroke_width unless border_stroke_width.nil?
256
+ props[:gradient_colors] = gradient_colors unless gradient_colors.nil?
257
+ props[:stroke_cap] = stroke_cap unless stroke_cap.nil?
258
+ props[:stroke_join] = stroke_join unless stroke_join.nil?
259
+ super(type: TYPE, id: id, **props)
260
+ end
261
+ end
262
+
263
+ class PolygonLayerControl < Ruflet::Control
264
+ TYPE = "polygonlayer".freeze
265
+ WIRE = "PolygonLayer".freeze
266
+
267
+ def initialize(id: nil, polygons: nil, visible: nil)
268
+ props = {}
269
+ props[:polygons] = polygons unless polygons.nil?
270
+ props[:visible] = visible unless visible.nil?
271
+ super(type: TYPE, id: id, **props)
272
+ end
273
+ end
274
+
275
+ class PolygonMarkerControl < Ruflet::Control
276
+ include MapValueNormalizer
277
+
278
+ TYPE = "polygonmarker".freeze
279
+ WIRE = "PolygonMarker".freeze
280
+
281
+ def initialize(id: nil, coordinates: nil, color: nil, border_color: nil, border_stroke_width: nil, disable_holes_border: nil, label: nil)
282
+ props = {}
283
+ props[:coordinates] = normalize_map_coordinate(coordinates) unless coordinates.nil?
284
+ props[:color] = color unless color.nil?
285
+ props[:border_color] = border_color unless border_color.nil?
286
+ props[:border_stroke_width] = border_stroke_width unless border_stroke_width.nil?
287
+ props[:disable_holes_border] = disable_holes_border unless disable_holes_border.nil?
288
+ props[:label] = label unless label.nil?
289
+ super(type: TYPE, id: id, **props)
290
+ end
291
+ end
292
+
293
+ class SimpleAttributionControl < Ruflet::Control
294
+ TYPE = "simpleattribution".freeze
295
+ WIRE = "SimpleAttribution".freeze
296
+
297
+ def initialize(id: nil, text: nil, alignment: nil, bgcolor: nil, text_style: nil, url: nil, on_click: nil)
298
+ props = {}
299
+ props[:text] = text unless text.nil?
300
+ props[:alignment] = alignment unless alignment.nil?
301
+ props[:bgcolor] = bgcolor unless bgcolor.nil?
302
+ props[:text_style] = text_style unless text_style.nil?
303
+ props[:url] = url unless url.nil?
304
+ props[:on_click] = on_click unless on_click.nil?
305
+ super(type: TYPE, id: id, **props)
306
+ end
307
+ end
308
+ end
309
+ end
310
+ end
311
+ end
@@ -9,6 +9,8 @@ module Ruflet
9
9
  WIRE = "MenuBar".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, clip_behavior: nil, col: nil, controls: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, key: nil, opacity: nil, rtl: nil, style: nil, tooltip: nil, visible: nil)
12
+ clip_behavior = "none" if clip_behavior.nil?
13
+
12
14
  props = {}
13
15
  props[:badge] = badge unless badge.nil?
14
16
  props[:clip_behavior] = clip_behavior unless clip_behavior.nil?
@@ -9,6 +9,12 @@ module Ruflet
9
9
  WIRE = "MenuItemButton".freeze
10
10
 
11
11
  def initialize(id: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, autofocus: nil, badge: nil, bottom: nil, clip_behavior: nil, close_on_click: nil, col: nil, content: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, focus_on_hover: nil, height: nil, key: nil, leading: nil, left: nil, margin: nil, offset: nil, opacity: nil, overflow_axis: nil, right: nil, rotate: nil, rtl: nil, scale: nil, semantic_label: nil, size_change_interval: nil, style: nil, tooltip: nil, top: nil, trailing: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_click: nil, on_focus: nil, on_hover: nil, on_size_change: nil)
12
+ if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
+ raise ArgumentError, "menu_item_button requires visible content"
14
+ end
15
+
16
+ raise ArgumentError, "menu_item_button height must be greater than or equal to 0" unless height.nil? || height >= 0
17
+
12
18
  props = {}
13
19
  props[:align] = align unless align.nil?
14
20
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -8,7 +8,16 @@ module Ruflet
8
8
  TYPE = "navigationbar".freeze
9
9
  WIRE = "NavigationBar".freeze
10
10
 
11
- def initialize(id: nil, adaptive: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, animation_duration: nil, aspect_ratio: nil, badge: nil, bgcolor: nil, border: nil, bottom: nil, col: nil, data: nil, destinations: nil, disabled: nil, elevation: nil, expand: nil, expand_loose: nil, height: nil, indicator_color: nil, indicator_shape: nil, key: nil, label_behavior: nil, label_padding: nil, left: nil, margin: nil, offset: nil, opacity: nil, overlay_color: nil, right: nil, rotate: nil, rtl: nil, scale: nil, selected_index: nil, shadow_color: nil, size_change_interval: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
11
+ def initialize(id: nil, adaptive: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, animation_duration: nil, aspect_ratio: nil, badge: nil, bgcolor: nil, border: nil, bottom: nil, col: nil, data: nil, destinations: nil, disabled: nil, elevation: nil, expand: nil, expand_loose: nil, height: nil, indicator_color: nil, indicator_shape: nil, key: nil, label_behavior: nil, label_padding: nil, left: nil, margin: nil, offset: nil, opacity: nil, overlay_color: nil, right: nil, rotate: nil, rtl: nil, scale: nil, selected_index: nil, shadow_color: nil, size_change_interval: nil, surface_tint_color: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
12
+ visible_destinations = Array(destinations).reject { |destination| destination.respond_to?(:props) && destination.props["visible"] == false }
13
+ unless destinations.nil? || visible_destinations.length >= 2
14
+ raise ArgumentError, "navigation_bar destinations must include at least two visible destinations"
15
+ end
16
+
17
+ unless selected_index.nil? || destinations.nil? || (0...visible_destinations.length).cover?(selected_index)
18
+ raise IndexError, "navigation_bar selected_index is out of range"
19
+ end
20
+
12
21
  props = {}
13
22
  props[:adaptive] = adaptive unless adaptive.nil?
14
23
  props[:align] = align unless align.nil?
@@ -51,6 +60,7 @@ module Ruflet
51
60
  props[:selected_index] = selected_index unless selected_index.nil?
52
61
  props[:shadow_color] = shadow_color unless shadow_color.nil?
53
62
  props[:size_change_interval] = size_change_interval unless size_change_interval.nil?
63
+ props[:surface_tint_color] = surface_tint_color unless surface_tint_color.nil?
54
64
  props[:tooltip] = tooltip unless tooltip.nil?
55
65
  props[:top] = top unless top.nil?
56
66
  props[:visible] = visible unless visible.nil?
@@ -9,6 +9,8 @@ module Ruflet
9
9
  WIRE = "NavigationBarDestination".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, badge: nil, bgcolor: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, icon: nil, key: nil, label: nil, opacity: nil, rtl: nil, selected_icon: nil, tooltip: nil, visible: nil)
12
+ raise ArgumentError, "navigation_bar_destination requires icon" if icon.nil?
13
+
12
14
  props = {}
13
15
  props[:adaptive] = adaptive unless adaptive.nil?
14
16
  props[:badge] = badge unless badge.nil?
@@ -8,7 +8,16 @@ module Ruflet
8
8
  TYPE = "navigationdrawer".freeze
9
9
  WIRE = "NavigationDrawer".freeze
10
10
 
11
- def initialize(id: nil, adaptive: nil, badge: nil, bgcolor: nil, col: nil, controls: nil, data: nil, disabled: nil, elevation: nil, expand: nil, expand_loose: nil, indicator_color: nil, indicator_shape: nil, key: nil, opacity: nil, rtl: nil, selected_index: nil, shadow_color: nil, tile_padding: nil, tooltip: nil, visible: nil, on_change: nil, on_dismiss: nil)
11
+ def initialize(id: nil, adaptive: nil, badge: nil, bgcolor: nil, col: nil, controls: nil, data: nil, disabled: nil, elevation: nil, expand: nil, expand_loose: nil, indicator_color: nil, indicator_shape: nil, key: nil, opacity: nil, rtl: nil, selected_index: nil, shadow_color: nil, surface_tint_color: nil, tile_padding: nil, tooltip: nil, visible: nil, width: nil, on_change: nil, on_dismiss: nil)
12
+ selected_index = 0 if selected_index.nil?
13
+
14
+ {
15
+ elevation: elevation,
16
+ width: width
17
+ }.each do |name, value|
18
+ raise ArgumentError, "navigation_drawer #{name} must be greater than or equal to 0" unless value.nil? || value >= 0
19
+ end
20
+
12
21
  props = {}
13
22
  props[:adaptive] = adaptive unless adaptive.nil?
14
23
  props[:badge] = badge unless badge.nil?
@@ -27,9 +36,11 @@ module Ruflet
27
36
  props[:rtl] = rtl unless rtl.nil?
28
37
  props[:selected_index] = selected_index unless selected_index.nil?
29
38
  props[:shadow_color] = shadow_color unless shadow_color.nil?
39
+ props[:surface_tint_color] = surface_tint_color unless surface_tint_color.nil?
30
40
  props[:tile_padding] = tile_padding unless tile_padding.nil?
31
41
  props[:tooltip] = tooltip unless tooltip.nil?
32
42
  props[:visible] = visible unless visible.nil?
43
+ props[:width] = width unless width.nil?
33
44
  props[:on_change] = on_change unless on_change.nil?
34
45
  props[:on_dismiss] = on_dismiss unless on_dismiss.nil?
35
46
  super(type: TYPE, id: id, **props)
@@ -9,6 +9,8 @@ module Ruflet
9
9
  WIRE = "NavigationDrawerDestination".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, bgcolor: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, icon: nil, key: nil, label: nil, opacity: nil, rtl: nil, selected_icon: nil, tooltip: nil, visible: nil)
12
+ raise ArgumentError, "navigation_drawer_destination requires icon" if icon.nil?
13
+
12
14
  props = {}
13
15
  props[:badge] = badge unless badge.nil?
14
16
  props[:bgcolor] = bgcolor unless bgcolor.nil?
@@ -9,6 +9,27 @@ module Ruflet
9
9
  WIRE = "NavigationRail".freeze
10
10
 
11
11
  def initialize(id: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, badge: nil, bgcolor: nil, bottom: nil, col: nil, data: nil, destinations: nil, disabled: nil, elevation: nil, expand: nil, expand_loose: nil, extended: nil, group_alignment: nil, height: nil, indicator_color: nil, indicator_shape: nil, key: nil, label_type: nil, leading: nil, left: nil, margin: nil, min_extended_width: nil, min_width: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, selected_index: nil, selected_label_text_style: nil, size_change_interval: nil, tooltip: nil, top: nil, trailing: nil, unselected_label_text_style: nil, use_indicator: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
12
+ visible_destinations = Array(destinations).reject { |destination| destination.respond_to?(:props) && destination.props["visible"] == false }
13
+ unless destinations.nil? || visible_destinations.length >= 2
14
+ raise ArgumentError, "navigation_rail destinations must include at least two visible destinations"
15
+ end
16
+
17
+ unless selected_index.nil? || destinations.nil? || (0...visible_destinations.length).cover?(selected_index)
18
+ raise IndexError, "navigation_rail selected_index is out of range"
19
+ end
20
+
21
+ unless group_alignment.nil? || (-1.0..1.0).cover?(group_alignment)
22
+ raise ArgumentError, "navigation_rail group_alignment must be between -1.0 and 1.0"
23
+ end
24
+
25
+ {
26
+ elevation: elevation,
27
+ min_extended_width: min_extended_width,
28
+ min_width: min_width
29
+ }.each do |name, value|
30
+ raise ArgumentError, "navigation_rail #{name} must be greater than or equal to 0" unless value.nil? || value >= 0
31
+ end
32
+
12
33
  props = {}
13
34
  props[:align] = align unless align.nil?
14
35
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -9,6 +9,8 @@ module Ruflet
9
9
  WIRE = "NavigationRailDestination".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, icon: nil, indicator_color: nil, indicator_shape: nil, key: nil, label: nil, opacity: nil, padding: nil, rtl: nil, selected_icon: nil, tooltip: nil, visible: nil)
12
+ raise ArgumentError, "navigation_rail_destination requires icon" if icon.nil?
13
+
12
14
  props = {}
13
15
  props[:badge] = badge unless badge.nil?
14
16
  props[:col] = col unless col.nil?
@@ -9,6 +9,11 @@ module Ruflet
9
9
  WIRE = "OutlinedButton".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, autofocus: nil, badge: nil, bottom: nil, clip_behavior: nil, col: nil, content: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, icon: nil, icon_color: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, style: nil, tooltip: nil, top: nil, url: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_click: nil, on_focus: nil, on_hover: nil, on_long_press: nil, on_size_change: nil)
12
+ raise ArgumentError, "outlined_button requires content or icon" if content.nil? && icon.nil?
13
+
14
+ autofocus = false if autofocus.nil?
15
+ clip_behavior = "none" if clip_behavior.nil?
16
+
12
17
  props = {}
13
18
  props[:adaptive] = adaptive unless adaptive.nil?
14
19
  props[:align] = align unless align.nil?
@@ -9,6 +9,14 @@ module Ruflet
9
9
  WIRE = "OutlinedIconButton".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, align: nil, alignment: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, autofocus: nil, badge: nil, bgcolor: nil, bottom: nil, col: nil, data: nil, disabled: nil, disabled_color: nil, enable_feedback: nil, expand: nil, expand_loose: nil, focus_color: nil, height: nil, highlight_color: nil, hover_color: nil, icon: nil, icon_color: nil, icon_size: nil, key: nil, left: nil, margin: nil, mouse_cursor: nil, offset: nil, opacity: nil, padding: nil, right: nil, rotate: nil, rtl: nil, scale: nil, selected: nil, selected_icon: nil, selected_icon_color: nil, size_change_interval: nil, size_constraints: nil, splash_color: nil, splash_radius: nil, style: nil, tooltip: nil, top: nil, url: nil, visible: nil, visual_density: nil, width: nil, on_animation_end: nil, on_blur: nil, on_click: nil, on_focus: nil, on_hover: nil, on_long_press: nil, on_size_change: nil)
12
+ alignment = "center" if alignment.nil?
13
+ autofocus = false if autofocus.nil?
14
+ icon_size = 24 if icon_size.nil?
15
+ padding = { "all" => 8 } if padding.nil?
16
+ unless splash_radius.nil? || splash_radius.positive?
17
+ raise ArgumentError, "outlined_icon_button splash_radius must be greater than 0"
18
+ end
19
+
12
20
  props = {}
13
21
  props[:adaptive] = adaptive unless adaptive.nil?
14
22
  props[:align] = align unless align.nil?
@@ -9,6 +9,10 @@ module Ruflet
9
9
  WIRE = "PopupMenuButton".freeze
10
10
 
11
11
  def initialize(id: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, badge: nil, bgcolor: nil, bottom: nil, clip_behavior: nil, col: nil, content: nil, data: nil, disabled: nil, elevation: nil, enable_feedback: nil, expand: nil, expand_loose: nil, height: nil, icon: nil, icon_color: nil, icon_size: nil, items: nil, key: nil, left: nil, margin: nil, menu_padding: nil, menu_position: nil, offset: nil, opacity: nil, padding: nil, popup_animation_style: nil, right: nil, rotate: nil, rtl: nil, scale: nil, shadow_color: nil, shape: nil, size_change_interval: nil, size_constraints: nil, splash_radius: nil, style: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_cancel: nil, on_open: nil, on_select: nil, on_size_change: nil)
12
+ { elevation: elevation, icon_size: icon_size, splash_radius: splash_radius }.each do |name, value|
13
+ raise ArgumentError, "popup_menu_button #{name} must be greater than or equal to 0" unless value.nil? || value >= 0
14
+ end
15
+
12
16
  props = {}
13
17
  props[:align] = align unless align.nil?
14
18
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -9,6 +9,12 @@ module Ruflet
9
9
  WIRE = "PopupMenuItem".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, checked: nil, col: nil, content: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, icon: nil, key: nil, label_text_style: nil, mouse_cursor: nil, opacity: nil, padding: nil, rtl: nil, tooltip: nil, visible: nil, on_click: nil)
12
+ if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
+ raise ArgumentError, "popup_menu_item requires visible content"
14
+ end
15
+
16
+ raise ArgumentError, "popup_menu_item height must be greater than or equal to 0" unless height.nil? || height >= 0
17
+
12
18
  props = {}
13
19
  props[:badge] = badge unless badge.nil?
14
20
  props[:checked] = checked unless checked.nil?
@@ -9,6 +9,15 @@ module Ruflet
9
9
  WIRE = "ProgressBar".freeze
10
10
 
11
11
  def initialize(id: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, badge: nil, bar_height: nil, bgcolor: nil, border_radius: nil, bottom: nil, col: nil, color: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, semantics_label: nil, semantics_value: nil, size_change_interval: nil, stop_indicator_color: nil, stop_indicator_radius: nil, tooltip: nil, top: nil, track_gap: nil, value: nil, visible: nil, width: nil, year_2023: nil, on_animation_end: nil, on_size_change: nil)
12
+ {
13
+ bar_height: bar_height,
14
+ semantics_value: semantics_value,
15
+ stop_indicator_radius: stop_indicator_radius,
16
+ track_gap: track_gap
17
+ }.each do |name, numeric_value|
18
+ raise ArgumentError, "progress_bar #{name} must be greater than or equal to 0" unless numeric_value.nil? || numeric_value >= 0
19
+ end
20
+
12
21
  props = {}
13
22
  props[:align] = align unless align.nil?
14
23
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -9,6 +9,14 @@ module Ruflet
9
9
  WIRE = "ProgressRing".freeze
10
10
 
11
11
  def initialize(id: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, badge: nil, bgcolor: nil, bottom: nil, col: nil, color: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, padding: nil, right: nil, rotate: nil, rtl: nil, scale: nil, semantics_label: nil, semantics_value: nil, size_change_interval: nil, size_constraints: nil, stroke_align: nil, stroke_cap: nil, stroke_width: nil, tooltip: nil, top: nil, track_gap: nil, value: nil, visible: nil, width: nil, year_2023: nil, on_animation_end: nil, on_size_change: nil)
12
+ {
13
+ semantics_value: semantics_value,
14
+ stroke_width: stroke_width,
15
+ track_gap: track_gap
16
+ }.each do |name, numeric_value|
17
+ raise ArgumentError, "progress_ring #{name} must be greater than or equal to 0" unless numeric_value.nil? || numeric_value >= 0
18
+ end
19
+
12
20
  props = {}
13
21
  props[:align] = align unless align.nil?
14
22
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -9,6 +9,19 @@ module Ruflet
9
9
  WIRE = "RangeSlider".freeze
10
10
 
11
11
  def initialize(id: nil, active_color: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, badge: nil, bottom: nil, col: nil, data: nil, disabled: nil, divisions: nil, end_value: nil, expand: nil, expand_loose: nil, height: nil, inactive_color: nil, key: nil, label: nil, left: nil, margin: nil, max: nil, min: nil, mouse_cursor: nil, offset: nil, opacity: nil, overlay_color: nil, right: nil, rotate: nil, round: nil, rtl: nil, scale: nil, size_change_interval: nil, start_value: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_change_end: nil, on_change_start: nil, on_size_change: nil)
12
+ min_value = min.nil? ? 0.0 : min
13
+ max_value = max.nil? ? 1.0 : max
14
+
15
+ raise ArgumentError, "range_slider min must be less than or equal to max" if min_value > max_value
16
+ raise ArgumentError, "range_slider divisions must be greater than 0" unless divisions.nil? || divisions > 0
17
+ raise ArgumentError, "range_slider round must be between 0 and 20" unless round.nil? || (0..20).cover?(round)
18
+ raise ArgumentError, "range_slider start_value must be greater than or equal to min" unless start_value.nil? || start_value >= min_value
19
+ raise ArgumentError, "range_slider end_value must be less than or equal to max" unless end_value.nil? || end_value <= max_value
20
+
21
+ unless start_value.nil? || end_value.nil? || start_value <= end_value
22
+ raise ArgumentError, "range_slider start_value must be less than or equal to end_value"
23
+ end
24
+
12
25
  props = {}
13
26
  props[:active_color] = active_color unless active_color.nil?
14
27
  props[:align] = align unless align.nil?
@@ -4,6 +4,7 @@ require_relative "alertdialog_control"
4
4
  require_relative "audio_control"
5
5
  require_relative "appbar_control"
6
6
  require_relative "autocomplete_control"
7
+ require_relative "autocompletesuggestion_control"
7
8
  require_relative "badge_control"
8
9
  require_relative "banner_control"
9
10
  require_relative "chart_controls"
@@ -36,6 +37,7 @@ require_relative "filledtonaliconbutton_control"
36
37
  require_relative "floatingactionbutton_control"
37
38
  require_relative "iconbutton_control"
38
39
  require_relative "listtile_control"
40
+ require_relative "map_controls"
39
41
  require_relative "menubar_control"
40
42
  require_relative "menuitembutton_control"
41
43
  require_relative "navigationbar_control"
@@ -87,7 +89,9 @@ module Ruflet
87
89
  "app_bar" => RufletComponents::AppBarControl,
88
90
  "appbar" => RufletComponents::AppBarControl,
89
91
  "auto_complete" => RufletComponents::AutoCompleteControl,
92
+ "auto_complete_suggestion" => RufletComponents::AutoCompleteSuggestionControl,
90
93
  "autocomplete" => RufletComponents::AutoCompleteControl,
94
+ "autocompletesuggestion" => RufletComponents::AutoCompleteSuggestionControl,
91
95
  "badge" => RufletComponents::BadgeControl,
92
96
  "banner" => RufletComponents::BannerControl,
93
97
  "bottom_app_bar" => RufletComponents::BottomAppBarControl,
@@ -163,6 +167,26 @@ module Ruflet
163
167
  "linechartdatapoint" => RufletComponents::LineChartDataPointControl,
164
168
  "list_tile" => RufletComponents::ListTileControl,
165
169
  "listtile" => RufletComponents::ListTileControl,
170
+ "map" => RufletComponents::MapControl,
171
+ "tile_layer" => RufletComponents::TileLayerControl,
172
+ "tilelayer" => RufletComponents::TileLayerControl,
173
+ "marker_layer" => RufletComponents::MarkerLayerControl,
174
+ "markerlayer" => RufletComponents::MarkerLayerControl,
175
+ "marker" => RufletComponents::MarkerControl,
176
+ "circle_layer" => RufletComponents::CircleLayerControl,
177
+ "circlelayer" => RufletComponents::CircleLayerControl,
178
+ "circle_marker" => RufletComponents::CircleMarkerControl,
179
+ "circlemarker" => RufletComponents::CircleMarkerControl,
180
+ "polyline_layer" => RufletComponents::PolylineLayerControl,
181
+ "polylinelayer" => RufletComponents::PolylineLayerControl,
182
+ "polyline_marker" => RufletComponents::PolylineMarkerControl,
183
+ "polylinemarker" => RufletComponents::PolylineMarkerControl,
184
+ "polygon_layer" => RufletComponents::PolygonLayerControl,
185
+ "polygonlayer" => RufletComponents::PolygonLayerControl,
186
+ "polygon_marker" => RufletComponents::PolygonMarkerControl,
187
+ "polygonmarker" => RufletComponents::PolygonMarkerControl,
188
+ "simple_attribution" => RufletComponents::SimpleAttributionControl,
189
+ "simpleattribution" => RufletComponents::SimpleAttributionControl,
166
190
  "menu_bar" => RufletComponents::MenuBarControl,
167
191
  "menu_item_button" => RufletComponents::MenuItemButtonControl,
168
192
  "menubar" => RufletComponents::MenuBarControl,