ruflet_core 0.0.12 → 0.0.13

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 +820 -145
  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 +35 -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 +240 -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 +53 -0
  124. data/lib/ruflet_ui/ruflet/ui/services/ruflet/securestorage_control.rb +89 -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,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ruflet
4
+ module UI
5
+ module Types
6
+ module AnimationCurve
7
+ BOUNCE_IN = "bounceIn"
8
+ BOUNCE_IN_OUT = "bounceInOut"
9
+ BOUNCE_OUT = "bounceOut"
10
+ DECELERATE = "decelerate"
11
+ EASE = "ease"
12
+ EASE_IN = "easeIn"
13
+ EASE_IN_BACK = "easeInBack"
14
+ EASE_IN_CIRC = "easeInCirc"
15
+ EASE_IN_CUBIC = "easeInCubic"
16
+ EASE_IN_EXPO = "easeInExpo"
17
+ EASE_IN_OUT = "easeInOut"
18
+ EASE_IN_OUT_BACK = "easeInOutBack"
19
+ EASE_IN_OUT_CIRC = "easeInOutCirc"
20
+ EASE_IN_OUT_CUBIC = "easeInOutCubic"
21
+ EASE_IN_OUT_CUBIC_EMPHASIZED = "easeInOutCubicEmphasized"
22
+ EASE_IN_OUT_EXPO = "easeInOutExpo"
23
+ EASE_IN_OUT_QUAD = "easeInOutQuad"
24
+ EASE_IN_OUT_QUART = "easeInOutQuart"
25
+ EASE_IN_OUT_QUINT = "easeInOutQuint"
26
+ EASE_IN_OUT_SINE = "easeInOutSine"
27
+ EASE_IN_QUAD = "easeInQuad"
28
+ EASE_IN_QUART = "easeInQuart"
29
+ EASE_IN_QUINT = "easeInQuint"
30
+ EASE_IN_SINE = "easeInSine"
31
+ EASE_IN_TO_LINEAR = "easeInToLinear"
32
+ EASE_OUT = "easeOut"
33
+ EASE_OUT_BACK = "easeOutBack"
34
+ EASE_OUT_CIRC = "easeOutCirc"
35
+ EASE_OUT_CUBIC = "easeOutCubic"
36
+ EASE_OUT_EXPO = "easeOutExpo"
37
+ EASE_OUT_QUAD = "easeOutQuad"
38
+ EASE_OUT_QUART = "easeOutQuart"
39
+ EASE_OUT_QUINT = "easeOutQuint"
40
+ EASE_OUT_SINE = "easeOutSine"
41
+ ELASTIC_IN = "elasticIn"
42
+ ELASTIC_IN_OUT = "elasticInOut"
43
+ ELASTIC_OUT = "elasticOut"
44
+ FAST_LINEAR_TO_SLOW_EASE_IN = "fastLinearToSlowEaseIn"
45
+ FAST_OUT_SLOWIN = "fastOutSlowIn"
46
+ LINEAR = "linear"
47
+ LINEAR_TO_EASE_OUT = "linearToEaseOut"
48
+ SLOW_MIDDLE = "slowMiddle"
49
+
50
+ module_function
51
+
52
+ def values
53
+ constants(false).map { |name| const_get(name) }
54
+ end
55
+ end
56
+
57
+ class Animation
58
+ attr_reader :duration, :curve
59
+
60
+ def initialize(duration: nil, curve: AnimationCurve::LINEAR)
61
+ @duration = duration
62
+ @curve = curve
63
+ end
64
+
65
+ def copy(duration: nil, curve: nil)
66
+ self.class.new(
67
+ duration: duration.nil? ? @duration : duration,
68
+ curve: curve.nil? ? @curve : curve
69
+ )
70
+ end
71
+
72
+ def to_h
73
+ {}.tap do |hash|
74
+ hash["duration"] = duration unless duration.nil?
75
+ hash["curve"] = curve unless curve.nil?
76
+ end
77
+ end
78
+ end
79
+
80
+ class AnimationStyle
81
+ attr_reader :duration, :reverse_duration, :curve, :reverse_curve
82
+
83
+ def initialize(duration: nil, reverse_duration: nil, curve: nil, reverse_curve: nil)
84
+ @duration = duration
85
+ @reverse_duration = reverse_duration
86
+ @curve = curve
87
+ @reverse_curve = reverse_curve
88
+ end
89
+
90
+ def copy(duration: nil, reverse_duration: nil, curve: nil, reverse_curve: nil)
91
+ self.class.new(
92
+ duration: duration.nil? ? @duration : duration,
93
+ reverse_duration: reverse_duration.nil? ? @reverse_duration : reverse_duration,
94
+ curve: curve.nil? ? @curve : curve,
95
+ reverse_curve: reverse_curve.nil? ? @reverse_curve : reverse_curve
96
+ )
97
+ end
98
+
99
+ def to_h
100
+ {}.tap do |hash|
101
+ hash["duration"] = duration unless duration.nil?
102
+ hash["reverse_duration"] = reverse_duration unless reverse_duration.nil?
103
+ hash["curve"] = curve unless curve.nil?
104
+ hash["reverse_curve"] = reverse_curve unless reverse_curve.nil?
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -16,6 +16,7 @@ module Ruflet
16
16
  .each_with_object({}) do |schema, events|
