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
@@ -9,6 +9,18 @@ module Ruflet
9
9
  WIRE = "ResponsiveRow".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, align: nil, alignment: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, badge: nil, bottom: nil, breakpoints: nil, col: nil, columns: nil, controls: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, margin: nil, offset: nil, opacity: nil, right: nil, rotate: nil, rtl: nil, run_spacing: nil, scale: nil, size_change_interval: nil, spacing: nil, tooltip: nil, top: nil, vertical_alignment: nil, visible: nil, width: nil, on_animation_end: nil, on_size_change: nil)
12
+ alignment = "start" if alignment.nil?
13
+ breakpoints = { "xs" => 0, "sm" => 576, "md" => 768, "lg" => 992, "xl" => 1200, "xxl" => 1400 } if breakpoints.nil?
14
+ columns = 12 if columns.nil?
15
+ run_spacing = 10 if run_spacing.nil?
16
+ spacing = 10 if spacing.nil?
17
+ vertical_alignment = "start" if vertical_alignment.nil?
18
+
19
+ validate_non_negative(:columns, columns)
20
+ validate_non_negative(:run_spacing, run_spacing)
21
+ validate_non_negative(:spacing, spacing)
22
+ validate_non_negative(:breakpoints, breakpoints)
23
+
12
24
  props = {}
13
25
  props[:adaptive] = adaptive unless adaptive.nil?
14
26
  props[:align] = align unless align.nil?
@@ -54,6 +66,16 @@ module Ruflet
54
66
  props[:on_size_change] = on_size_change unless on_size_change.nil?
55
67
  super(type: TYPE, id: id, **props)
56
68
  end
69
+
70
+ private
71
+
72
+ def validate_non_negative(name, value)
73
+ values = value.is_a?(Hash) ? value.values : [value]
74
+ values.each do |entry|
75
+ next if entry.nil?
76
+ raise ArgumentError, "responsive_row #{name} must be greater than or equal to 0" if entry.negative?
77
+ end
78
+ end
57
79
  end
58
80
  end
59
81
  end
@@ -9,6 +9,17 @@ module Ruflet
9
9
  WIRE = "SafeArea".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, align: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, avoid_intrusions_bottom: nil, avoid_intrusions_left: nil, avoid_intrusions_right: nil, avoid_intrusions_top: nil, badge: nil, bottom: nil, col: nil, content: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, maintain_bottom_view_padding: nil, margin: nil, minimum_padding: 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_size_change: nil)
12
+ if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
+ raise ArgumentError, "safe_area requires visible content"
14
+ end
15
+
16
+ avoid_intrusions_bottom = true if avoid_intrusions_bottom.nil?
17
+ avoid_intrusions_left = true if avoid_intrusions_left.nil?
18
+ avoid_intrusions_right = true if avoid_intrusions_right.nil?
19
+ avoid_intrusions_top = true if avoid_intrusions_top.nil?
20
+ maintain_bottom_view_padding = false if maintain_bottom_view_padding.nil?
21
+ minimum_padding = 0 if minimum_padding.nil?
22
+
12
23
  props = {}
13
24
  props[:adaptive] = adaptive unless adaptive.nil?
14
25
  props[:align] = align unless align.nil?
@@ -9,6 +9,8 @@ module Ruflet
9
9
  WIRE = "Semantics".freeze
10
10
 
