ruflet_core 0.0.17 → 0.0.18

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/README.md +2 -30
  3. data/lib/ruflet/version.rb +1 -1
  4. data/lib/ruflet_core.rb +9 -7
  5. data/lib/ruflet_protocol/ruflet/protocol.rb +28 -54
  6. data/lib/ruflet_ui/ruflet/app.rb +1 -1
  7. data/lib/ruflet_ui/ruflet/colors.rb +4 -50
  8. data/lib/ruflet_ui/ruflet/control.rb +69 -64
  9. data/lib/ruflet_ui/ruflet/dsl.rb +10 -3
  10. data/lib/ruflet_ui/ruflet/icons/cupertino/cupertino_icons.rb +2 -2
  11. data/lib/ruflet_ui/ruflet/icons/cupertino_icon_lookup.rb +1 -0
  12. data/lib/ruflet_ui/ruflet/icons/icon_constant_names.rb +29 -0
  13. data/lib/ruflet_ui/ruflet/icons/material/material_icons.rb +2 -2
  14. data/lib/ruflet_ui/ruflet/icons/material_icon_lookup.rb +1 -0
  15. data/lib/ruflet_ui/ruflet/page.rb +308 -526
  16. data/lib/ruflet_ui/ruflet/ui/control_factory.rb +68 -12
  17. data/lib/ruflet_ui/ruflet/ui/control_registry.rb +13 -6
  18. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoactionsheet_control.rb +8 -45
  19. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoactionsheetaction_control.rb +45 -2
  20. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoactivityindicator_control.rb +43 -2
  21. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoalertdialog_control.rb +0 -5
  22. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinobutton_control.rb +59 -4
  23. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinocheckbox_control.rb +56 -1
  24. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinocontextmenu_control.rb +1 -3
  25. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinocontextmenuaction_control.rb +1 -1
  26. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinodatepicker_control.rb +53 -8
  27. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinodialogaction_control.rb +1 -1
  28. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinofilledbutton_control.rb +59 -4
  29. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinolisttile_control.rb +54 -9
  30. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinonavigationbar_control.rb +47 -9
  31. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinopicker_control.rb +52 -10
  32. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoradio_control.rb +52 -1
  33. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinosegmentedbutton_control.rb +49 -1
  34. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoslider_control.rb +50 -5
  35. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoslidingsegmentedbutton_control.rb +46 -1
  36. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinoswitch_control.rb +61 -1
  37. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinotextfield_control.rb +145 -1
  38. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinotimerpicker_control.rb +47 -12
  39. data/lib/ruflet_ui/ruflet/ui/controls/cupertinos/cupertinotintedbutton_control.rb +59 -4
  40. data/lib/ruflet_ui/ruflet/ui/controls/materials/alertdialog_control.rb +8 -45
  41. data/lib/ruflet_ui/ruflet/ui/controls/materials/appbar_control.rb +8 -40
  42. data/lib/ruflet_ui/ruflet/ui/controls/materials/audio_control.rb +16 -5
  43. data/lib/ruflet_ui/ruflet/ui/controls/materials/autocomplete_control.rb +44 -1
  44. data/lib/ruflet_ui/ruflet/ui/controls/materials/badge_control.rb +0 -7
  45. data/lib/ruflet_ui/ruflet/ui/controls/materials/banner_control.rb +0 -7
  46. data/lib/ruflet_ui/ruflet/ui/controls/materials/bottomappbar_control.rb +8 -47
  47. data/lib/ruflet_ui/ruflet/ui/controls/materials/bottomsheet_control.rb +0 -3
  48. data/lib/ruflet_ui/ruflet/ui/controls/materials/button_control.rb +8 -54
  49. data/lib/ruflet_ui/ruflet/ui/controls/materials/card_control.rb +8 -50
  50. data/lib/ruflet_ui/ruflet/ui/controls/materials/chart_controls.rb +19 -0
  51. data/lib/ruflet_ui/ruflet/ui/controls/materials/checkbox_control.rb +9 -60
  52. data/lib/ruflet_ui/ruflet/ui/controls/materials/chip_control.rb +7 -81
  53. data/lib/ruflet_ui/ruflet/ui/controls/materials/circleavatar_control.rb +7 -56
  54. data/lib/ruflet_ui/ruflet/ui/controls/materials/container_control.rb +9 -65
  55. data/lib/ruflet_ui/ruflet/ui/controls/materials/contextmenu_control.rb +50 -4
  56. data/lib/ruflet_ui/ruflet/ui/controls/materials/datacell_control.rb +1 -3
  57. data/lib/ruflet_ui/ruflet/ui/controls/materials/datacolumn_control.rb +1 -3
  58. data/lib/ruflet_ui/ruflet/ui/controls/materials/datatable_control.rb +7 -88
  59. data/lib/ruflet_ui/ruflet/ui/controls/materials/datepicker_control.rb +9 -55
  60. data/lib/ruflet_ui/ruflet/ui/controls/materials/daterangepicker_control.rb +8 -58
  61. data/lib/ruflet_ui/ruflet/ui/controls/materials/divider_control.rb +0 -9
  62. data/lib/ruflet_ui/ruflet/ui/controls/materials/dropdown_control.rb +8 -93
  63. data/lib/ruflet_ui/ruflet/ui/controls/materials/dropdownm2_control.rb +9 -103
  64. data/lib/ruflet_ui/ruflet/ui/controls/materials/dropdownoption_control.rb +0 -2
  65. data/lib/ruflet_ui/ruflet/ui/controls/materials/expansionpanel_control.rb +7 -51
  66. data/lib/ruflet_ui/ruflet/ui/controls/materials/expansionpanellist_control.rb +46 -5
  67. data/lib/ruflet_ui/ruflet/ui/controls/materials/expansiontile_control.rb +69 -3
  68. data/lib/ruflet_ui/ruflet/ui/controls/materials/filledbutton_control.rb +54 -2
  69. data/lib/ruflet_ui/ruflet/ui/controls/materials/fillediconbutton_control.rb +67 -5
  70. data/lib/ruflet_ui/ruflet/ui/controls/materials/filledtonalbutton_control.rb +54 -2
  71. data/lib/ruflet_ui/ruflet/ui/controls/materials/filledtonaliconbutton_control.rb +67 -5
  72. data/lib/ruflet_ui/ruflet/ui/controls/materials/floatingactionbutton_control.rb +7 -69
  73. data/lib/ruflet_ui/ruflet/ui/controls/materials/iconbutton_control.rb +8 -68
  74. data/lib/ruflet_ui/ruflet/ui/controls/materials/listtile_control.rb +8 -74
  75. data/lib/ruflet_ui/ruflet/ui/controls/materials/map_control.rb +99 -0
  76. data/lib/ruflet_ui/ruflet/ui/controls/materials/menuitembutton_control.rb +8 -56
  77. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationbar_control.rb +7 -59
  78. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationdrawer_control.rb +0 -7
  79. data/lib/ruflet_ui/ruflet/ui/controls/materials/navigationrail_control.rb +7 -73
  80. data/lib/ruflet_ui/ruflet/ui/controls/materials/outlinedbutton_control.rb +51 -2
  81. data/lib/ruflet_ui/ruflet/ui/controls/materials/outlinediconbutton_control.rb +67 -5
  82. data/lib/ruflet_ui/ruflet/ui/controls/materials/popupmenubutton_control.rb +8 -61
  83. data/lib/ruflet_ui/ruflet/ui/controls/materials/popupmenuitem_control.rb +0 -6
  84. data/lib/ruflet_ui/ruflet/ui/controls/materials/progressbar_control.rb +8 -56
  85. data/lib/ruflet_ui/ruflet/ui/controls/materials/progressring_control.rb +8 -56
  86. data/lib/ruflet_ui/ruflet/ui/controls/materials/radio_control.rb +9 -54
  87. data/lib/ruflet_ui/ruflet/ui/controls/materials/rangeslider_control.rb +7 -62
  88. data/lib/ruflet_ui/ruflet/ui/controls/materials/reorderablelistview_control.rb +9 -64
  89. data/lib/ruflet_ui/ruflet/ui/controls/materials/ruflet_controls.rb +5 -26
  90. data/lib/ruflet_ui/ruflet/ui/controls/materials/searchbar_control.rb +80 -11
  91. data/lib/ruflet_ui/ruflet/ui/controls/materials/segment_control.rb +0 -3
  92. data/lib/ruflet_ui/ruflet/ui/controls/materials/segmentedbutton_control.rb +7 -64
  93. data/lib/ruflet_ui/ruflet/ui/controls/materials/selectionarea_control.rb +1 -3
  94. data/lib/ruflet_ui/ruflet/ui/controls/materials/slider_control.rb +9 -60
  95. data/lib/ruflet_ui/ruflet/ui/controls/materials/snackbar_control.rb +37 -4
  96. data/lib/ruflet_ui/ruflet/ui/controls/materials/snackbaraction_control.rb +38 -0
  97. data/lib/ruflet_ui/ruflet/ui/controls/materials/spinkit_control.rb +25 -0
  98. data/lib/ruflet_ui/ruflet/ui/controls/materials/submenubutton_control.rb +52 -7
  99. data/lib/ruflet_ui/ruflet/ui/controls/materials/switch_control.rb +9 -61
  100. data/lib/ruflet_ui/ruflet/ui/controls/materials/tab_control.rb +0 -7
  101. data/lib/ruflet_ui/ruflet/ui/controls/materials/tabbar_control.rb +8 -64
  102. data/lib/ruflet_ui/ruflet/ui/controls/materials/tabbarview_control.rb +43 -5
  103. data/lib/ruflet_ui/ruflet/ui/controls/materials/tabs_control.rb +7 -47
  104. data/lib/ruflet_ui/ruflet/ui/controls/materials/textbutton_control.rb +51 -2
  105. data/lib/ruflet_ui/ruflet/ui/controls/materials/textfield_control.rb +9 -132
  106. data/lib/ruflet_ui/ruflet/ui/controls/materials/timepicker_control.rb +10 -34
  107. data/lib/ruflet_ui/ruflet/ui/controls/materials/verticaldivider_control.rb +0 -9
  108. data/lib/ruflet_ui/ruflet/ui/controls/materials/video_control.rb +9 -42
  109. data/lib/ruflet_ui/ruflet/ui/controls/materials/webview_control.rb +1 -114
  110. data/lib/ruflet_ui/ruflet/ui/controls/ruflet_controls.rb +13 -28
  111. data/lib/ruflet_ui/ruflet/ui/controls/shared/animatedswitcher_control.rb +46 -4
  112. data/lib/ruflet_ui/ruflet/ui/controls/shared/arc_control.rb +1 -0
  113. data/lib/ruflet_ui/ruflet/ui/controls/shared/browsercontextmenu_control.rb +1 -12
  114. data/lib/ruflet_ui/ruflet/ui/controls/shared/canvas_control.rb +8 -54
  115. data/lib/ruflet_ui/ruflet/ui/controls/shared/circle_control.rb +1 -0
  116. data/lib/ruflet_ui/ruflet/ui/controls/shared/column_control.rb +9 -51
  117. data/lib/ruflet_ui/ruflet/ui/controls/shared/dismissible_control.rb +52 -12
  118. data/lib/ruflet_ui/ruflet/ui/controls/shared/draggable_control.rb +1 -7
  119. data/lib/ruflet_ui/ruflet/ui/controls/shared/dragtarget_control.rb +1 -3
  120. data/lib/ruflet_ui/ruflet/ui/controls/shared/fletapp_control.rb +9 -46
  121. data/lib/ruflet_ui/ruflet/ui/controls/shared/gesturedetector_control.rb +9 -113
  122. data/lib/ruflet_ui/ruflet/ui/controls/shared/gridview_control.rb +57 -13
  123. data/lib/ruflet_ui/ruflet/ui/controls/shared/hero_control.rb +9 -40
  124. data/lib/ruflet_ui/ruflet/ui/controls/shared/icon_control.rb +9 -48
  125. data/lib/ruflet_ui/ruflet/ui/controls/shared/interactiveviewer_control.rb +9 -53
  126. data/lib/ruflet_ui/ruflet/ui/controls/shared/line_control.rb +1 -0
  127. data/lib/ruflet_ui/ruflet/ui/controls/shared/listview_control.rb +57 -11
  128. data/lib/ruflet_ui/ruflet/ui/controls/shared/markdown_control.rb +9 -54
  129. data/lib/ruflet_ui/ruflet/ui/controls/shared/oval_control.rb +1 -0
  130. data/lib/ruflet_ui/ruflet/ui/controls/shared/page_control.rb +9 -58
  131. data/lib/ruflet_ui/ruflet/ui/controls/shared/pagelet_control.rb +9 -48
  132. data/lib/ruflet_ui/ruflet/ui/controls/shared/pageview_control.rb +50 -4
  133. data/lib/ruflet_ui/ruflet/ui/controls/shared/path_control.rb +1 -0
  134. data/lib/ruflet_ui/ruflet/ui/controls/shared/placeholder_control.rb +44 -9
  135. data/lib/ruflet_ui/ruflet/ui/controls/shared/points_control.rb +1 -0
  136. data/lib/ruflet_ui/ruflet/ui/controls/shared/rect_control.rb +1 -0
  137. data/lib/ruflet_ui/ruflet/ui/controls/shared/reorderabledraghandle_control.rb +43 -4
  138. data/lib/ruflet_ui/ruflet/ui/controls/shared/responsiverow_control.rb +47 -15
  139. data/lib/ruflet_ui/ruflet/ui/controls/shared/rotatedbox_control.rb +97 -0
  140. data/lib/ruflet_ui/ruflet/ui/controls/shared/row_control.rb +9 -51
  141. data/lib/ruflet_ui/ruflet/ui/controls/shared/ruflet_controls.rb +5 -0
  142. data/lib/ruflet_ui/ruflet/ui/controls/shared/safearea_control.rb +48 -4
  143. data/lib/ruflet_ui/ruflet/ui/{services/ruflet → controls/shared}/screenshot_control.rb +18 -2
  144. data/lib/ruflet_ui/ruflet/ui/controls/shared/semantics_control.rb +65 -1
  145. data/lib/ruflet_ui/ruflet/ui/controls/shared/shadermask_control.rb +9 -41
  146. data/lib/ruflet_ui/ruflet/ui/controls/shared/shimmer_control.rb +9 -44
  147. data/lib/ruflet_ui/ruflet/ui/controls/shared/stack_control.rb +44 -1
  148. data/lib/ruflet_ui/ruflet/ui/controls/shared/text_control.rb +9 -35
  149. data/lib/ruflet_ui/ruflet/ui/controls/shared/transparentpointer_control.rb +9 -38
  150. data/lib/ruflet_ui/ruflet/ui/controls/shared/view_control.rb +63 -1
  151. data/lib/ruflet_ui/ruflet/ui/controls/shared/window_control.rb +40 -66
  152. data/lib/ruflet_ui/ruflet/ui/controls/shared/windowdragarea_control.rb +45 -4
  153. data/lib/ruflet_ui/ruflet/ui/material_control_methods.rb +61 -17
  154. data/lib/ruflet_ui/ruflet/ui/material_control_registry.rb +22 -0
  155. data/lib/ruflet_ui/ruflet/ui/services/ruflet/accelerometer_control.rb +1 -0
  156. data/lib/ruflet_ui/ruflet/ui/services/ruflet/audio_recorder_control.rb +14 -36
  157. data/lib/ruflet_ui/ruflet/ui/services/ruflet/barometer_control.rb +1 -0
  158. data/lib/ruflet_ui/ruflet/ui/services/ruflet/battery_control.rb +1 -0
  159. data/lib/ruflet_ui/ruflet/ui/services/ruflet/camera_control.rb +9 -42
  160. data/lib/ruflet_ui/ruflet/ui/services/ruflet/clipboard_control.rb +31 -0
  161. data/lib/ruflet_ui/ruflet/ui/services/ruflet/connectivity_control.rb +1 -0
  162. data/lib/ruflet_ui/ruflet/ui/services/ruflet/filepicker_control.rb +1 -0
  163. data/lib/ruflet_ui/ruflet/ui/services/ruflet/flashlight_control.rb +1 -0
  164. data/lib/ruflet_ui/ruflet/ui/services/ruflet/geolocator_control.rb +14 -30
  165. data/lib/ruflet_ui/ruflet/ui/services/ruflet/gyroscope_control.rb +1 -0
  166. data/lib/ruflet_ui/ruflet/ui/services/ruflet/hapticfeedback_control.rb +1 -0
  167. data/lib/ruflet_ui/ruflet/ui/services/ruflet/magnetometer_control.rb +1 -0
  168. data/lib/ruflet_ui/ruflet/ui/services/ruflet/permissionhandler_control.rb +5 -20
  169. data/lib/ruflet_ui/ruflet/ui/services/ruflet/screenbrightness_control.rb +1 -0
  170. data/lib/ruflet_ui/ruflet/ui/services/ruflet/securestorage_control.rb +22 -49
  171. data/lib/ruflet_ui/ruflet/ui/services/ruflet/semanticsservice_control.rb +20 -15
  172. data/lib/ruflet_ui/ruflet/ui/services/ruflet/shakedetector_control.rb +1 -0
  173. data/lib/ruflet_ui/ruflet/ui/services/ruflet/share_control.rb +1 -0
  174. data/lib/ruflet_ui/ruflet/ui/services/ruflet/sharedpreferences_control.rb +1 -0
  175. data/lib/ruflet_ui/ruflet/ui/services/ruflet/storagepaths_control.rb +1 -0
  176. data/lib/ruflet_ui/ruflet/ui/services/ruflet/urllauncher_control.rb +1 -0
  177. data/lib/ruflet_ui/ruflet/ui/services/ruflet/useraccelerometer_control.rb +1 -0
  178. data/lib/ruflet_ui/ruflet/ui/services/ruflet/wakelock_control.rb +1 -0
  179. data/lib/ruflet_ui/ruflet/ui/services/ruflet_services.rb +0 -7
  180. data/lib/ruflet_ui/ruflet/ui/shared_control_forwarders.rb +20 -1
  181. data/lib/ruflet_ui.rb +12 -10
  182. metadata +7 -8
  183. data/lib/ruflet_ui/ruflet/types/animation.rb +0 -110
  184. data/lib/ruflet_ui/ruflet/ui/controls/materials/codeeditor_control.rb +0 -93
  185. data/lib/ruflet_ui/ruflet/ui/controls/materials/map_controls.rb +0 -311
  186. data/lib/ruflet_ui/ruflet/ui/controls/materials/rive_control.rb +0 -87
  187. data/lib/ruflet_ui/ruflet/ui/controls/materials/spinkit_controls.rb +0 -109
  188. data/lib/ruflet_ui/ruflet/ui/services/ruflet/tester_control.rb +0 -126