17
17
  schema.instance_method(:initialize).parameters
18
18
  .select { |kind, name| (kind == :key || kind == :keyreq) && name.to_s.start_with?("on_") }
19
+ .reject { |_, name| name.to_s.end_with?("_hint_text") }
19
20
  .each do |_, name|
20
21
  event_name = name.to_s.sub(/\Aon_/, "")
21
22
  normalized = event_name.to_s.sub(/\Aon_/, "")
@@ -9,6 +9,11 @@ module Ruflet
9
9
  WIRE = "CupertinoActionSheet".freeze
10
10
 
11
11
  def initialize(id: nil, actions: 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, cancel: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, margin: nil, message: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, title: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_size_change: nil)
12
+ visible_actions = Array(actions).reject { |action| hidden_control?(action) }
13
+ if visible_actions.empty? && hidden_or_nil?(title) && hidden_or_nil?(message) && hidden_or_nil?(cancel)
14
+ raise ArgumentError, "cupertino_action_sheet requires actions, title, message, or cancel"
15
+ end
16
+
12
17
  props = {}
13
18
  props[:actions] = actions unless actions.nil?
14
19
  props[:align] = align unless align.nil?
@@ -50,6 +55,14 @@ module Ruflet
50
55
  props[:on_size_change] = on_size_change unless on_size_change.nil?
51
56
  super(type: TYPE, id: id, **props)
52
57
  end
58
+
59
+ private
60
+
61
+ def hidden_or_nil?(value) = value.nil? || hidden_control?(value)
62
+
63
+ def hidden_control?(value)
64
+ value.respond_to?(:props) && value.props["visible"] == false
65
+ end
53
66
  end
54
67
  end
55
68
  end
@@ -9,6 +9,10 @@ module Ruflet
9
9
  WIRE = "CupertinoActionSheetAction".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, bottom: nil, col: nil, content: nil, data: nil, default: nil, destructive: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, margin: nil, mouse_cursor: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_click: nil, on_size_change: nil)
12
+ raise ArgumentError, "cupertino_action_sheet_action requires visible content" if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
+ default = false if default.nil?
14
+ destructive = false if destructive.nil?
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,10 @@ module Ruflet
9
9
  WIRE = "CupertinoActivityIndicator".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, animating: nil, aspect_ratio: nil, badge: 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, progress: nil, radius: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_size_change: nil)
12
+ animating = true if animating.nil?
13
+ radius = 10 if radius.nil?
14
+ raise ArgumentError, "cupertino_activity_indicator radius must be greater than 0" unless radius.positive?
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,15 @@ module Ruflet
9
9
  WIRE = "CupertinoAlertDialog".freeze
10
10
 
11
11
  def initialize(id: nil, actions: nil, adaptive: nil, badge: nil, barrier_color: nil, col: nil, content: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, inset_animation: nil, key: nil, modal: nil, opacity: nil, open: nil, rtl: nil, title: nil, tooltip: nil, visible: nil, on_dismiss: nil)
12
+ actions = [] if actions.nil?
13
+ inset_animation = { "duration" => 100, "curve" => "decelerate" } if inset_animation.nil?
14
+ modal = false if modal.nil?
15
+
16
+ visible_actions = Array(actions).reject { |action| hidden_control?(action) }
17
+ if visible_actions.empty? && hidden_or_nil?(title) && hidden_or_nil?(content)
18
+ raise ArgumentError, "cupertino_alert_dialog requires title, content, or actions"
19
+ end
20
+
12
21
  props = {}
13
22
  props[:actions] = actions unless actions.nil?
14
23
  props[:adaptive] = adaptive unless adaptive.nil?
@@ -32,6 +41,14 @@ module Ruflet
32
41
  props[:on_dismiss] = on_dismiss unless on_dismiss.nil?
33
42
  super(type: TYPE, id: id, **props)
34
43
  end
44
+
45
+ private
46
+
47
+ def hidden_or_nil?(value) = value.nil? || hidden_control?(value)
48
+
49
+ def hidden_control?(value)
50
+ value.respond_to?(:props) && value.props["visible"] == false
51
+ end
35
52
  end