11
11
  def initialize(id: nil, badge: nil, button: nil, checked: nil, col: nil, container: nil, content: nil, current_value_length: nil, data: nil, decreased_value: nil, disabled: nil, exclude_semantics: nil, expand: nil, expand_loose: nil, expanded: nil, focus: nil, focusable: nil, header: nil, heading_level: nil, hidden: nil, hint_text: nil, image: nil, increased_value: nil, key: nil, label: nil, link: nil, live_region: nil, max_value_length: nil, mixed: nil, multiline: nil, obscured: nil, opacity: nil, read_only: nil, rtl: nil, selected: nil, slider: nil, textfield: nil, toggled: nil, tooltip: nil, value: nil, visible: nil, on_copy: nil, on_cut: nil, on_decrease: nil, on_did_gain_accessibility_focus: nil, on_did_lose_accessibility_focus: nil, on_dismiss: nil, on_double_tap: nil, on_increase: nil, on_long_press: nil, on_long_press_hint_text: nil, on_move_cursor_backward_by_character: nil, on_move_cursor_forward_by_character: nil, on_paste: nil, on_scroll_down: nil, on_scroll_left: nil, on_scroll_right: nil, on_scroll_up: nil, on_set_text: nil, on_tap: nil, on_tap_hint_text: nil)
12
+ exclude_semantics = false if exclude_semantics.nil?
13
+
12
14
  props = {}
13
15
  props[:badge] = badge unless badge.nil?
14
16
  props[:button] = button unless button.nil?
@@ -9,6 +9,9 @@ module Ruflet
9
9
  WIRE = "Stack".freeze
10
10
 
11
11
  def initialize(id: nil, adaptive: nil, align: nil, alignment: nil, animate_align: nil, animate_margin: nil, animate_offset: nil, animate_opacity: nil, animate_position: nil, animate_rotation: nil, animate_scale: nil, animate_size: nil, aspect_ratio: nil, badge: nil, bottom: nil, clip_behavior: nil, col: nil, controls: nil, data: nil, disabled: nil, expand: nil, expand_loose: nil, fit: nil, height: nil, key: nil, left: nil, margin: 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_size_change: nil)
12
+ clip_behavior = "hardEdge" if clip_behavior.nil?
13
+ fit = "loose" if fit.nil?
14
+
12
15
  props = {}
13
16
  props[:adaptive] = adaptive unless adaptive.nil?
14
17
  props[:align] = align unless align.nil?
@@ -8,21 +8,40 @@ module Ruflet
8
8
  TYPE = "text".freeze
9
9
  WIRE = "Text".freeze
10
10
 
11
- def initialize(id: nil, alignment: nil, data: nil, ellipsis: nil, key: nil, max_lines: nil, max_width: nil, rotate: nil, spans: nil, style: nil, text_align: nil, value: nil, x: nil, y: nil)
11
+ def initialize(id: nil, alignment: nil, bgcolor: nil, color: nil, data: nil, ellipsis: nil, enable_interactive_selection: nil, font_family: nil, font_family_fallback: nil, italic: nil, key: nil, max_lines: nil, max_width: nil, no_wrap: nil, overflow: nil, rotate: nil, selectable: nil, selection_cursor_color: nil, selection_cursor_height: nil, selection_cursor_width: nil, semantics_label: nil, show_selection_cursor: nil, size: nil, spans: nil, style: nil, text_align: nil, theme_style: nil, value: nil, weight: nil, x: nil, y: nil, on_selection_change: nil, on_tap: nil)
12
12
  props = {}
13
13
  props[:alignment] = alignment unless alignment.nil?
14
+ props[:bgcolor] = bgcolor unless bgcolor.nil?
15
+ props[:color] = color unless color.nil?
14
16
  props[:data] = data unless data.nil?
15
17
  props[:ellipsis] = ellipsis unless ellipsis.nil?
18
+ props[:enable_interactive_selection] = enable_interactive_selection unless enable_interactive_selection.nil?
19
+ props[:font_family] = font_family unless font_family.nil?
20
+ props[:font_family_fallback] = font_family_fallback unless font_family_fallback.nil?
21
+ props[:italic] = italic unless italic.nil?
16
22
  props[:key] = key unless key.nil?
17
23
  props[:max_lines] = max_lines unless max_lines.nil?
18
24
  props[:max_width] = max_width unless max_width.nil?
25
+ props[:no_wrap] = no_wrap unless no_wrap.nil?
26
+ props[:overflow] = overflow unless overflow.nil?
19
27
  props[:rotate] = rotate unless rotate.nil?