@@ -8,71 +8,15 @@ module Ruflet
8
8
  TYPE = "container".freeze
9
9
  WIRE = "Container".freeze
10
10
 
11
- def initialize(id: nil, adaptive: nil, align: nil, alignment: nil, animate: 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, blend_mode: nil, blur: nil, border: nil, border_radius: nil, bottom: nil, clip_behavior: nil, col: nil, color_filter: nil, content: nil, dark_theme: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, foreground_decoration: nil, gradient: nil, height: nil, ignore_interactions: nil, image: nil, ink: nil, ink_color: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, padding: nil, right: nil, rotate: nil, rtl: nil, scale: nil, shadow: nil, shape: nil, size_change_interval: nil, theme: nil, theme_mode: nil, tooltip: nil, top: nil, url: nil, visible: nil, width: nil, on_animation_end: nil, on_click: nil, on_hover: nil, on_long_press: nil, on_size_change: nil, on_tap_down: nil)
12
- props = {}
13
- props[:adaptive] = adaptive unless adaptive.nil?
14
- props[:align] = align unless align.nil?
15
- props[:alignment] = alignment unless alignment.nil?
16
- props[:animate] = animate unless animate.nil?
17
- props[:animate_align] = animate_align unless animate_align.nil?
18
- props[:animate_margin] = animate_margin unless animate_margin.nil?
19
- props[:animate_offset] = animate_offset unless animate_offset.nil?
20
- props[:animate_opacity] = animate_opacity unless animate_opacity.nil?
21
- props[:animate_position] = animate_position unless animate_position.nil?
22
- props[:animate_rotation] = animate_rotation unless animate_rotation.nil?
23
- props[:animate_scale] = animate_scale unless animate_scale.nil?
24
- props[:animate_size] = animate_size unless animate_size.nil?
25
- props[:aspect_ratio] = aspect_ratio unless aspect_ratio.nil?
26
- props[:badge] = badge unless badge.nil?
27
- props[:bgcolor] = bgcolor unless bgcolor.nil?
28
- props[:blend_mode] = blend_mode unless blend_mode.nil?
29
- props[:blur] = blur unless blur.nil?
30
- props[:border] = border unless border.nil?
31
- props[:border_radius] = border_radius unless border_radius.nil?
32
- props[:bottom] = bottom unless bottom.nil?
33
- props[:clip_behavior] = clip_behavior unless clip_behavior.nil?
34
- props[:col] = col unless col.nil?
35
- props[:color_filter] = color_filter unless color_filter.nil?
36
- props[:content] = content unless content.nil?
37
- props[:dark_theme] = dark_theme unless dark_theme.nil?
38
- props[:data] = data unless data.nil?
39
- props[:disabled] = disabled unless disabled.nil?
40
- props[:expand] = expand unless expand.nil?
41
- props[:expand_loose] = expand_loose unless expand_loose.nil?
42
- props[:foreground_decoration] = foreground_decoration unless foreground_decoration.nil?
43
- props[:gradient] = gradient unless gradient.nil?
44
- props[:height] = height unless height.nil?
45
- props[:ignore_interactions] = ignore_interactions unless ignore_interactions.nil?
46
- props[:image] = image unless image.nil?
47
- props[:ink] = ink unless ink.nil?
48
- props[:ink_color] = ink_color unless ink_color.nil?
49
- props[:key] = key unless key.nil?
50
- props[:left] = left unless left.nil?
51
- props[:margin] = margin unless margin.nil?
52
- props[:offset] = offset unless offset.nil?
53
- props[:opacity] = opacity unless opacity.nil?
54
- props[:padding] = padding unless padding.nil?
55
- props[:right] = right unless right.nil?
56
- props[:rotate] = rotate unless rotate.nil?
57
- props[:rtl] = rtl unless rtl.nil?
58
- props[:scale] = scale unless scale.nil?
59
- props[:shadow] = shadow unless shadow.nil?
60
- props[:shape] = shape unless shape.nil?
61
- props[:size_change_interval] = size_change_interval unless size_change_interval.nil?
62
- props[:theme] = theme unless theme.nil?
63
- props[:theme_mode] = theme_mode unless theme_mode.nil?
64
- props[:tooltip] = tooltip unless tooltip.nil?
65
- props[:top] = top unless top.nil?
66
- props[:url] = url unless url.nil?
67
- props[:visible] = visible unless visible.nil?
68
- props[:width] = width unless width.nil?
69
- props[:on_animation_end] = on_animation_end unless on_animation_end.nil?
70
- props[:on_click] = on_click unless on_click.nil?
71
- props[:on_hover] = on_hover unless on_hover.nil?
72
- props[:on_long_press] = on_long_press unless on_long_press.nil?
73
- props[:on_size_change] = on_size_change unless on_size_change.nil?
74
- props[:on_tap_down] = on_tap_down unless on_tap_down.nil?
75
- super(type: TYPE, id: id, **props)
11
+ KEYWORDS = [:adaptive, :align, :alignment, :animate, :animate_align, :animate_margin, :animate_offset, :animate_opacity, :animate_position, :animate_rotation, :animate_scale, :animate_size, :aspect_ratio, :badge, :bgcolor, :blend_mode, :blur, :border, :border_radius, :bottom, :clip_behavior, :col, :color_filter, :content, :dark_theme, :data, :disabled, :expand, :expand_loose, :foreground_decoration, :gradient, :height, :ignore_interactions, :image, :ink, :ink_color, :key, :left, :margin, :offset, :opacity, :padding, :right, :rotate, :rtl, :scale, :shadow, :shape, :size_change_interval, :theme, :theme_mode, :tooltip, :top, :url, :visible, :width, :on_animation_end, :on_click, :on_hover, :on_long_press, :on_size_change, :on_tap_down].freeze
12
+
13
+ def initialize(id: nil, **props)
14
+ compact = {}
15
+ props.each do |key, value|
16
+ raise ArgumentError, "unknown keyword: :#{key}" unless KEYWORDS.include?(key)
17
+ compact[key] = value unless value.nil?
18
+ end
19
+ super(type: TYPE, id: id, **compact)
76
20
  end