36
53
  end
37
54
  end
@@ -9,6 +9,9 @@ module Ruflet
9
9
  WIRE = "CupertinoAppBar".freeze
10
10
 
11
11
  def initialize(id: nil, automatic_background_visibility: nil, automatically_imply_leading: nil, automatically_imply_title: nil, badge: nil, bgcolor: nil, border: nil, brightness: nil, col: nil, data: nil, disabled: nil, enable_background_filter_blur: nil, expand: nil, expand_loose: nil, key: nil, large: nil, leading: nil, opacity: nil, padding: nil, previous_page_title: nil, rtl: nil, title: nil, tooltip: nil, trailing: nil, transition_between_routes: nil, visible: nil)
12
+ large = false if large.nil?
13
+ transition_between_routes = true if transition_between_routes.nil?
14
+
12
15
  props = {}
13
16
  props[:automatic_background_visibility] = automatic_background_visibility unless automatic_background_visibility.nil?
14
17
  props[:automatically_imply_leading] = automatically_imply_leading unless automatically_imply_leading.nil?
@@ -9,6 +9,10 @@ module Ruflet
9
9
  WIRE = "CupertinoBottomSheet".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, badge: nil, bgcolor: nil, col: nil, content: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, modal: nil, opacity: nil, open: nil, padding: nil, rtl: nil, tooltip: nil, visible: nil, on_dismiss: nil)
12
+ raise ArgumentError, "cupertino_bottom_sheet content is required" if content.nil?
13
+
14
+ modal = false if modal.nil?
15
+
12
16
  props = {}
13
17
  props[:adaptive] = adaptive unless adaptive.nil?
14
18
  props[:badge] = badge unless badge.nil?
@@ -9,6 +9,15 @@ module Ruflet
9
9
  WIRE = "CupertinoButton".freeze
10
10
 
11
11
  def initialize(id: 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, border_radius: nil, bottom: nil, col: nil, color: nil, content: nil, data: nil, disabled: nil, disabled_bgcolor: nil, expand: nil, expand_loose: nil, focus_color: nil, height: nil, icon: nil, icon_color: nil, key: nil, left: nil, margin: nil, min_size: nil, mouse_cursor: nil, offset: nil, opacity: nil, opacity_on_click: nil, padding: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size: nil, size_change_interval: 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_long_press: nil, on_size_change: nil)
12
+ alignment = "center" if alignment.nil?
13
+ autofocus = false if autofocus.nil?
14
+ border_radius = { "all" => 8.0 } if border_radius.nil?
15
+ opacity_on_click = 0.4 if opacity_on_click.nil?
16
+ size = "large" if size.nil?
17
+ unless opacity_on_click.respond_to?(:between?) && opacity_on_click.between?(0.0, 1.0)
18
+ raise ArgumentError, "cupertino_button opacity_on_click must be between 0.0 and 1.0"
19
+ end
20
+
12
21
  props = {}
13
22
  props[:align] = align unless align.nil?
14
23
  props[:alignment] = alignment unless alignment.nil?
@@ -9,6 +9,12 @@ module Ruflet
9
9
  WIRE = "CupertinoCheckbox".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, autofocus: nil, badge: nil, border_side: nil, bottom: nil, check_color: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, fill_color: nil, focus_color: nil, height: nil, key: nil, label: nil, label_position: nil, left: nil, margin: nil, mouse_cursor: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, semantics_label: nil, shape: nil, size_change_interval: nil, spacing: nil, tooltip: nil, top: nil, tristate: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_change: nil, on_focus: nil, on_size_change: nil)
12
+ autofocus = false if autofocus.nil?
13
+ label_position = "right" if label_position.nil?
14
+ spacing = 10 if spacing.nil?
15
+ tristate = false if tristate.nil?
16
+ value = false if value.nil?
17
+
12
18
  props = {}
13
19
  props[:active_color] = active_color unless active_color.nil?
14
20
  props[:align] = align unless align.nil?
@@ -9,6 +9,11 @@ module Ruflet
9
9
  WIRE = "CupertinoContextMenu".freeze
10
10
 
11
11
  def initialize(id: nil, actions: nil, adaptive: nil, badge: nil, col: nil, content: nil, data: nil, disabled: nil, enable_haptic_feedback: nil, expand: nil, expand_loose: nil, key: nil, opacity: nil, rtl: nil, tooltip: nil, visible: nil)