28
+ props[:selectable] = selectable unless selectable.nil?
29
+ props[:selection_cursor_color] = selection_cursor_color unless selection_cursor_color.nil?
30
+ props[:selection_cursor_height] = selection_cursor_height unless selection_cursor_height.nil?
31
+ props[:selection_cursor_width] = selection_cursor_width unless selection_cursor_width.nil?
32
+ props[:semantics_label] = semantics_label unless semantics_label.nil?
33
+ props[:show_selection_cursor] = show_selection_cursor unless show_selection_cursor.nil?
34
+ props[:size] = size unless size.nil?
20
35
  props[:spans] = spans unless spans.nil?
21
36
  props[:style] = style unless style.nil?
22
37
  props[:text_align] = text_align unless text_align.nil?
38
+ props[:theme_style] = theme_style unless theme_style.nil?
23
39
  props[:value] = value unless value.nil?
40
+ props[:weight] = weight unless weight.nil?
24
41
  props[:x] = x unless x.nil?
25
42
  props[:y] = y unless y.nil?
43
+ props[:on_selection_change] = on_selection_change unless on_selection_change.nil?
44
+ props[:on_tap] = on_tap unless on_tap.nil?
26
45
  super(type: TYPE, id: id, **props)
27
46
  end
28
47
  end
@@ -9,6 +9,14 @@ module Ruflet
9
9
  WIRE = "View".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, appbar: nil, aspect_ratio: nil, auto_scroll: nil, badge: nil, bgcolor: nil, bottom: nil, bottom_appbar: nil, can_pop: nil, col: nil, controls: nil, data: nil, decoration: nil, disabled: nil, drawer: nil, end_drawer: nil, expand: nil, expand_loose: nil, floating_action_button: nil, floating_action_button_location: nil, foreground_decoration: nil, fullscreen_dialog: nil, height: nil, horizontal_alignment: nil, key: nil, left: nil, margin: nil, navigation_bar: nil, offset: nil, opacity: nil, padding: nil, right: nil, rotate: nil, route: nil, rtl: nil, scale: nil, scroll: nil, scroll_interval: nil, services: nil, size_change_interval: nil, spacing: nil, tooltip: nil, top: nil, vertical_alignment: nil, visible: nil, width: nil, on_animation_end: nil, on_confirm_pop: nil, on_scroll: nil, on_size_change: nil)
12
+ can_pop = true if can_pop.nil?
13
+ fullscreen_dialog = false if fullscreen_dialog.nil?
14
+ horizontal_alignment = "start" if horizontal_alignment.nil?
15
+ padding = 10 if padding.nil?
16
+ route = "/" if route.nil?
17
+ spacing = 10 if spacing.nil?
18
+ vertical_alignment = "start" if vertical_alignment.nil?
19
+
12
20
  props = {}
13
21
  props[:align] = align unless align.nil?
14
22
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -49,6 +49,22 @@ module Ruflet
49
49
  props[:on_event] = on_event unless on_event.nil?
50
50
  super(type: TYPE, id: id, **props)
51
51
  end
52
+
53
+ %w[wait_until_ready_to_show to_front center close destroy start_dragging].each do |method_name|
54
+ define_method(method_name) do |timeout: 10, on_result: nil|
55
+ runtime_page&.invoke(self, method_name, timeout: timeout, on_result: on_result)
56
+ end
57
+ end
58
+
59
+ def start_resizing(edge, timeout: 10, on_result: nil)
60
+ runtime_page&.invoke(
61
+ self,
62
+ "start_resizing",
63
+ args: { "edge" => edge },
64
+ timeout: timeout,
65
+ on_result: on_result
66
+ )
67
+ end
52
68
  end
53
69
  end
54
70
  end