77
21
  end
78
22
  end
@@ -8,10 +8,56 @@ module Ruflet
8
8
  TYPE = "contextmenu".freeze
9
9
  WIRE = "ContextMenu".freeze
10
10
 
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, bottom: nil, col: nil, content: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, items: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, primary_items: nil, primary_trigger: nil, right: nil, rotate: nil, rtl: nil, scale: nil, secondary_items: nil, secondary_trigger: nil, size_change_interval: nil, tertiary_items: nil, tertiary_trigger: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_dismiss: nil, on_select: nil, on_size_change: nil)
12
- if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
- raise ArgumentError, "context_menu requires visible content"
14
- end
11
+ KEYWORDS = [:align, :animate_align, :animate_margin, :animate_offset, :animate_opacity, :animate_position, :animate_rotation, :animate_scale, :animate_size, :aspect_ratio, :badge, :bottom, :col, :content, :data, :disabled, :expand, :expand_loose, :height, :items, :key, :left, :margin, :offset, :opacity, :primary_items, :primary_trigger, :right, :rotate, :rtl, :scale, :secondary_items, :secondary_trigger, :size_change_interval, :tertiary_items, :tertiary_trigger, :tooltip, :top, :visible, :width, :on_animation_end, :on_dismiss, :on_select, :on_size_change].freeze
12
+
13
+ def initialize(id: nil, **props)
14
+ unknown = props.keys.reject { |key| KEYWORDS.include?(key) }
15
+ raise ArgumentError, "unknown keywords: #{unknown.join(', ')}" unless unknown.empty?
16
+ align = props[:align]
17
+ animate_align = props[:animate_align]
18
+ animate_margin = props[:animate_margin]
19
+ animate_offset = props[:animate_offset]
20
+ animate_opacity = props[:animate_opacity]
21
+ animate_position = props[:animate_position]
22
+ animate_rotation = props[:animate_rotation]
23
+ animate_scale = props[:animate_scale]
24
+ animate_size = props[:animate_size]
25
+ aspect_ratio = props[:aspect_ratio]
26
+ badge = props[:badge]
27
+ bottom = props[:bottom]
28
+ col = props[:col]
29
+ content = props[:content]
30
+ data = props[:data]
31
+ disabled = props[:disabled]
32
+ expand = props[:expand]
33
+ expand_loose = props[:expand_loose]
34
+ height = props[:height]
35
+ items = props[:items]
36
+ key = props[:key]
37
+ left = props[:left]
38
+ margin = props[:margin]
39
+ offset = props[:offset]
40
+ opacity = props[:opacity]
41
+ primary_items = props[:primary_items]
42
+ primary_trigger = props[:primary_trigger]
43
+ right = props[:right]
44
+ rotate = props[:rotate]
45
+ rtl = props[:rtl]
46
+ scale = props[:scale]
47
+ secondary_items = props[:secondary_items]
48
+ secondary_trigger = props[:secondary_trigger]
49
+ size_change_interval = props[:size_change_interval]
50
+ tertiary_items = props[:tertiary_items]
51
+ tertiary_trigger = props[:tertiary_trigger]
52
+ tooltip = props[:tooltip]
53
+ top = props[:top]
54
+ visible = props[:visible]
55
+ width = props[:width]
56
+ on_animation_end = props[:on_animation_end]
57
+ on_dismiss = props[:on_dismiss]
58
+ on_select = props[:on_select]
59
+ on_size_change = props[:on_size_change]
60
+ raise ArgumentError, "context_menu requires content" if content.nil?
15
61
 