12
+ enable_haptic_feedback = true if enable_haptic_feedback.nil?
13
+ visible_actions = Array(actions).reject { |action| hidden_control?(action) }
14
+ raise ArgumentError, "cupertino_context_menu requires visible content" if content.nil? || hidden_control?(content)
15
+ raise ArgumentError, "cupertino_context_menu requires at least one visible action" if visible_actions.empty?
16
+
12
17
  props = {}
13
18
  props[:actions] = actions unless actions.nil?
14
19
  props[:adaptive] = adaptive unless adaptive.nil?
@@ -27,6 +32,12 @@ module Ruflet
27
32
  props[:visible] = visible unless visible.nil?
28
33
  super(type: TYPE, id: id, **props)
29
34
  end
35
+
36
+ private
37
+
38
+ def hidden_control?(value)
39
+ value.respond_to?(:props) && value.props["visible"] == false
40
+ end
30
41
  end
31
42
  end
32
43
  end
@@ -9,6 +9,10 @@ module Ruflet
9
9
  WIRE = "CupertinoContextMenuAction".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, badge: nil, col: nil, content: nil, data: nil, default: nil, destructive: nil, disabled: nil, expand: nil, expand_loose: nil, key: nil, opacity: nil, rtl: nil, tooltip: nil, trailing_icon: nil, visible: nil, on_click: nil)
12
+ raise ArgumentError, "cupertino_context_menu_action requires visible content" if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
+ default = false if default.nil?
14
+ destructive = false if destructive.nil?
15
+
12
16
  props = {}
13
17
  props[:adaptive] = adaptive unless adaptive.nil?
14
18
  props[:badge] = badge unless badge.nil?
@@ -9,6 +9,20 @@ module Ruflet
9
9
  WIRE = "CupertinoDatePicker".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, date_order: nil, date_picker_mode: nil, disabled: nil, expand: nil, expand_loose: nil, first_date: nil, height: nil, item_extent: nil, key: nil, last_date: nil, left: nil, locale: nil, margin: nil, maximum_year: nil, minimum_year: nil, minute_interval: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, show_day_of_week: nil, size_change_interval: nil, tooltip: nil, top: nil, use_24h_format: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
12
+ date_picker_mode = "date_and_time" if date_picker_mode.nil?
13
+ item_extent = 32.0 if item_extent.nil?
14
+ minimum_year = 1 if minimum_year.nil?
15
+ minute_interval = 1 if minute_interval.nil?
16
+ show_day_of_week = false if show_day_of_week.nil?
17
+ use_24h_format = false if use_24h_format.nil?
18
+ raise ArgumentError, "cupertino_date_picker item_extent must be greater than 0" unless item_extent.positive?
19
+ unless minute_interval.positive? && (60 % minute_interval).zero?
20
+ raise ArgumentError, "cupertino_date_picker minute_interval must be a positive factor of 60"
21
+ end
22
+ if show_day_of_week && date_picker_mode != "date"
23
+ raise ArgumentError, "cupertino_date_picker show_day_of_week requires date_picker_mode: 'date'"
24
+ end
25
+
12
26
  props = {}
13
27
  props[:align] = align unless align.nil?
14
28
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -9,6 +9,10 @@ module Ruflet
9
9
  WIRE = "CupertinoDialogAction".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, col: nil, content: nil, data: nil, default: nil, destructive: nil, disabled: nil, expand: nil, expand_loose: nil, key: nil, opacity: nil, rtl: nil, text_style: nil, tooltip: nil, visible: nil, on_click: nil)
12
+ raise ArgumentError, "cupertino_dialog_action requires visible content" if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
+ default = false if default.nil?
14
+ destructive = false if destructive.nil?
15
+
12
16
  props = {}
13
17
  props[:badge] = badge unless badge.nil?
14
18
  props[:col] = col unless col.nil?
@@ -9,6 +9,15 @@ module Ruflet
9
9
  WIRE = "CupertinoFilledButton".freeze
10
10
 
11
11
  def initialize(id: 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, border_radius: nil, bottom: nil, col: nil, color: nil, content: nil, data: nil, disabled: nil, disabled_bgcolor: nil, expand: nil, expand_loose: nil, focus_color: nil, height: nil, icon: nil, icon_color: nil, key: nil, left: nil, margin: nil, min_size: nil, mouse_cursor: nil, offset: nil, opacity: nil, opacity_on_click: nil, padding: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size: nil, size_change_interval: 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_long_press: nil, on_size_change: nil)
12
+ alignment = "center" if alignment.nil?
13
+ autofocus = false if autofocus.nil?
14
+ border_radius = { "all" => 8.0 } if border_radius.nil?
15
+ opacity_on_click = 0.4 if opacity_on_click.nil?
16
+ size = "large" if size.nil?
17
+ unless opacity_on_click.respond_to?(:between?) && opacity_on_click.between?(0.0, 1.0)
18
+ raise ArgumentError, "cupertino_filled_button opacity_on_click must be between 0.0 and 1.0"
19
+ end
20
+
12
21
  props = {}