@@ -9,6 +9,12 @@ module Ruflet
9
9
  WIRE = "WindowDragArea".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, disabled: nil, expand: nil, expand_loose: nil, height: nil, key: nil, left: nil, margin: nil, maximizable: 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_double_tap: nil, on_drag_end: nil, on_drag_start: nil, on_size_change: nil)
12
+ if content.nil? || (content.respond_to?(:props) && content.props["visible"] == false)
13
+ raise ArgumentError, "window_drag_area requires visible content"
14
+ end
15
+
16
+ maximizable = true if maximizable.nil?
17
+
12
18
  props = {}
13
19
  props[:align] = align unless align.nil?
14
20
  props[:animate_align] = animate_align unless animate_align.nil?
@@ -3,24 +3,101 @@
3
3
  module Ruflet
4
4
  module UI
5
5
  module CupertinoControlMethods
6
- def cupertino_button(**props) = build_widget(:cupertino_button, **props)
7
- def cupertinobutton(**props) = cupertino_button(**props)
8
- def cupertino_filled_button(**props) = build_widget(:cupertino_filled_button, **props)
9
- def cupertinofilledbutton(**props) = cupertino_filled_button(**props)
10
- def cupertino_text_field(**props) = build_widget(:cupertino_text_field, **props)
11
- def cupertinotextfield(**props) = cupertino_text_field(**props)
6
+ def cupertino_button(content = nil, **props)
7
+ mapped = props.dup
8
+ mapped[:content] = content unless content.nil?
9
+ build_widget(:cupertino_button, **mapped)
10
+ end
11
+ def cupertinobutton(content = nil, **props) = cupertino_button(content, **props)
12
+ def cupertino_filled_button(content = nil, **props)
13
+ mapped = props.dup
14
+ mapped[:content] = content unless content.nil?
15
+ build_widget(:cupertino_filled_button, **mapped)
16
+ end
17
+ def cupertinofilledbutton(content = nil, **props) = cupertino_filled_button(content, **props)
18
+ def cupertino_tinted_button(content = nil, **props)
19
+ mapped = props.dup
20
+ mapped[:content] = content unless content.nil?
21
+ build_widget(:cupertino_tinted_button, **mapped)
22
+ end
23
+ def cupertinotintedbutton(content = nil, **props) = cupertino_tinted_button(content, **props)
24
+ def cupertino_checkbox(**props) = build_widget(:cupertino_checkbox, **props)
25
+ def cupertinocheckbox(**props) = cupertino_checkbox(**props)
26
+ def cupertino_text_field(value = nil, **props)
27
+ mapped = props.dup
28
+ mapped[:value] = value unless value.nil?
29
+ build_widget(:cupertino_text_field, **mapped)
30
+ end
31
+ def cupertinotextfield(value = nil, **props) = cupertino_text_field(value, **props)
32
+ def cupertino_timer_picker(**props) = build_widget(:cupertino_timer_picker, **props)
33
+ def cupertinotimerpicker(**props) = cupertino_timer_picker(**props)
12
34
  def cupertino_switch(**props) = build_widget(:cupertino_switch, **props)
13
35
  def cupertinoswitch(**props) = cupertino_switch(**props)
14
36
  def cupertino_slider(**props) = build_widget(:cupertino_slider, **props)
15
37
  def cupertinoslider(**props) = cupertino_slider(**props)
38
+ def cupertino_radio(**props) = build_widget(:cupertino_radio, **props)
39
+ def cupertinoradio(**props) = cupertino_radio(**props)
16
40
  def cupertino_alert_dialog(**props) = build_widget(:cupertino_alert_dialog, **props)
17
41
  def cupertinoalertdialog(**props) = cupertino_alert_dialog(**props)
18
42
  def cupertino_action_sheet(**props) = build_widget(:cupertino_action_sheet, **props)
19
43
  def cupertinoactionsheet(**props) = cupertino_action_sheet(**props)