16
62
  props = {}
17
63
  props[:align] = align unless align.nil?
@@ -9,9 +9,7 @@ module Ruflet
9
9
  WIRE = "DataCell".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, col: nil, content: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, key: nil, opacity: nil, placeholder: nil, rtl: nil, show_edit_icon: nil, tooltip: nil, visible: nil, on_double_tap: nil, on_long_press: nil, on_tap: nil, on_tap_cancel: nil, on_tap_down: nil)
12
- if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
- raise ArgumentError, "data_cell requires visible content"
14
- end
12
+ raise ArgumentError, "data_cell requires content" if content.nil?
15
13
 
16
14
  props = {}
17
15
  props[:badge] = badge unless badge.nil?
@@ -9,9 +9,7 @@ module Ruflet
9
9
  WIRE = "DataColumn".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, heading_row_alignment: nil, key: nil, label: nil, numeric: nil, opacity: nil, rtl: nil, tooltip: nil, visible: nil, on_sort: nil)
12
- if label.nil? || (label.respond_to?(:props) && label.props["visible"] == false)
13
- raise ArgumentError, "data_column requires a visible label"
14
- end
12
+ raise ArgumentError, "data_column requires label" if label.nil?
15
13
 
16
14
  props = {}
17
15
  props[:badge] = badge unless badge.nil?