13
22
  props[:align] = align unless align.nil?
14
23
  props[:alignment] = alignment unless alignment.nil?
@@ -9,6 +9,18 @@ module Ruflet
9
9
  WIRE = "CupertinoListTile".freeze
10
10
 
11
11
  def initialize(id: nil, additional_info: 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, bgcolor_activated: nil, bottom: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, leading: nil, leading_size: nil, leading_to_title: nil, left: nil, margin: nil, notched: nil, offset: nil, opacity: nil, padding: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, subtitle: nil, title: nil, toggle_inputs: nil, tooltip: nil, top: nil, trailing: nil, url: nil, visible: nil, width: nil, on_animation_end: nil, on_click: nil, on_size_change: nil)
12
+ raise ArgumentError, "cupertino_list_tile requires visible title" if title.nil? || (title.respond_to?(:props) && title.props["visible"] == false)
13
+ notched = false if notched.nil?
14
+ leading_size = notched ? 30.0 : 28.0 if leading_size.nil?
15
+ leading_to_title = notched ? 12.0 : 16.0 if leading_to_title.nil?
16
+ toggle_inputs = false if toggle_inputs.nil?
17
+ {
18
+ leading_size: leading_size,
19
+ leading_to_title: leading_to_title
20
+ }.each do |name, value|
21
+ raise ArgumentError, "cupertino_list_tile #{name} must be greater than or equal to 0" if value.negative?
22
+ end
23
+
12
24
  props = {}
13
25
  props[:additional_info] = additional_info unless additional_info.nil?
14
26
  props[:align] = align unless align.nil?
@@ -9,6 +9,17 @@ module Ruflet
9
9
  WIRE = "CupertinoNavigationBar".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, bgcolor: nil, border: nil, bottom: nil, col: nil, data: nil, destinations: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, icon_size: nil, inactive_color: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, selected_index: nil, size_change_interval: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
12
+ icon_size = 30 if icon_size.nil?
13
+ selected_index = 0 if selected_index.nil?
14
+ visible_destinations = Array(destinations).reject { |destination| destination.respond_to?(:props) && destination.props["visible"] == false }
15
+ unless destinations.nil? || visible_destinations.length >= 2
16
+ raise ArgumentError, "cupertino_navigation_bar destinations must include at least two visible destinations"
17
+ end
18
+
19
+ unless destinations.nil? || (0...visible_destinations.length).cover?(selected_index)
20
+ raise IndexError, "cupertino_navigation_bar selected_index is out of range"
21
+ end
22
+
12
23
  props = {}
13
24
  props[:active_color] = active_color unless active_color.nil?
14
25
  props[:align] = align unless align.nil?
@@ -9,6 +9,24 @@ module Ruflet
9
9
  WIRE = "CupertinoPicker".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, controls: nil, data: nil, default_selection_overlay_bgcolor: nil, diameter_ratio: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, item_extent: nil, key: nil, left: nil, looping: nil, magnification: nil, margin: nil, off_axis_fraction: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, selected_index: nil, selection_overlay: nil, size_change_interval: nil, squeeze: nil, tooltip: nil, top: nil, use_magnifier: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
12
+ diameter_ratio = 1.07 if diameter_ratio.nil?
13
+ item_extent = 32.0 if item_extent.nil?
14
+ looping = false if looping.nil?
15
+ magnification = 1.0 if magnification.nil?
16
+ off_axis_fraction = 0.0 if off_axis_fraction.nil?
17
+ selected_index = 0 if selected_index.nil?
18
+ squeeze = 1.45 if squeeze.nil?
19
+ use_magnifier = false if use_magnifier.nil?
20
+
21
+ {
22
+ item_extent: item_extent,
23
+ magnification: magnification,
24
+ squeeze: squeeze
25
+ }.each do |name, value|
26
+ raise ArgumentError, "cupertino_picker #{name} must be greater than 0" unless value.positive?
27
+ end
28
+ raise ArgumentError, "cupertino_picker selected_index must be greater than or equal to 0" if selected_index.negative?
29
+
12
30
  props = {}
13
31
  props[:align] = align unless align.nil?
14
32
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -9,6 +9,12 @@ module Ruflet
9
9
  WIRE = "CupertinoRadio".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, autofocus: nil, badge: nil, bottom: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, fill_color: nil, focus_color: nil, height: nil, inactive_color: nil, key: nil, label: nil, label_position: nil, left: nil, margin: nil, mouse_cursor: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, toggleable: nil, tooltip: nil, top: nil, use_checkmark_style: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_focus: nil, on_size_change: nil)