44
+ def cupertino_action_sheet_action(**props) = build_widget(:cupertino_action_sheet_action, **props)
45
+ def cupertinoactionsheetaction(**props) = cupertino_action_sheet_action(**props)
46
+ def cupertino_activity_indicator(**props) = build_widget(:cupertino_activity_indicator, **props)
47
+ def cupertinoactivityindicator(**props) = cupertino_activity_indicator(**props)
48
+ def cupertino_app_bar(**props) = build_widget(:cupertino_app_bar, **props)
49
+ def cupertinoappbar(**props) = cupertino_app_bar(**props)
50
+ def cupertino_bottom_sheet(content = nil, **props)
51
+ mapped = props.dup
52
+ mapped[:content] = content unless content.nil?
53
+ build_widget(:cupertino_bottom_sheet, **mapped)
54
+ end
55
+ def cupertinobottomsheet(content = nil, **props) = cupertino_bottom_sheet(content, **props)
56
+ def cupertino_date_picker(**props) = build_widget(:cupertino_date_picker, **props)
57
+ def cupertinodatepicker(**props) = cupertino_date_picker(**props)
20
58
  def cupertino_dialog_action(**props) = build_widget(:cupertino_dialog_action, **props)
21
59
  def cupertinodialogaction(**props) = cupertino_dialog_action(**props)
60
+ def cupertino_context_menu(**props) = build_widget(:cupertino_context_menu, **props)
61
+ def cupertinocontextmenu(**props) = cupertino_context_menu(**props)
62
+ def cupertino_context_menu_action(**props) = build_widget(:cupertino_context_menu_action, **props)
63
+ def cupertinocontextmenuaction(**props) = cupertino_context_menu_action(**props)
64
+ def cupertino_list_tile(**props) = build_widget(:cupertino_list_tile, **props)
65
+ def cupertinolisttile(**props) = cupertino_list_tile(**props)
22
66
  def cupertino_navigation_bar(**props) = build_widget(:cupertino_navigation_bar, **props)
23
67
  def cupertinonavigationbar(**props) = cupertino_navigation_bar(**props)
68
+ def cupertino_picker(children = nil, **props)
69
+ mapped = props.dup
70
+ mapped[:children] = children unless children.nil?
71
+ build_widget(:cupertinopicker, **mapped)
72
+ end
73
+ def cupertinopicker(children = nil, **props) = cupertino_picker(children, **props)
74
+ def cupertino_segmented_button(children = nil, **props)
75
+ mapped = props.dup
76
+ validate_cupertino_segmented_children!("cupertino_segmented_button", children, mapped)
77
+ mapped[:children] = children unless children.nil?
78
+ build_widget(:cupertinosegmentedbutton, **mapped)
79
+ end
80
+ def cupertinosegmentedbutton(children = nil, **props) = cupertino_segmented_button(children, **props)
81
+ def cupertino_sliding_segmented_button(children = nil, **props)
82
+ mapped = props.dup
83
+ validate_cupertino_segmented_children!("cupertino_sliding_segmented_button", children, mapped)
84
+ mapped[:children] = children unless children.nil?
85
+ build_widget(:cupertinoslidingsegmentedbutton, **mapped)
86
+ end
87
+ def cupertinoslidingsegmentedbutton(children = nil, **props) = cupertino_sliding_segmented_button(children, **props)
88
+
89
+ private
90
+
91
+ def validate_cupertino_segmented_children!(name, positional_children, props)
92
+ children = positional_children || props[:children] || props["children"] || props[:controls] || props["controls"]
93
+ visible_children = Array(children).reject { |child| child.respond_to?(:props) && child.props["visible"] == false }
94
+ raise ArgumentError, "#{name} controls must include at least two visible controls" if visible_children.length < 2
95
+
96
+ selected_index = props[:selected_index] || props["selected_index"] || 0
97
+ unless (0...visible_children.length).cover?(selected_index)
98
+ raise IndexError, "#{name} selected_index is out of range"
99
+ end
100
+ end
24
101
  end
25
102
  end
26
103
  end