@@ -8,96 +8,15 @@ module Ruflet
8
8
  TYPE = "datatable".freeze
9
9
  WIRE = "DataTable".freeze
10
10
 
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, border: nil, border_radius: nil, bottom: nil, checkbox_horizontal_margin: nil, clip_behavior: nil, col: nil, column_spacing: nil, columns: nil, data: nil, data_row_color: nil, data_row_max_height: nil, data_row_min_height: nil, data_text_style: nil, disabled: nil, divider_thickness: nil, expand: nil, expand_loose: nil, gradient: nil, heading_row_color: nil, heading_row_height: nil, heading_text_style: nil, height: nil, horizontal_lines: nil, horizontal_margin: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rows: nil, rtl: nil, scale: nil, show_bottom_border: nil, show_checkbox_column: nil, size_change_interval: nil, sort_ascending: nil, sort_column_index: nil, tooltip: nil, top: nil, vertical_lines: nil, visible: nil, width: nil, on_animation_end: nil, on_select_all: nil, on_size_change: nil)
12
- visible_columns = visible_controls(columns)
13
- raise ArgumentError, "data_table requires at least one visible columns control" if visible_columns.empty?
11
+ KEYWORDS = [:align, :animate_align, :animate_margin, :animate_offset, :animate_opacity, :animate_position, :animate_rotation, :animate_scale, :animate_size, :aspect_ratio, :badge, :bgcolor, :border, :border_radius, :bottom, :checkbox_horizontal_margin, :clip_behavior, :col, :column_spacing, :columns, :data, :data_row_color, :data_row_max_height, :data_row_min_height, :data_text_style, :disabled, :divider_thickness, :expand, :expand_loose, :gradient, :heading_row_color, :heading_row_height, :heading_text_style, :height, :horizontal_lines, :horizontal_margin, :key, :left, :margin, :offset, :opacity, :right, :rotate, :rows, :rtl, :scale, :show_bottom_border, :show_checkbox_column, :size_change_interval, :sort_ascending, :sort_column_index, :tooltip, :top, :vertical_lines, :visible, :width, :on_animation_end, :on_select_all, :on_size_change].freeze
14
12
 
15
- visible_rows = visible_controls(rows)
16
- visible_rows.each do |row|
17
- next unless row.respond_to?(:props)
18
-
19
- unless visible_controls(row.props["cells"]).length == visible_columns.length
20
- raise ArgumentError, "data_table row cells must match visible columns"
21
- end
22
- end
23
-
24
- {
25
- checkbox_horizontal_margin: checkbox_horizontal_margin,
26
- column_spacing: column_spacing,
27
- data_row_max_height: data_row_max_height,
28
- data_row_min_height: data_row_min_height,
29
- divider_thickness: divider_thickness,
30
- heading_row_height: heading_row_height,
31
- horizontal_margin: horizontal_margin
32
- }.each do |name, value|
33
- raise ArgumentError, "data_table #{name} must be greater than or equal to 0" unless value.nil? || value >= 0
13
+ def initialize(id: nil, **props)
14
+ compact = {}
15
+ props.each do |key, value|
16
+ raise ArgumentError, "unknown keyword: :#{key}" unless KEYWORDS.include?(key)
17
+ compact[key] = value unless value.nil?
34
18
  end
35
-
36
- unless data_row_min_height.nil? || data_row_max_height.nil? || data_row_min_height <= data_row_max_height
37
- raise ArgumentError, "data_table data_row_min_height must be less than or equal to data_row_max_height"
38
- end
39
-
40
- props = {}
41
- props[:align] = align unless align.nil?
42
- props[:animate_align] = animate_align unless animate_align.nil?
43
- props[:animate_margin] = animate_margin unless animate_margin.nil?
44
- props[:animate_offset] = animate_offset unless animate_offset.nil?
45
- props[:animate_opacity] = animate_opacity unless animate_opacity.nil?
46
- props[:animate_position] = animate_position unless animate_position.nil?
47
- props[:animate_rotation] = animate_rotation unless animate_rotation.nil?
48
- props[:animate_scale] = animate_scale unless animate_scale.nil?
49
- props[:animate_size] = animate_size unless animate_size.nil?
50
- props[:aspect_ratio] = aspect_ratio unless aspect_ratio.nil?
51
- props[:badge] = badge unless badge.nil?
52
- props[:bgcolor] = bgcolor unless bgcolor.nil?
53
- props[:border] = border unless border.nil?
54
- props[:border_radius] = border_radius unless border_radius.nil?
55
- props[:bottom] = bottom unless bottom.nil?
56
- props[:checkbox_horizontal_margin] = checkbox_horizontal_margin unless checkbox_horizontal_margin.nil?
57
- props[:clip_behavior] = clip_behavior unless clip_behavior.nil?
58
- props[:col] = col unless col.nil?
59
- props[:column_spacing] = column_spacing unless column_spacing.nil?
60
- props[:columns] = columns unless columns.nil?
61
- props[:data] = data unless data.nil?
62
- props[:data_row_color] = data_row_color unless data_row_color.nil?
63
- props[:data_row_max_height] = data_row_max_height unless data_row_max_height.nil?
64
- props[:data_row_min_height] = data_row_min_height unless data_row_min_height.nil?
65
- props[:data_text_style] = data_text_style unless data_text_style.nil?
66
- props[:disabled] = disabled unless disabled.nil?
67
- props[:divider_thickness] = divider_thickness unless divider_thickness.nil?
68
- props[:expand] = expand unless expand.nil?
69
- props[:expand_loose] = expand_loose unless expand_loose.nil?
70
- props[:gradient] = gradient unless gradient.nil?
71
- props[:heading_row_color] = heading_row_color unless heading_row_color.nil?
72
- props[:heading_row_height] = heading_row_height unless heading_row_height.nil?
73
- props[:heading_text_style] = heading_text_style unless heading_text_style.nil?
74
- props[:height] = height unless height.nil?
75
- props[:horizontal_lines] = horizontal_lines unless horizontal_lines.nil?
76
- props[:horizontal_margin] = horizontal_margin unless horizontal_margin.nil?
77
- props[:key] = key unless key.nil?
78
- props[:left] = left unless left.nil?
79
- props[:margin] = margin unless margin.nil?
80
- props[:offset] = offset unless offset.nil?
81
- props[:opacity] = opacity unless opacity.nil?
82
- props[:right] = right unless right.nil?
83
- props[:rotate] = rotate unless rotate.nil?
84
- props[:rows] = rows unless rows.nil?
85
- props[:rtl] = rtl unless rtl.nil?
86
- props[:scale] = scale unless scale.nil?
87
- props[:show_bottom_border] = show_bottom_border unless show_bottom_border.nil?
88
- props[:show_checkbox_column] = show_checkbox_column unless show_checkbox_column.nil?
89
- props[:size_change_interval] = size_change_interval unless size_change_interval.nil?
90
- props[:sort_ascending] = sort_ascending unless sort_ascending.nil?
91
- props[:sort_column_index] = sort_column_index unless sort_column_index.nil?
92
- props[:tooltip] = tooltip unless tooltip.nil?
93
- props[:top] = top unless top.nil?
94
- props[:vertical_lines] = vertical_lines unless vertical_lines.nil?
95
- props[:visible] = visible unless visible.nil?
96
- props[:width] = width unless width.nil?
97
- props[:on_animation_end] = on_animation_end unless on_animation_end.nil?
98
- props[:on_select_all] = on_select_all unless on_select_all.nil?
99
- props[:on_size_change] = on_size_change unless on_size_change.nil?
100
- super(type: TYPE, id: id, **props)
19
+ super(type: TYPE, id: id, **compact)
101
20
  end