12
+ autofocus = false if autofocus.nil?
13
+ label_position = "right" if label_position.nil?
14
+ toggleable = false if toggleable.nil?
15
+ use_checkmark_style = false if use_checkmark_style.nil?
16
+ value = "" if value.nil?
17
+
12
18
  props = {}
13
19
  props[:active_color] = active_color unless active_color.nil?
14
20
  props[:align] = align unless align.nil?
@@ -9,6 +9,8 @@ module Ruflet
9
9
  WIRE = "CupertinoSegmentedButton".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, border_color: nil, bottom: nil, click_color: nil, col: nil, controls: nil, data: nil, disabled: nil, disabled_color: nil, disabled_text_color: 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, selected_color: nil, selected_index: nil, size_change_interval: nil, tooltip: nil, top: nil, unselected_color: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
12
+ selected_index = 0 if selected_index.nil?
13
+
12
14
  props = {}
13
15
  props[:align] = align unless align.nil?
14
16
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -9,6 +9,13 @@ module Ruflet
9
9
  WIRE = "CupertinoSlider".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, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, margin: nil, max: nil, min: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, thumb_color: nil, tooltip: nil, top: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_change: nil, on_change_end: nil, on_change_start: nil, on_focus: nil, on_size_change: nil)
12
+ min = 0.0 if min.nil?
13
+ max = 1.0 if max.nil?
14
+ raise ArgumentError, "cupertino_slider min must be less than or equal to max" if min > max
15
+ raise ArgumentError, "cupertino_slider divisions must be greater than 0" unless divisions.nil? || divisions.positive?
16
+ raise ArgumentError, "cupertino_slider value must be greater than or equal to min" unless value.nil? || value >= min
17
+ raise ArgumentError, "cupertino_slider value must be less than or equal to max" unless value.nil? || value <= max
18
+
12
19
  props = {}
13
20
  props[:active_color] = active_color unless active_color.nil?
14
21
  props[:align] = align unless align.nil?
@@ -9,6 +9,9 @@ module Ruflet
9
9
  WIRE = "CupertinoSlidingSegmentedButton".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, controls: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, padding: nil, proportional_width: nil, right: nil, rotate: nil, rtl: nil, scale: nil, selected_index: nil, size_change_interval: nil, thumb_color: nil, tooltip: nil, top: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
12
+ proportional_width = false if proportional_width.nil?
13
+ selected_index = 0 if selected_index.nil?
14
+
12
15
  props = {}
13
16
  props[:align] = align unless align.nil?
14
17
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -8,7 +8,13 @@ module Ruflet
8
8
  TYPE = "cupertinoswitch".freeze
9
9
  WIRE = "CupertinoSwitch".freeze
10
10
 
11
- def initialize(id: nil, active_thumb_image_src: nil, active_track_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, autofocus: nil, badge: nil, bottom: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, focus_color: nil, height: nil, inactive_thumb_color: nil, inactive_thumb_image_src: nil, inactive_track_color: nil, key: nil, label: nil, label_position: nil, left: nil, margin: nil, off_label_color: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, thumb_color: nil, thumb_icon: nil, tooltip: nil, top: nil, track_outline_color: nil, track_outline_width: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_change: nil, on_focus: nil, on_image_error: nil, on_label_color: nil, on_size_change: nil)
11
+ def initialize(id: nil, active_thumb_image: nil, active_thumb_image_src: nil, active_track_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, autofocus: nil, badge: nil, bottom: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, focus_color: nil, height: nil, inactive_thumb_color: nil, inactive_thumb_image: nil, inactive_thumb_image_src: nil, inactive_track_color: nil, key: nil, label: nil, label_position: nil, left: nil, margin: nil, off_label_color: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size_change_interval: nil, thumb_color: nil, thumb_icon: nil, tooltip: nil, top: nil, track_outline_color: nil, track_outline_width: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_change: nil, on_focus: nil, on_image_error: nil, on_label_color: nil, on_size_change: nil)
12
+ active_thumb_image_src = active_thumb_image if active_thumb_image_src.nil?
13
+ inactive_thumb_image_src = inactive_thumb_image if inactive_thumb_image_src.nil?
14
+ autofocus = false if autofocus.nil?
15
+ label_position = "right" if label_position.nil?
16
+ value = false if value.nil?
17
+
12
18
  props = {}
13
19
  props[:active_thumb_image_src] = active_thumb_image_src unless active_thumb_image_src.nil?
14
20
  props[:active_track_color] = active_track_color unless active_track_color.nil?