102
21
 
103
22
  private
@@ -8,64 +8,18 @@ module Ruflet
8
8
  TYPE = "datepicker".freeze
9
9
  WIRE = "DatePicker".freeze
10
10
 
11
- def initialize(id: nil, adaptive: nil, badge: nil, barrier_color: nil, cancel_text: nil, col: nil, confirm_text: nil, current_date: nil, data: nil, date_picker_mode: nil, disabled: nil, entry_mode: nil, error_format_text: nil, error_invalid_text: nil, expand: nil, expand_loose: nil, field_hint_text: nil, field_label_text: nil, first_date: nil, help_text: nil, inset_padding: nil, key: nil, keyboard_type: nil, last_date: nil, locale: nil, modal: nil, opacity: nil, open: nil, rtl: nil, switch_to_calendar_icon: nil, switch_to_input_icon: nil, tooltip: nil, value: nil, visible: nil, on_change: nil, on_dismiss: nil, on_entry_mode_change: nil)
12
- validate_date_range!(first_date, last_date, value)
11
+ KEYWORDS = [:adaptive, :badge, :barrier_color, :cancel_text, :col, :confirm_text, :current_date, :data, :date_picker_mode, :disabled, :entry_mode, :error_format_text, :error_invalid_text, :expand, :expand_loose, :field_hint_text, :field_label_text, :first_date, :help_text, :inset_padding, :key, :keyboard_type, :last_date, :locale, :modal, :opacity, :open, :rtl, :switch_to_calendar_icon, :switch_to_input_icon, :tooltip, :value, :visible, :on_change, :on_dismiss, :on_entry_mode_change].freeze
13
12
 
14
- props = {}
15
- props[:adaptive] = adaptive unless adaptive.nil?
16
- props[:badge] = badge unless badge.nil?
17
- props[:barrier_color] = barrier_color unless barrier_color.nil?
18
- props[:cancel_text] = cancel_text unless cancel_text.nil?
19
- props[:col] = col unless col.nil?
20
- props[:confirm_text] = confirm_text unless confirm_text.nil?
21
- props[:current_date] = current_date unless current_date.nil?
22
- props[:data] = data unless data.nil?
23
- props[:date_picker_mode] = date_picker_mode unless date_picker_mode.nil?
24
- props[:disabled] = disabled unless disabled.nil?
25
- props[:entry_mode] = entry_mode unless entry_mode.nil?
26
- props[:error_format_text] = error_format_text unless error_format_text.nil?
27
- props[:error_invalid_text] = error_invalid_text unless error_invalid_text.nil?
28
- props[:expand] = expand unless expand.nil?
29
- props[:expand_loose] = expand_loose unless expand_loose.nil?
30
- props[:field_hint_text] = field_hint_text unless field_hint_text.nil?
31
- props[:field_label_text] = field_label_text unless field_label_text.nil?
32
- props[:first_date] = first_date unless first_date.nil?
33
- props[:help_text] = help_text unless help_text.nil?
34
- props[:inset_padding] = inset_padding unless inset_padding.nil?
35
- props[:key] = key unless key.nil?
36
- props[:keyboard_type] = keyboard_type unless keyboard_type.nil?
37
- props[:last_date] = last_date unless last_date.nil?
38
- props[:locale] = locale unless locale.nil?
39
- props[:modal] = modal unless modal.nil?
40
- props[:opacity] = opacity unless opacity.nil?
41
- props[:open] = open unless open.nil?
42
- props[:rtl] = rtl unless rtl.nil?
43
- props[:switch_to_calendar_icon] = switch_to_calendar_icon unless switch_to_calendar_icon.nil?
44
- props[:switch_to_input_icon] = switch_to_input_icon unless switch_to_input_icon.nil?
45
- props[:tooltip] = tooltip unless tooltip.nil?
46
- props[:value] = value unless value.nil?
47
- props[:visible] = visible unless visible.nil?
48
- props[:on_change] = on_change unless on_change.nil?
49
- props[:on_dismiss] = on_dismiss unless on_dismiss.nil?
50
- props[:on_entry_mode_change] = on_entry_mode_change unless on_entry_mode_change.nil?
51
- super(type: TYPE, id: id, **props)
13
+ def initialize(id: nil, **props)
14
+ compact = {}
15
+ props.each do |key, value|
16
+ raise ArgumentError, "unknown keyword: :#{key}" unless KEYWORDS.include?(key)
17
+ value = Ruflet::Protocol.date_time(value) if %i[value first_date last_date current_date].include?(key)
18
+ compact[key] = value unless value.nil?
19
+ end
20
+ super(type: TYPE, id: id, **compact)
52
21
  end
53
22
 
54
- private
55
-
56
- def validate_date_range!(first_date, last_date, value)
57
- first = first_date || "1900-01-01"
58
- last = last_date || "2050-01-01"
59
- raise ArgumentError, "date_picker first_date must be before or equal to last_date" if date_key(first) > date_key(last)
60
- return if value.nil?
61
-
62
- raise ArgumentError, "date_picker value must be on or after first_date" if date_key(value) < date_key(first)
63
- raise ArgumentError, "date_picker value must be on or before last_date" if date_key(value) > date_key(last)
64
- end
65
-
66
- def date_key(value)
67
- value.respond_to?(:iso8601) ? value.iso8601 : value.to_s
68
- end
69
23
  end
70
24
  end
71
25
  end
@@ -8,68 +8,18 @@ module Ruflet
8
8
  TYPE = "daterangepicker".freeze
9
9
  WIRE = "DateRangePicker".freeze
10
10
 