@@ -9,6 +9,13 @@ module Ruflet
9
9
  WIRE = "CupertinoTextField".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, align: nil, align_label_with_hint: nil, always_call_on_tap: nil, animate_align: nil, animate_cursor_opacity: 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, autocorrect: nil, autofill_hints: nil, autofocus: nil, badge: nil, bgcolor: nil, blend_mode: nil, border: nil, border_color: nil, border_radius: nil, border_width: nil, bottom: nil, can_request_focus: nil, can_reveal_password: nil, capitalization: nil, clear_button_semantics_label: nil, clear_button_visibility_mode: nil, clip_behavior: nil, col: nil, collapsed: nil, color: nil, content_padding: nil, counter: nil, counter_style: nil, cursor_color: nil, cursor_error_color: nil, cursor_height: nil, cursor_radius: nil, cursor_width: nil, data: nil, dense: nil, disabled: nil, enable_ime_personalized_learning: nil, enable_interactive_selection: nil, enable_stylus_handwriting: nil, enable_suggestions: nil, error: nil, error_max_lines: nil, error_style: nil, expand: nil, expand_loose: nil, fill_color: nil, filled: nil, fit_parent_size: nil, focus_color: nil, focused_bgcolor: nil, focused_border_color: nil, focused_border_width: nil, focused_color: nil, gradient: nil, height: nil, helper: nil, helper_max_lines: nil, helper_style: nil, hint_fade_duration: nil, hint_max_lines: nil, hint_style: nil, hint_text: nil, hover_color: nil, icon: nil, ignore_pointers: nil, ignore_up_down_keys: nil, image: nil, input_filter: nil, key: nil, keyboard_brightness: nil, keyboard_type: nil, label: nil, label_style: nil, left: nil, margin: nil, max_length: nil, max_lines: nil, min_lines: nil, mouse_cursor: nil, multiline: nil, obscuring_character: nil, offset: nil, opacity: nil, padding: nil, password: nil, placeholder_style: nil, placeholder_text: nil, prefix: nil, prefix_icon: nil, prefix_icon_size_constraints: nil, prefix_style: nil, prefix_visibility_mode: nil, read_only: nil, right: nil, rotate: nil, rtl: nil, scale: nil, scroll_padding: nil, selection: nil, selection_color: nil, shadows: nil, shift_enter: nil, show_cursor: nil, size_change_interval: nil, size_constraints: nil, smart_dashes_type: nil, smart_quotes_type: nil, strut_style: nil, suffix: nil, suffix_icon: nil, suffix_icon_size_constraints: nil, suffix_style: nil, suffix_visibility_mode: nil, text_align: nil, text_size: nil, text_style: nil, text_vertical_align: nil, tooltip: nil, top: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_blur: nil, on_change: nil, on_click: nil, on_focus: nil, on_selection_change: nil, on_size_change: nil, on_submit: nil, on_tap_outside: nil)
12
+ clear_button_semantics_label = "Clear" if clear_button_semantics_label.nil?
13
+ clear_button_visibility_mode = "never" if clear_button_visibility_mode.nil?
14
+ padding = { "all" => 7 } if padding.nil?
15
+ placeholder_text = "" if placeholder_text.nil?
16
+ prefix_visibility_mode = "always" if prefix_visibility_mode.nil?
17
+ suffix_visibility_mode = "always" if suffix_visibility_mode.nil?
18
+
12
19
  props = {}
13
20
  props[:adaptive] = adaptive unless adaptive.nil?
14
21
  props[:align] = align unless align.nil?
@@ -9,6 +9,24 @@ module Ruflet
9
9
  WIRE = "CupertinoTimerPicker".freeze
10
10
 
11
11
  def initialize(id: 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, badge: nil, bgcolor: nil, bottom: nil, col: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, item_extent: nil, key: nil, left: nil, margin: nil, minute_interval: nil, mode: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, scale: nil, second_interval: nil, size_change_interval: nil, tooltip: nil, top: nil, value: nil, visible: nil, width: nil, on_animation_end: nil, on_change: nil, on_size_change: nil)
12
+ alignment = "center" if alignment.nil?
13
+ item_extent = 32.0 if item_extent.nil?
14
+ minute_interval = 1 if minute_interval.nil?
15
+ mode = "hour_minute_seconds" if mode.nil?
16
+ second_interval = 1 if second_interval.nil?
17
+ value = 0 if value.nil?
18
+ raise ArgumentError, "cupertino_timer_picker item_extent must be greater than 0" unless item_extent.positive?
19
+ unless minute_interval.positive? && (60 % minute_interval).zero?
20
+ raise ArgumentError, "cupertino_timer_picker minute_interval must be a positive factor of 60"
21
+ end
22
+ unless second_interval.positive? && (60 % second_interval).zero?
23
+ raise ArgumentError, "cupertino_timer_picker second_interval must be a positive factor of 60"
24
+ end
25
+ raise ArgumentError, "cupertino_timer_picker value must be greater than or equal to 0" unless value >= 0
26
+ raise ArgumentError, "cupertino_timer_picker value must be less than 24 hours" unless value < 86_400
27
+ raise ArgumentError, "cupertino_timer_picker value must be a multiple of minute_interval" unless (value % minute_interval).zero?
28
+ raise ArgumentError, "cupertino_timer_picker value must be a multiple of second_interval" unless (value % second_interval).zero?
29
+
12
30
  props = {}