11
- def initialize(id: nil, adaptive: nil, badge: nil, barrier_color: nil, cancel_text: nil, col: nil, confirm_text: nil, current_date: nil, data: nil, disabled: nil, end_value: nil, entry_mode: nil, error_format_text: nil, error_invalid_range_text: nil, error_invalid_text: nil, expand: nil, expand_loose: nil, field_end_hint_text: nil, field_end_label_text: nil, field_start_hint_text: nil, field_start_label_text: nil, first_date: nil, help_text: nil, key: nil, keyboard_type: nil, last_date: nil, locale: nil, modal: nil, opacity: nil, open: nil, rtl: nil, save_text: nil, start_value: nil, switch_to_calendar_icon: nil, switch_to_input_icon: nil, tooltip: nil, visible: nil, on_change: nil, on_dismiss: nil)
12
- validate_date_range!(first_date, last_date, start_value, end_value)
11
+ KEYWORDS = [:adaptive, :badge, :barrier_color, :cancel_text, :col, :confirm_text, :current_date, :data, :disabled, :end_value, :entry_mode, :error_format_text, :error_invalid_range_text, :error_invalid_text, :expand, :expand_loose, :field_end_hint_text, :field_end_label_text, :field_start_hint_text, :field_start_label_text, :first_date, :help_text, :key, :keyboard_type, :last_date, :locale, :modal, :opacity, :open, :rtl, :save_text, :start_value, :switch_to_calendar_icon, :switch_to_input_icon, :tooltip, :visible, :on_change, :on_dismiss].freeze
13
12
 
14
- props = {}
15
- props[:adaptive] = adaptive unless adaptive.nil?
16
- props[:badge] = badge unless badge.nil?
17
- props[:barrier_color] = barrier_color unless barrier_color.nil?
18
- props[:cancel_text] = cancel_text unless cancel_text.nil?
19
- props[:col] = col unless col.nil?
20
- props[:confirm_text] = confirm_text unless confirm_text.nil?
21
- props[:current_date] = current_date unless current_date.nil?
22
- props[:data] = data unless data.nil?
23
- props[:disabled] = disabled unless disabled.nil?
24
- props[:end_value] = end_value unless end_value.nil?
25
- props[:entry_mode] = entry_mode unless entry_mode.nil?
26
- props[:error_format_text] = error_format_text unless error_format_text.nil?
27
- props[:error_invalid_range_text] = error_invalid_range_text unless error_invalid_range_text.nil?
28
- props[:error_invalid_text] = error_invalid_text unless error_invalid_text.nil?
29
- props[:expand] = expand unless expand.nil?
30
- props[:expand_loose] = expand_loose unless expand_loose.nil?
31
- props[:field_end_hint_text] = field_end_hint_text unless field_end_hint_text.nil?
32
- props[:field_end_label_text] = field_end_label_text unless field_end_label_text.nil?
33
- props[:field_start_hint_text] = field_start_hint_text unless field_start_hint_text.nil?
34
- props[:field_start_label_text] = field_start_label_text unless field_start_label_text.nil?
35
- props[:first_date] = first_date unless first_date.nil?
36
- props[:help_text] = help_text unless help_text.nil?
37
- props[:key] = key unless key.nil?
38
- props[:keyboard_type] = keyboard_type unless keyboard_type.nil?
39
- props[:last_date] = last_date unless last_date.nil?
40
- props[:locale] = locale unless locale.nil?
41
- props[:modal] = modal unless modal.nil?
42
- props[:opacity] = opacity unless opacity.nil?
43
- props[:open] = open unless open.nil?
44
- props[:rtl] = rtl unless rtl.nil?
45
- props[:save_text] = save_text unless save_text.nil?
46
- props[:start_value] = start_value unless start_value.nil?
47
- props[:switch_to_calendar_icon] = switch_to_calendar_icon unless switch_to_calendar_icon.nil?
48
- props[:switch_to_input_icon] = switch_to_input_icon unless switch_to_input_icon.nil?
49
- props[:tooltip] = tooltip unless tooltip.nil?
50
- props[:visible] = visible unless visible.nil?
51
- props[:on_change] = on_change unless on_change.nil?
52
- props[:on_dismiss] = on_dismiss unless on_dismiss.nil?
53
- super(type: TYPE, id: id, **props)
54
- end
55
-
56
- private
57
-
58
- def validate_date_range!(first_date, last_date, start_value, end_value)
59
- first = first_date || "1900-01-01"
60
- last = last_date || "2050-01-01"
61
- raise ArgumentError, "date_range_picker first_date must be before or equal to last_date" if date_key(first) > date_key(last)
62
- raise ArgumentError, "date_range_picker start_value must be on or after first_date" if !start_value.nil? && date_key(start_value) < date_key(first)
63
- raise ArgumentError, "date_range_picker end_value must be on or before last_date" if !end_value.nil? && date_key(end_value) > date_key(last)
64
-
65
- unless start_value.nil? || end_value.nil? || date_key(start_value) <= date_key(end_value)
66
- raise ArgumentError, "date_range_picker start_value must be before or equal to end_value"
13
+ def initialize(id: nil, **props)
14
+ compact = {}
15
+ props.each do |key, value|
16
+ raise ArgumentError, "unknown keyword: :#{key}" unless KEYWORDS.include?(key)
17
+ value = Ruflet::Protocol.date_time(value) if %i[start_value end_value first_date last_date current_date].include?(key)
18
+ compact[key] = value unless value.nil?
67
19
  end
20
+ super(type: TYPE, id: id, **compact)
68
21
  end
69
22
 
70
- def date_key(value)
71
- value.respond_to?(:iso8601) ? value.iso8601 : value.to_s
72
- end
73
23
  end
74
24
  end
75
25
  end
@@ -9,15 +9,6 @@ module Ruflet
9
9
  WIRE = "Divider".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, col: nil, color: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, leading_indent: nil, opacity: nil, radius: nil, rtl: nil, thickness: nil, tooltip: nil, trailing_indent: nil, visible: nil)
12
- {
13
- height: height,
14
- leading_indent: leading_indent,
15
- thickness: thickness,
16
- trailing_indent: trailing_indent
17
- }.each do |name, value|
18
- raise ArgumentError, "divider #{name} must be greater than or equal to 0" unless value.nil? || value >= 0
19
- end
20
-
21
12
  props = {}
22
13
  props[:badge] = badge unless badge.nil?
23
14
  props[:col] = col unless col.nil?
@@ -8,100 +8,15 @@ module Ruflet
8
8
  TYPE = "dropdown".freeze
9
9
  WIRE = "Dropdown".freeze
10
10
 
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, bgcolor: nil, border: nil, border_color: nil, border_radius: nil, border_width: nil, bottom: nil, capitalization: nil, col: nil, color: nil, content_padding: nil, data: nil, dense: nil, disabled: nil, editable: nil, elevation: nil, enable_filter: nil, enable_search: nil, error_style: nil, error_text: nil, expand: nil, expand_loose: nil, expanded_insets: nil, fill_color: nil, filled: nil, focused_border_color: nil, focused_border_width: nil, height: nil, helper_style: nil, helper_text: nil, hint_style: nil, hint_text: nil, hover_color: nil, input_filter: nil, key: nil, label: nil, label_style: nil, leading_icon: nil, left: nil, margin: nil, menu_height: nil, menu_style: nil, menu_width: nil, offset: nil, opacity: nil, options: nil, right: nil, rotate: nil, rtl: nil, scale: nil, selected_suffix: nil, selected_trailing_icon: nil, size_change_interval: nil, text: nil, text_align: nil, text_size: nil, text_style: nil, tooltip: nil, top: nil, trailing_icon: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_focus: nil, on_select: nil, on_size_change: nil, on_text_change: nil)
12
- {
13
- border_width: border_width,
14
- elevation: elevation,
15
- focused_border_width: focused_border_width,
16
- menu_height: menu_height,
17
- menu_width: menu_width,
18
- text_size: text_size
19
- }.each do |name, numeric_value|
20
- raise ArgumentError, "dropdown #{name} must be greater than or equal to 0" unless numeric_value.nil? || numeric_value >= 0
21
- end
11
+ KEYWORDS = [:align, :animate_align, :animate_margin, :animate_offset, :animate_opacity, :animate_position, :animate_rotation, :animate_scale, :animate_size, :aspect_ratio, :autofocus, :badge, :bgcolor, :border, :border_color, :border_radius, :border_width, :bottom, :capitalization, :col, :color, :content_padding, :data, :dense, :disabled, :editable, :elevation, :enable_filter, :enable_search, :error_style, :error_text, :expand, :expand_loose, :expanded_insets, :fill_color, :filled, :focused_border_color, :focused_border_width, :height, :helper_style, :helper_text, :hint_style, :hint_text, :hover_color, :input_filter, :key, :label, :label_style, :leading_icon, :left, :margin, :menu_height, :menu_style, :menu_width, :offset, :opacity, :options, :right, :rotate, :rtl, :scale, :selected_suffix, :selected_trailing_icon, :size_change_interval, :text, :text_align, :text_size, :text_style, :tooltip, :top, :trailing_icon, :value, :visible, :width, :on_animation_end, :on_blur, :on_focus, :on_select, :on_size_change, :on_text_change].freeze
22
12
 
23
- props = {}
24
- props[:align] = align unless align.nil?
25
- props[:animate_align] = animate_align unless animate_align.nil?
26
- props[:animate_margin] = animate_margin unless animate_margin.nil?
27
- props[:animate_offset] = animate_offset unless animate_offset.nil?
28
- props[:animate_opacity] = animate_opacity unless animate_opacity.nil?
29
- props[:animate_position] = animate_position unless animate_position.nil?
30
- props[:animate_rotation] = animate_rotation unless animate_rotation.nil?
31
- props[:animate_scale] = animate_scale unless animate_scale.nil?
32
- props[:animate_size] = animate_size unless animate_size.nil?
33
- props[:aspect_ratio] = aspect_ratio unless aspect_ratio.nil?
34
- props[:autofocus] = autofocus unless autofocus.nil?
35
- props[:badge] = badge unless badge.nil?
36
- props[:bgcolor] = bgcolor unless bgcolor.nil?
37
- props[:border] = border unless border.nil?
38
- props[:border_color] = border_color unless border_color.nil?
39
- props[:border_radius] = border_radius unless border_radius.nil?
40
- props[:border_width] = border_width unless border_width.nil?
41
- props[:bottom] = bottom unless bottom.nil?
42
- props[:capitalization] = capitalization unless capitalization.nil?
43
- props[:col] = col unless col.nil?
44
- props[:color] = color unless color.nil?
45
- props[:content_padding] = content_padding unless content_padding.nil?
46
- props[:data] = data unless data.nil?
47
- props[:dense] = dense unless dense.nil?
48
- props[:disabled] = disabled unless disabled.nil?
49
- props[:editable] = editable unless editable.nil?
50
- props[:elevation] = elevation unless elevation.nil?
51
- props[:enable_filter] = enable_filter unless enable_filter.nil?
52
- props[:enable_search] = enable_search unless enable_search.nil?
53
- props[:error_style] = error_style unless error_style.nil?
54
- props[:error_text] = error_text unless error_text.nil?
55
- props[:expand] = expand unless expand.nil?
56
- props[:expand_loose] = expand_loose unless expand_loose.nil?
57
- props[:expanded_insets] = expanded_insets unless expanded_insets.nil?
58
- props[:fill_color] = fill_color unless fill_color.nil?
59
- props[:filled] = filled unless filled.nil?
60
- props[:focused_border_color] = focused_border_color unless focused_border_color.nil?
61
- props[:focused_border_width] = focused_border_width unless focused_border_width.nil?
62
- props[:height] = height unless height.nil?
63
- props[:helper_style] = helper_style unless helper_style.nil?
64
- props[:helper_text] = helper_text unless helper_text.nil?
65
- props[:hint_style] = hint_style unless hint_style.nil?
66
- props[:hint_text] = hint_text unless hint_text.nil?
67
- props[:hover_color] = hover_color unless hover_color.nil?
68
- props[:input_filter] = input_filter unless input_filter.nil?
69
- props[:key] = key unless key.nil?
70
- props[:label] = label unless label.nil?
71
- props[:label_style] = label_style unless label_style.nil?
72
- props[:leading_icon] = leading_icon unless leading_icon.nil?
73
- props[:left] = left unless left.nil?
74
- props[:margin] = margin unless margin.nil?
75
- props[:menu_height] = menu_height unless menu_height.nil?
76
- props[:menu_style] = menu_style unless menu_style.nil?
77
- props[:menu_width] = menu_width unless menu_width.nil?
78
- props[:offset] = offset unless offset.nil?
79
- props[:opacity] = opacity unless opacity.nil?
80
- props[:options] = options unless options.nil?
81
- props[:right] = right unless right.nil?
82
- props[:rotate] = rotate unless rotate.nil?
83
- props[:rtl] = rtl unless rtl.nil?
84
- props[:scale] = scale unless scale.nil?
85
- props[:selected_suffix] = selected_suffix unless selected_suffix.nil?
86
- props[:selected_trailing_icon] = selected_trailing_icon unless selected_trailing_icon.nil?
87
- props[:size_change_interval] = size_change_interval unless size_change_interval.nil?
88
- props[:text] = text unless text.nil?
89
- props[:text_align] = text_align unless text_align.nil?
90
- props[:text_size] = text_size unless text_size.nil?
91
- props[:text_style] = text_style unless text_style.nil?
92
- props[:tooltip] = tooltip unless tooltip.nil?
93
- props[:top] = top unless top.nil?
94
- props[:trailing_icon] = trailing_icon unless trailing_icon.nil?
95
- props[:value] = value unless value.nil?
96
- props[:visible] = visible unless visible.nil?
97
- props[:width] = width unless width.nil?
98
- props[:on_animation_end] = on_animation_end unless on_animation_end.nil?
99
- props[:on_blur] = on_blur unless on_blur.nil?
100
- props[:on_focus] = on_focus unless on_focus.nil?
101
- props[:on_select] = on_select unless on_select.nil?
102
- props[:on_size_change] = on_size_change unless on_size_change.nil?
103
- props[:on_text_change] = on_text_change unless on_text_change.nil?
104
- super(type: TYPE, id: id, **props)
13
+ def initialize(id: nil, **props)
14
+ compact = {}
15
+ props.each do |key, value|
16
+ raise ArgumentError, "unknown keyword: :#{key}" unless KEYWORDS.include?(key)
17
+ compact[key] = value unless value.nil?
18
+ end
19
+ super(type: TYPE, id: id, **compact)
105
20
  end
106
21
  end
107
22
  end