13
31
  props[:align] = align unless align.nil?
14
32
  props[:alignment] = alignment unless alignment.nil?
@@ -9,6 +9,15 @@ module Ruflet
9
9
  WIRE = "CupertinoTintedButton".freeze
10
10
 
11
11
  def initialize(id: 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, border_radius: nil, bottom: nil, col: nil, color: nil, content: nil, data: nil, disabled: nil, disabled_bgcolor: nil, expand: nil, expand_loose: nil, focus_color: nil, height: nil, icon: nil, icon_color: nil, key: nil, left: nil, margin: nil, min_size: nil, mouse_cursor: nil, offset: nil, opacity: nil, opacity_on_click: nil, padding: nil, right: nil, rotate: nil, rtl: nil, scale: nil, size: nil, size_change_interval: 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_long_press: nil, on_size_change: nil)
12
+ alignment = "center" if alignment.nil?
13
+ autofocus = false if autofocus.nil?
14
+ border_radius = { "all" => 8.0 } if border_radius.nil?
15
+ opacity_on_click = 0.4 if opacity_on_click.nil?
16
+ size = "large" if size.nil?
17
+ unless opacity_on_click.respond_to?(:between?) && opacity_on_click.between?(0.0, 1.0)
18
+ raise ArgumentError, "cupertino_tinted_button opacity_on_click must be between 0.0 and 1.0"
19
+ end
20
+
12
21
  props = {}
13
22
  props[:align] = align unless align.nil?
14
23
  props[:alignment] = alignment unless alignment.nil?
@@ -9,6 +9,10 @@ module Ruflet
9
9
  WIRE = "AlertDialog".freeze
10
10
 
11
11
  def initialize(id: nil, action_button_padding: nil, actions: nil, actions_alignment: nil, actions_overflow_button_spacing: nil, actions_padding: nil, adaptive: nil, alignment: nil, badge: nil, barrier_color: nil, bgcolor: nil, clip_behavior: nil, col: nil, content: nil, content_padding: nil, content_text_style: nil, data: nil, disabled: nil, elevation: nil, expand: nil, expand_loose: nil, icon: nil, icon_color: nil, icon_padding: nil, inset_padding: nil, key: nil, modal: nil, opacity: nil, open: nil, rtl: nil, scrollable: nil, semantics_label: nil, shadow_color: nil, shape: nil, title: nil, title_padding: nil, title_text_style: nil, tooltip: nil, visible: nil, on_dismiss: nil)
12
+ if title.nil? && content.nil? && (actions.nil? || actions.empty?)
13
+ raise ArgumentError, "alert_dialog requires title, content, or actions"
14
+ end
15
+
12
16
  props = {}
13
17
  props[:action_button_padding] = action_button_padding unless action_button_padding.nil?
14
18
  props[:actions] = actions unless actions.nil?
@@ -9,6 +9,10 @@ module Ruflet
9
9
  WIRE = "AppBar".freeze
10
10
 
11
11
  def initialize(id: nil, actions: nil, actions_padding: nil, adaptive: nil, automatically_imply_leading: nil, badge: nil, bgcolor: nil, center_title: nil, clip_behavior: nil, col: nil, color: nil, data: nil, disabled: nil, elevation: nil, elevation_on_scroll: nil, exclude_header_semantics: nil, expand: nil, expand_loose: nil, force_material_transparency: nil, key: nil, leading: nil, leading_width: nil, opacity: nil, rtl: nil, secondary: nil, shadow_color: nil, shape: nil, title: nil, title_spacing: nil, title_text_style: nil, toolbar_height: nil, toolbar_opacity: nil, toolbar_text_style: nil, tooltip: nil, visible: nil)
12
+ unless toolbar_opacity.nil? || (0.0..1.0).cover?(toolbar_opacity)
13
+ raise ArgumentError, "app_bar toolbar_opacity must be between 0.0 and 1.0"
14
+ end
15
+
12
16
  props = {}
13
17
  props[:actions] = actions unless actions.nil?
14
18
  props[:actions_padding] = actions_padding unless actions_padding.nil?